NUMA regioni di memoria allocazione in Windows 7
-
03-10-2019 - |
Domanda
La nostra applicazione è:
- La configurazione hardware è un server dual Xeon con sistema operativo Windows 7 / 64bit. Ogni Xeon ha il proprio 12GB RAM in una [NUMA] [1] configurazione con un ponte che collega due regioni di memoria insieme.
- Tutto il software è scritto utilizzando VS2008 in C ++ e compilato come applicazioni a 64 bit.
- A Generation applicazione crea una regione di grande memoria condivisa (4-6gb) che è solo andare a essere accessibili da processi indicati con un'affinità di processore per eseguire il primo processore Xeon.
- A Ricezione applicazione crea una grande regione di memoria condivisa (2-4GB) che viene utilizzato principalmente da processi indicati con un'affinità di processore per eseguire il secondo processore Xeon. Tuttavia, quando l'App generazione completa la costruzione di una serie di dati (32 MB a 128 MB), si trasferisce tali informazioni alla regione di memoria condivisa in esecuzione su questo Xeon.
- Stiamo usando Boost biblioteca Interprocess per gestire le nostre regioni di memoria condivisa.
La mia domanda è, quando ciascuno dei processi che crea è condivisa regione di memoria, le funzionalità di Windows allocano che la memoria sullo stesso chip Xeon che lo ha creato? O devo assegnare esplicitamente la memoria ad un particolare chip Xeon utilizzando una delle funzioni della memoria Numa?
Modifica - per contribuire a chiarire ciò che è NUMA, da Wikipedia -
Non-Uniform Memory Access o Non-Uniform Memory Architecture (NUMA) è un disegno memoria del computer utilizzato in multiprocessori, dove la memoria tempo di accesso dipende dalla memoria posizione relativa a un processore. Sotto NUMA, un processore può accedere ai suoi propria memoria locale più velocemente di quanto non locale la memoria, che è, a memoria locale un altro processore o memoria condivisa tra processori processors.between.
http://en.wikipedia.org/wiki/Non-Uniform_Memory_Access per maggiori dettagli. Per me, è una di quelle cose che siamo tutti andando ad avere per saperne di più su come multiprocessing diventa più comune.
[1]: http: // msdn .microsoft.com / en-us / library / aa363804% 28VS.85% 29.aspxbetween processori.
Soluzione
Windows allocare memoria locale al thread richiedente; tuttavia, locale non è specificato da Microsoft. Locale potrebbe essere una delle tre opzioni:. Il processore ideale del thread, la maschera di affinità del processore del thread, o processore corrente del thread (ho dimenticato come l'implementazione corrente è)
In sostanza, la risposta è sì; Tuttavia, un comune Gotcha alloca tutta la memoria da un "filo controllore" che non è affinitize, e quindi la memoria è vicina al controllore e non i fili con particolare affinità.