【发布时间】:2019-06-15 02:38:17
【问题描述】:
我想以编程方式隔离我的进程,使其在不同于其他一切(包括操作系统)的核心上运行,以减少上下文切换。我发现了这个类似的问题:
Whole one core dedicated to single process
2011 年接受的答案:
https://stackoverflow.com/a/13585364/997112
提及:
另一种方法是使用更优雅的cpusets 动态的,但目前存在一些弱点(没有 例如计时器的迁移)这让我推荐旧的, 粗略但有效的 isolcpus 参数。
请注意,Linux 社区目前正在开展工作以 解决所有这些问题以及更多问题,以提供更好的隔离。
有更新吗?是否可以从 Linux C API 函数模拟 isolcpus?
我的 C++ 环境是 CentOS 7 和 GCC 5.2
【问题讨论】:
-
这是特定于实现的东西。 C++ 标准对此没有任何规定。因此,至少,您需要指定您使用的是哪个 C++ 实现。
-
@SamVarshavchik 不确定您所说的哪个 C++ 实现是什么意思?我假设会有 Linux C API 调用。您是指哪个版本的 Linux?
-
@user997112 Sam 的评论是关于 C++ 语言如何没有提及这一点,因此没有适用于所有 C++ 开发人员的通用可移植答案。 C++ 实现是语言的特定实现、一组工具(编译器、链接器、标准库实现等)和允许开发人员将 C++ 代码转换为可执行形式的环境。您需要指定您正在使用什么实现以获得合理的答案(例如,Linux 发行版上的 gcc 版本 x.y)。在这种情况下,您使用的平台非常重要。
-
我刚刚将我的 C++ 环境信息添加到问题中。您还有什么需要了解的吗?
-
好吧,那么您就有了答案:使用 usolcpus 引导选项,并将保留的 CPU 用于您自己的线程。正如手册页所解释的,在“注意”部分中,没有其他选择:要么使用 isolcpus,要么手动隔离系统上的每个进程。
标签: c++ c linux performance