我刚刚构建并设置了一个应用了 RT 补丁的 vanilla Linux 内核。一切顺利,我现在可以正确启动到新内核。
让我想知道的是:我有一个用 C 语言编写的模拟器程序,我希望它以硬实时模式执行,新内核应该允许这样做。可能整个模拟器不需要以实时优先级运行,但里面的一些任务需要。
我怎样才能做到这一点?我认为仅仅运行程序是行不通的。
我刚刚构建并设置了一个应用了 RT 补丁的 vanilla Linux 内核。一切顺利,我现在可以正确启动到新内核。
让我想知道的是:我有一个用 C 语言编写的模拟器程序,我希望它以硬实时模式执行,新内核应该允许这样做。可能整个模拟器不需要以实时优先级运行,但里面的一些任务需要。
我怎样才能做到这一点?我认为仅仅运行程序是行不通的。
如果您询问如何在实时上下文中运行一些线程,而其他线程则作为传统的分时线程运行,那么您只需要使用sched_setscheduler
.
分时线程想成为SCHED_OTHER
;实时模拟器线程希望是SCHED_FIFO
或SCHED_RR
。
在 Linux 上,为了以实时优先级运行,您的用户必须具有允许这样做的资源限制 ( man 2 rlimit )。特别是,您的rtprio
rlimit 必须设置为您需要的最高优先级。或者,您可以以 root 身份运行应用程序。在带有 PAM 的 linux 系统中,这通常是通过将适当的行添加到 /etc/security/limits.conf
@realtime - rtprio 99
这将向实时组授予最高实时优先级 99 的 rtprio 限制。然后您添加一个实时组/etc/groups
并确保您的用户在该组中。
(而且由于这似乎是您第一次这样做,您可能还希望有一个“死人开关”高优先级实时线程,以确保您的模拟器不会失控并渲染系统不可用...如果您正在模拟高 CPU 负载,您可能会获得实际的高 CPU 负载并且无法在不重新启动的情况下停止运行。)