我正在将一些 RaspberryPI 板用于数据采集系统。他们是不错的董事会,周围有很多社区支持,但他们真的很慢。我正在考虑用三星 Exynos 处理器逐渐用ODROID多核板替换它们。
我有一些使用任务集在我的服务器上设置 CPU 亲和性的经验,因为我总是运行定义为单线程的 Node.js 应用程序。
现在,是否可以在 ARM 板上执行此操作?我不明白为什么它在理论上不会,但我怀疑它的效果如何。
有没有人有这种黑客的经验?另外,如果您对 ARM CPU 以及它们与 x86 有何不同,我将不胜感激。
erm....不确定 taskset 是否真的是理想的解决方案。当然,将任务与同一个 l2 缓存关联是有好处的——如果您使用的是 CFS,那么为 sched_migration_cost 设置更高的值可能更合适。
AFAIK ARM 和 Intel 芯片对于任务集(或其他调度的东西,除了超线程明显例外)应该没有区别。但我没有玩过破解多核 ARM。
是的,这是可能的。
taskset
是一个操作系统级别的功能:你使用什么 CPU 架构(在合理范围内)并不重要,你只是告诉内核它可以在哪里运行,不能在哪里运行。ARM 和 x86 之间的差异在这里基本上无关紧要,因此我不会详细介绍它们(尽管您应该了解它们以及它们对您的特定用例的影响——这是一个适合您的研究项目你的业余时间)。
不,你不应该这样做。
不要试图智取调度程序。
调度器比你想象的更聪明。
在大多数情况下,调度程序比你聪明。
调度程序是由完全了解操作系统内部的人设计的。这些人拥有大量优化系统的实际经验,他们将这些经验(以及大量的鲜血、汗水、泪水和脏话)倾注到操作系统的调度程序算法中。
正如大卫所说,使用
taskset
或其他工具手动强制关联(或任何其他调度程序设置)可能是有意义的,当且仅当您知道您的情况是“特殊的”并且调度程序会做错事如果留给它自己的设备。这些是专为非常特定、非常狭窄的环境而设计的手术工具。
错误地使用这些工具最终会导致伤害性能的
人死亡。