2013-03-10 12 views
6

In Linux, dove lavoro principalmente, viene utilizzata una tecnica chiamata isolamento CPU, che blocca efficacemente un processo su un processore e impedisce al processore di eseguire qualsiasi altra operazione. I nostri membri del kernel hanno fatto un po 'di magia per gestire le interruzioni.Pin processor CPU Isolation su Windows

In Windows la cosa più vicina che ho trovato è un concetto di affinità che sembra legare un processo/filo a un processore. Ma non garantisce che il processore stia SOLO eseguendo quel processo/thread, il che significa che possono ancora esserci switch di contesto e altri jitter.

C'è un modo per avere una CPU isolata su Windows per i tempi di esecuzione semi-deterministici?

+1

No. Faresti meglio a restare con Linux se ti serve. –

risposta

3

Non esiste un modo preciso per farlo in modalità utente. E Windows cerca principalmente di impedire alle app di salvare tutte le risorse di sistema. Ma probabilmente potresti isolare la maggior parte degli altri processi su un altro core/processore in modo tale che il tuo codice possa essere eseguito su un core principalmente dedicato ad esso.

Inizia guardando at this code here on MSDN sui processi di enumerazione. Tranne il codice di enumerazione, verrà specificato PROCESS_SET_INFORMATION come flag su OpenProcess. Probabilmente avrai bisogno che il tuo codice venga eseguito con i privilegi di amministratore per fare ciò per i processi che non sono in esecuzione come credenziali NT. Per ogni handle di processo ottenuto, chiamare SetProcessAffinityMask per impostare il processo in modo che venga eseguito su tutti i core tranne uno. Quindi imposta il tuo processo per eseguirne un altro sul nucleo riservato che hai estratto da tutti gli altri handle di processo.

Questo non gestirà altri processi di avvio e il bilanciamento del carico sul core su cui si sta tentando di eseguire il proprio codice.

La vostra situazione potrebbe variare. Se questo è solo per test o per macchine dedicate al tuo codice, allora probabilmente andrà bene. Se si tratta di un'applicazione commerciale destinata a funzionare insieme a tutte le altre app, i clienti saranno terribilmente delusi nel vedere tutte le altre app e servizi accumulati quando eseguono il codice. Calpestare attentamente