2010-12-22 23 views
6

Tengo una pequeña estructura de datos por CPU en un módulo de kernel de Linux, donde cada CPU escribe y lee sus propios datos con frecuencia. Sé que tengo que asegurarme de que estos datos no estén en la misma línea de caché, porque si lo fueran, los núcleos se ensuciarían para siempre los cachés. Sin embargo, ¿hay algo en el nivel de página del que deba preocuparme desde el punto de vista del rendimiento SMP? es decir. ¿Habría algún impacto en el rendimiento al rellenar estas estructuras por CPU a 4096 bytes y alinearlas?Cuando tengo estructuras de datos por CPU, ¿mejora el rendimiento para tenerlas en páginas diferentes?

Esto está en linux 2.6 en x86_64.

(Los puntos sobre si vale la pena optimizar y las sugerencias de que voy a punto de referencia no son necesarios, lo que estoy buscando es si hay alguna base teórica para preocuparse por la alineación de la página).

Respuesta

5

Dentro de un solo nodo NUMA, las diferentes páginas solo son útiles si desea aplicar permisos diferentes, o asignarlas individualmente en procesos. Para problemas de rendimiento, estar en diferentes cachelines es suficiente.

En las arquitecturas NUMA, puede colocar una estructura de CPU por CPU en una página local al nodo de esa CPU, pero aún así no rellenaría la estructura con un tamaño de página para lograr eso, porque puede colocar las estructuras para varias CPU dentro del mismo nodo NUMA en la misma página.

+0

Gracias por la respuesta. Con 'NUMA exótico', ¿está sugiriendo que para algunas arquitecturas NUMA puede haber una contención de caché artificial entre los datos en líneas separadas pero en la página de una CPU? ¿Puedes dar un ejemplo de tal arquitectura? – kdt

+0

Creo que lo que Café quería decir es que NUMA se considera exótico (discutible), y en un sistema NUMA, desea que cada núcleo almacene sus datos en la memoria localmente accesible (verdadera). – Karmastan

+0

No sé si es exótico pero seguro que es feo. –

0

Bueno, he leído bastante sobre linux con soporte NUMA en estos días. En una configuración NUMA, sería útil si los datos para cada CPU estuvieran ubicados en una página que sea local para esa CPU.

2

Incluso en un sistema NUMA, probablemente no se beneficie demasiado asignando páginas de memoria locales a cada CPU (use kmalloc_node(), si tiene curiosidad).

La memoria local de nodo será más rápida, pero solo en el caso en que falle en todos los niveles de caché. Para cualquier cosa utilizada con cualquier frecuencia, probablemente no podrá notar la diferencia. Si está asignando megabytes de datos locales de CPU, entonces probablemente tenga sentido asignar páginas locales a cada CPU.

0

percpu generalmente se asegura de que no compartan una línea de caché. De lo contrario, se compromete como 7489aec8eed4f2f1eb3b4d35763bd3ea30b32ef5 habría sido bastante inútil.

Cuestiones relacionadas