Dire al kernel Linux * non * di usare determinate CPU


8

Sto cercando di eseguire alcuni benchmark su una macchina multicore e vorrei dire al kernel Linux di evitare semplicemente determinati core a meno che non venga esplicitamente detto di usarli.

L'idea è che potrei mettere da parte una manciata di core (la macchina ha 6 core fisici) per il benchmarking e usare la maschera cpu per consentire solo i processi di benchmark sui core dati.

È fattibile?


Quali sono i benchmark effettivi che si desidera eseguire?
Basile Starynkevitch il

Risposte:


5

È possibile isolare alcuni core della CPU dalla pianificazione del kernel utilizzando il isolcpusparametro. Aggiungi questo parametro a grub.conf e riavvia per rendere effettive.


2
Il link è morto. Potrebbe essere meglio includere un esempio direttamente nella risposta.
pchaigno,

4

Volete un po 'di affinità del processore (o affinità della CPU ).

Il syscall rilevante è sched_setaffinity (2) , ma dovresti usarlo tramite pthread_set_affinity_np (3) se vuoi codificare i tuoi benchmark per questo.

Il comando correlato è tasket (1) e potresti usarlo sui comandi che vuoi confrontare (o sulla tua shell).

Se possibile, assicurarsi che la macchina non sia caricata molto da altre attività non correlate al benchmark.

In alternativa, usa un hypervisor come Xen e avvia il tuo Linux come SO guest per quell'hypervisor. Quindi configurare xenper utilizzare solo un set limitato di core della CPU (non conosco i dettagli esatti, è necessario scoprirlo). Su Debian (e relativi) distribuzioni, si potrebbe installare i pacchetti come xen-linux-system-amd64, xen-hypervisor-amd64, xen-utilsecc (sto usando su Debian / Sid xen-hypervisor-4.5-amd64, xen-linux-system-4.0.0-1-amd64, xen-utils-4.5 ecc ...).

Potrebbe esserci forse un modo per configurare (forse al momento della compilazione del kernel, o passando argomenti specifici al kernel tramite il caricatore Grub) il proprio kernel Linux per limitare il numero di core utilizzabili.

Naturalmente, è meglio, quando il benchmarking alcuni -EG programma su un desktop Linux da PC, per aver cura di evitare di avere molti processi in esecuzione al di fuori (uso ps auxw, pstree -p, toptrovare questi). Almeno, chiudere e chiudere la maggior parte delle applicazioni interattive (browser come Firefox, e-mail, editor, IDE come Eclipse) e mantenere un numero limitato di terminali da confrontare. Potresti anche eseguire il benchmark in modalità batch (utilizzando batcho atper eseguire i benchmark) mentre non hai nemmeno effettuato l'accesso (quindi non hai sessioni GUI à Gnome o KDE o Xfce , ecc ... in esecuzione).


L'impostazione dell'affinità delle attività da confrontare non è sufficiente. Devi anche tenere lontani altri compiti. Cosa fa la tua proposta di hypervisor, ma in modo molto pesante.
Gilles 'SO- smetti di essere malvagio' il

@Gilles: perché è necessario tenere lontani altri compiti ai fini del benchmarking? In pratica, quando si esegue il benchmarking, il PC è spesso abbastanza inattivo ... Per un server costoso le cose sono diverse!
Basile Starynkevitch il

Ad esempio perché stai eseguendo il benchmarking sul tuo PC desktop che sta anche spendendo risorse su Firefox, Eclipse e altre attività molto impegnative.
Gilles 'SO- smetti di essere malvagio' il

Sul tuo PC desktop, puoi facilmente interrompere la maggior parte delle attività (ad esempio chiudere ed uscire da Firefox ed Eclipse) durante il benchmarking. È anche possibile eseguire i benchmark in modalità batch (utilizzando ato batch) mentre non si è effettuato l'accesso (quindi non eseguire alcuna sessione di consumo).
Basile Starynkevitch il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.