3

我刚刚构建并设置了一个应用了 RT 补丁的 vanilla Linux 内核。一切顺利,我现在可以正确启动到新内核。

让我想知道的是:我有一个用 C 语言编写的模拟器程序,我希望它以硬实时模式执行,新内核应该允许这样做。可能整个模拟器不需要以实时优先级运行,但里面的一些任务需要。

我怎样才能做到这一点?我认为仅仅运行程序是行不通的。

4

1 回答 1

8

如果您询问如何在实时上下文中运行一些线程,而其他线程则作为传统的分时线程运行,那么您只需要使用sched_setscheduler.

分时线程想成为SCHED_OTHER;实时模拟器线程希望是SCHED_FIFOSCHED_RR

在 Linux 上,为了以实时优先级运行,您的用户必须具有允许这样做的资源限制 ( man 2 rlimit )。特别是,您的rtpriorlimit 必须设置为您需要的最高优先级。或者,您可以以 root 身份运行应用程序。在带有 PAM 的 linux 系统中,这通常是通过将适当的行添加到 /etc/security/limits.conf

    @realtime - rtprio 99

这将向实时组授予最高实时优先级 99 的 rtprio 限制。然后您添加一个实时组/etc/groups并确保您的用户在该组中。

(而且由于这似乎是您第一次这样做,您可能还希望有一个“死人开关”高优先级实时线程,以确保您的模拟器不会失控并渲染系统不可用...如果您正在模拟高 CPU 负载,您可能会获得实际的高 CPU 负载并且无法在不重新启动的情况下停止运行。)

于 2012-05-08T16:35:42.450 回答