2012-08-30 15 views
8

Cuando trabajamos en el sistema NUMA, la memoria puede ser local o remota en relación con el nodo NUMA actual. Para hacer memoria más local hay una política de "primera-touch" (la memoria por defecto al nodo estrategia de unión): http://lse.sourceforge.net/numa/status/description.html¿Existe la política de NUMA siguiente toque en Linux moderno

de memoria por defecto Encuadernación Es importante que la memoria de programas de usuario está atribuida un nodo cercano al que contiene la CPU en la que se están ejecutando. Por lo tanto, de forma predeterminada, la memoria satisface los fallos de página del nodo que contiene la CPU con fallas de página. Debido a que la primera CPU para tocar la página será la CPU que falla la página, esta política predeterminada se denomina "primer toque".

http://techpubs.sgi.com/library/dynaweb_docs/0640/SGI_Developer/books/OrOn2_PfTune/sgi_html/ch08.html

La política predeterminada se llama primer toque. Según esta política, el proceso que toca (es decir, escribe o lee) una página de memoria hace que esa página se asigne en el nodo en el que se está ejecutando el proceso. Esta política funciona bien para programas secuenciales y para muchos programas paralelos también.

También hay algunas otras políticas no locales. También hay una función para requerir el movimiento explícito del segmento de memoria a algún nodo NUMA.

Pero a veces (en el contexto de muchos subprocesos de aplicaciones individuales) puede ser útil tener una política de "siguiente toque": llamar a alguna función para "desvincular" alguna región de memoria (hasta 100 MB) con algunos datos y volver a aplicar controlador de "primer toque" en esta región que migrará la página en el siguiente toque (lectura o escritura) al numa nodo de acceso al hilo.

Esta política es útil cuando hay muchos datos para procesar por muchos subprocesos y hay diferentes patrones de acceso a estos datos (por ejemplo, primera fase: dividir el arreglo 2D por columnas por hilos; segundo, dividir los mismos datos) por filas).

Dicha política fue apoyado en Solaris desde 9 a través de madvice con la bandera MADV_ACCESS_LWP

https://cims.nyu.edu/cgi-systems/man.cgi?section=3C&topic=madvise

MADV_ACCESS_LWP decirle al núcleo que la próxima LWP a toque el rango de direcciones especificado será acceder a él más fuertemente, por lo que el kernel debería tratar de asignar la memoria y otros recursos para este rango de y el LWP en consecuencia.

No era (mayo de 2009) el parche para el kernel de Linux llamada "afinidad-a-lado-touch", http://lwn.net/Articles/332754/ (thread), pero como he entendido que fue aceptada en la línea principal, no es así?

También estaban los parches "migrate_on_fault" de Lee Schermerhorn http://free.linux.hp.com/~lts/Patches/PageMigration/.

Entonces, la pregunta: ¿Hay algún próximo toque para NUMA en el kernel actual de Linux o en algún fork importante, como RedHat Linux Kernel o Oracle Linux Kernel?

+0

Consulte este artículo - https://hal.inria.fr/inria-00358172/file/article.pdf "Habilitación de la migración de memoria de alto rendimiento para aplicaciones multiproceso en Linux", Brice Goglin, Nathalie Furmento, 2009 "Implementación de la política Next-touch en user-space a través de mprotect y un manejador de señal para falla de segmentación ". La implementación del próximo toque es parte de su MaMI/Marcel https://runtime.bordeaux.inria.fr/MaMI//https://runtime.bordeaux.inria.fr/marcel/ – osgx

Respuesta

1

Dado mi entendimiento, no hay nada similar en el kernel de vainilla.Numactl tiene funciones para migrar páginas manualmente, pero probablemente no sea útil en su caso. (La descripción de la política NUMA se encuentra en Documentation/vm/numa_memory_policy si desea verificarlo)

Creo que esos parches no se combinan ya que no veo ninguno de los fragmentos de código relevantes que aparecen en el núcleo actual.

Cuestiones relacionadas