linux-CPU亲和力的优缺点
作者:互联网
假设我有一个多线程应用程序(例如〜40个线程)在多处理器系统(例如8个内核)上运行,并以Linux作为操作系统,其中不同的线程实际上是内核调度的LWP(轻量级进程).
使用CPU关联会带来什么好处/缺点? CPU亲和力是否通过将线程本地化到一部分核心来帮助您,从而最大程度地减少缓存共享/丢失,是否有帮助?
解决方法:
如果使用严格的相似性,则特定线程必须在该处理器(或一组处理器)上运行.如果您有许多完全独立运行的线程,并且它们在大于几千字节的更大的内存块上工作,那么在一个特定的内核上运行不太可能会受益匪浅-因为其他线程很可能在该特定的CPU上运行可能会丢弃所有L1缓存,并且很有可能也会丢弃L2缓存.哪个对性能更重要-cahce内容或“尽快运行”?是某些CPU始终处于空闲状态,还是每个内核上的CPU负载为100%?
但是,只有您知道(直到您告诉我们)线程在做什么.每次运行时,它们接触的“工作集”有多大(多少内存-代码和数据)?每个线程在运行时会运行多长时间?与其他线程的交互是什么?其他线程是否将共享数据与“此”线程一起使用?共享的数量和模式是什么?
最后,最终的答案是“是什么使它运行得更快?” -您只有拥有良好的(现实的)基准并尝试各种可能的选择,才能找到答案.即使您给我们每一行代码,每个线程的运行时间测量等等,我们也只能做出或多或少的复杂猜测-在尝试并测试这些变化之前(使用VARYING使用模式),几乎不可能知道.
一般而言,我建议拥有多个线程或者表明每个线程不是很忙(在CPU方面),或者您“做错了”……如果所有线程都运行平稳,那么更多的线程并不会更好出去-最好在这种情况下减少线程数量,因为它们只会互相竞争.
标签:affinity,multithreading,multicore,linux 来源: https://codeday.me/bug/20191031/1975711.html