在并行系统中,每个进程都会对其他进程产生影响,因为它们都会争夺一些稀缺资源,例如 CPU 缓存、内存、磁盘 I/O、网络等。
什么方法最适合测量进程之间的干扰?例如进程 A 和 B 都大量访问磁盘。因此,并行运行它们可能会比顺序运行(单独运行时)慢。因为瓶颈是硬盘。
如果我不确切知道进程的行为(磁盘、内存或 CPU 密集型),什么方法最适合对其进行分析?
测量单个运行时间并比较每个并行进程的相对份额?
就像进程 A 平均单独运行 30 秒,与 B 100% 并行时 45 秒,20% 并行时 35 秒..等等??
比较 L1 和 LLC 缓存未命中、页面错误等多个指标是否会更好?
最佳答案
您需要做的是首先确定每个程序的限制因素。如果您想同时运行 CPU 密集型和 IO 密集型,那么影响很小。如果您想同时运行两个 IO 密集型进程,就会出现很多争用。
我写了一个相当详细的答案,关于如何解释“时间[命令]”结果的输出,以了解限制因素是什么。在这里:What caused my elapsed time much longer than user time?
一旦您获得了对程序进行“计时”的输出,您就可以确定哪些程序可能相互冲突,哪些不会。
关于performance - 如何测量进程之间的干扰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12930276/