我正在使用一些 RaspberryPI 板来制作数据采集系统。这些板子很不错,社区支持也很多,但它们的速度真的很慢。我正在考虑逐渐用奥德罗伊德多核主板,配备三星 Exynos 处理器。
我有一些使用经验任务集在我的服务器上设置 CPU 亲和性,因为我总是运行 Node.js 应用程序,根据定义,这些应用程序是单线程的。
现在,可以在 ARM 板上实现这个功能吗?我不明白为什么从理论上讲它不行,但我对它的效果有疑问。
有人有这种黑客攻击的经验吗?另外,如果您能提供关于 ARM CPU 以及它们与 x86 的区别的任何评论,我将不胜感激。
答案1
是的,有可能。
taskset
是一个操作系统级别的功能:您使用什么 CPU 架构并不重要(在合理范围内),您只是告诉内核它可以在哪里运行,不能在哪里运行。
这ARM 和 x86 之间的区别在这里基本上不重要,所以我不会详细讨论它们(尽管你应该了解它们以及它们对你的特定用例的影响——这是你业余时间的研究项目)。
不,你不应该这样做。
不要尝试超越调度程序。
调度程序比你想象的要聪明。
在大多数情况下,调度程序比你聪明。
调度程序是由完全了解操作系统内部原理的人设计的。这些人拥有大量优化系统的实际经验,他们将这些经验(以及大量的心血、汗水、眼泪和脏话)倾注到操作系统的调度程序算法中。
作为戴维说,使用taskset
或其他工具手动强制亲和性(或任何其他调度程序设置)可能有意义当且仅当你知道事实上你的情况很“特殊”,如果任由调度程序自行其是,它就会做出错误的事情。
这些是专为非常具体、非常狭窄的情况而设计的手术工具。如果
错误地使用这些工具,最终会杀死人并损害性能。
答案2
因为我一直在运行 Node.js 应用程序,从定义上讲,这些应用程序都是单线程的
呃……不确定任务集是否真的是理想的解决方案。当然,将任务与相同的 l2 缓存相关联是有好处的 - 如果您使用 CFS,那么为 sched_migration_cost 设置更高的值可能更合适。
据我所知,ARM 和 Intel 芯片在任务集(或其他调度内容,超线程显然是个例外)方面应该没有区别。但我还没有尝试过破解多核 ARM。