我想以编程的方式隔离我的进程,使其运行在与其他任何东西(包括OS)不同的核心上,以减少上下文切换。我发现了一个类似的问题:
以及2011年接受的答复:
https://stackoverflow.com/a/13585364/997112
提到:
另一种方法是使用cpusets,它更加优雅和动态,但此时存在一些缺点(例如,不迁移计时器),这使我推荐了老的、粗糙的但有效的隔离参数。 请注意,Linux社区目前正在进行工作,以解决所有这些问题,并提供更好的隔离。
有什么最新消息吗?是否有可能从Linux函数中模拟孤岛?
我的C++环境是CentOS 7和GCC 5.2
发布于 2019-01-21 17:31:43
您正在尝试实现的是所谓的CPU关联。这通常是在sysadmin阶段完成的,而不是在编程阶段完成的,在企业环境中,程序将交付二进制文件,而sysadmin组可能决定也可能不决定给予某些二进制文件一定的亲和力。
这通常是通过taskset命令来完成的,参见实时参考指南:亲和力。
此命令将只在核心4上运行my-c-app。
taskset -c 4 /bin/my-c-app如果您想在C程序的代码中执行此操作,不管我提到了什么,请参见getaffinity()系统调用来设置处理器关联,以及线程Linux中来自C的set亲和关系?的这个答案。
一个非常简短的例子:
cpu_set_t my_set; /* Define your cpu_set bit mask. */
CPU_ZERO(&my_set); /* Initialize it all to 0, i.e. no CPUs selected. */
CPU_SET(7, &my_set); /* set the bit that represents core 7. */
sched_setaffinity(0, sizeof(cpu_set_t), &my_set); /* Set affinity of tihs process to */
/* the defined mask, i.e. only 7. */发布于 2020-01-29 15:29:01
使用linux sched_setaffinity()在SMP系统上设置调用进程的处理器关联将部分满足您的需求。
为了不允许任何其他进程被安排在保留CPU上,您需要通过使用无锁和无睡眠的实现来编程实现它。这将完全阻止任何其他进程/线程在保留CPU上被上下文切换。
https://stackoverflow.com/questions/54294488
复制相似问题