如何强制两个进程在同一个CPU上运行?
语境:
我正在编写一个由多个进程组成的软件系统.它在Linux下用C编程.他们使用Linux共享内存在他们之间进行通信. 通常,在软件开发中,处于性能优化的最后阶段.在这里,我遇到了一个大问题.该软件具有高性能要求,但在具有4或8个CPU内核(通常具有多个CPU)的机器中,它只能使用3个内核,因此在第一个内核中浪费了25%的CPU功率,并且超过了第二个60%. 在做了一些测试之后,问题似乎是软件的设计使得基本上任何进程都可以将共享内存段传递给任何其他进程,以及其中的任何线程.这似乎会破坏性能,因为进程不断地从其他进程访问内存. 题: 现在,问题是,有没有办法强制成对的进程在同一个CPU中执行?我并不是要强迫他们总是在同一个处理器中执行,因为我不关心他们执行哪一个,尽管这样可以完成工作.理想情况下,有一种方法可以告诉内核:如果您在一个处理器中安排此过程,您还必须在同一个处理器中安排这个“兄弟”进程(它通过共享内存进行通信的进程),以便表现不会受到惩罚. 解决方法
我想你可以从这些手册页开始:
$apropos affinity sched_getaffinity (2) - set and get a process's CPU affinity mask sched_setaffinity (2) - set and get a process's CPU affinity mask taskset (1) - retrieve or set a process's CPU affinity $ 取决于您是否要从源代码或shell中执行此操作. pthread库也有一些功能. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |