Es posible fijar un proceso a un conjunto específico de núcleos de CPU utilizando la llamada sched_setaffinity()
. La página de manual dice:¿Fijar un proceso a un núcleo de CPU o un nodo SMP ayuda a reducir el tráfico de coherencia de caché?
Restricting a process to run on a single CPU also avoids the
performance cost caused by the cache invalidation that occurs when a process
ceases to execute on one CPU and then recommences execution on a different
CPU.
Que es casi una cosa obvia (¿o no?). Lo que no es tan obvio para mí es esto -
¿Fijar los LWP a una CPU específica o un nodo SMP reduce el tráfico del bus de coherencia de caché? Por ejemplo, dado que un proceso se está ejecutando, otras CPU no deberían modificar su memoria privada, por lo tanto, solo las CPU que son parte del mismo nodo SMP deberían permanecer coherentes.
Estoy usando Xeon X5570, que es algo NUMA. Supongamos que tengo 4 núcleos por CPU y 4 CPU. La pregunta es: ¿se enviará una solicitud de invalidación de caché a otras CPU si ejecuto 4 hilos constantemente haciendo algo de espera ocupada con vallas de memoria, pero esos LWP están anclados a 4 núcleos de la misma CPU?Si es así, ¿quién se asegura de que otras CPU no puedan modificar teóricamente la misma memoria y así se puede aplicar esta optimización? Sé que algunas personas lo hacen con DMA y controladores de dispositivos, pero ¿qué hay de las aplicaciones de Linux en el espacio de usuario? –
Para los 4 núcleos en la misma CPU, no veo por qué esto debería ser un problema en absoluto (L2 se comparte en Xeon 5xxx de todos modos, y la CPU hace lo que tiene que hacer para mantener L1 sincronizado muy bien, yo Nunca he notado ningún problema con eso). Para los núcleos en una de las otras 3 CPU, existe el filtro de búsqueda como se indica en srking. Normalmente no querrás estar ocupado, espera todo el tiempo de todos modos (eso tiene poco sentido), por lo que los problemas de rendimiento no deberían importar demasiado. – Damon
Por supuesto, depende en gran medida de su aplicación, pero cuando uno está ocupado espera, eso suele ser por tiempos muy cortos entre tareas más largas, por lo que normalmente no hay mucha contención, incluso con 16 hilos. Por lo tanto, cualquier efecto de consistencia de caché que pueda ver, incluso hipotéticamente, en realidad no importará tanto. Si lo hacen, realmente debes pasar la mayor parte del tiempo dando vueltas, y luego hay algo mal desde el principio. – Damon