Sto cercando di eseguire benchmark multi-thread su un set di CPU isolate. Per farla breve, inizialmente ho provato con isolcpus
e taskset
, ma ho riscontrato problemi . Ora sto giocando con cgroups / cset.
Penso che il "semplice" cset shield
caso d'uso dovrebbe funzionare bene. Ho 4 core, quindi vorrei usare i core 1-3 per il benchmarking (ho anche configurato questi core per essere in modalità tick adattabili), quindi il core 0 può essere usato per tutto il resto.
Seguendo il tutorial qui , dovrebbe essere semplice come:
$ sudo cset shield -c 1-3
cset: --> shielding modified with:
cset: "system" cpuset of CPUSPEC(0) with 105 tasks running
cset: "user" cpuset of CPUSPEC(1-3) with 0 tasks running
Quindi ora abbiamo uno "scudo" che è isolato (l'utente cset) e il nucleo 0 è per tutto il resto (il sistema cset).
Bene, finora sembra buono. Adesso diamo un'occhiata htop
. Tutti i processi avrebbero dovuto essere migrati sulla CPU 0:
Eh? Alcuni processi sono mostrati come in esecuzione sui nuclei schermati. Per escludere il caso in cui htop abbia un bug, ho anche provato a usare taskset
per ispezionare la maschera di affinità di un processo mostrato come nello scudo.
Forse quei compiti erano immobili? Innalziamo un processo arbitrario mostrato come in esecuzione su CPU3 (che dovrebbe essere nello scudo) htop
e vediamo se appare nel cgroup di sistema in base a cset
:
$ cset shield -u -v | grep 864
root 864 1 Soth [gmain]
vext01 2412 2274 Soth grep 864
Sì, è in esecuzione sul cgroup di sistema secondo cset
. Quindi, htop
e cset
in disaccordo.
Quindi cosa sta succedendo qui? Di chi mi fido: affinità cpu ( htop
/ taskset
) o cset
?
Ho il sospetto che non dovresti usare cset
e affinità insieme. Forse lo scudo funziona bene e dovrei ignorare le maschere di affinità e l' htop
output. Ad ogni modo, lo trovo confuso. Qualcuno può far luce?
numactl
e cgconfig
e cgrules
/ cgred
per semplificare ciò che stai facendo. Questi potrebbero essere disponibili per Debian con qualche lavoro.