是否存在像实时 Linux 容器这样的东西?

是否存在像实时 Linux 容器这样的东西?

有没有某种方法可以配置 Linux 容器(即 cgroups/命名空间隔离的进程树)以具有实时特性 - 理想情况下适合工业机器控制/机器人等?

也许它与容器没有任何关系,并且总是为单个进程提供实时功能? OTOH,这样的容器可能包含完全不同的(RT?)Linux 发行版,并且可能具有对多核处理器的一个核心的独占访问权限?

我目前没有任何具体的用例,只是想知道 Linux 是否/如何能够取代可编程逻辑控制器

答案1

有可能,但也可能不会,这取决于您的要求。

“实时”是指低延迟的一个概念——也就是说,理论上意味着“无延迟”,但实际上达到了延迟是不可能实现的;毕竟,在输入可以生成某种输出之前总是需要进行一些处理,因此总会有一些延迟,即使只是一个时钟周期。

然而,有延迟,然后有延迟,它们是七种不同的东西;-)

通过更改进程的优先级或其调度队列和/或切换到低延迟 C 库,可以减少 Linux 系统上的延迟,这样做已经满足了以下要求:一些“实时”设置的形式。如果这就是您需要做的全部,那么当然,使用容器将允许您将系统的低延迟部分与其余部分分开(前提是您允许该容器中的进程修改其调度优先级),并且您不应该看到很大的不同。

然而,您可能需要做更多的事情。有更多方法可以修改延迟。按照“最少工作”到“最多工作”的顺序,我知道:

  • 在大多数默认发行版内核中,您可以设置一些启动时间选项,这些选项会改变调度程序的工作方式,从而减少延迟(尽管平均延迟为表现可能会受苦)
  • 您还可以设置许多编译时选项(尽管许多现在已更改为启动时选项,但仍然剩下一些)
  • 有(或者至少在我上次检查时)有许多低延迟补丁,可以满足更严格的实时要求。

如果您需要其中之一,那么容器将无法帮助您,因为容器仍然使用与系统其余部分相同的内核。

话虽如此,但在某些情况下可能的要在容器中运行实时应用程序以及同一系统上的其他应用程序,我建议不要这样做。在同一系统上运行多个事物很可能会导致系统上运行的应用程序出现延迟;因此,即使您确实允许容器执行其需要执行的操作,系统也可能无法跟上。

相关内容