Taskset serve per associare un processo a una o più CPU; essenzialmente specificando dove può essere eseguito all'esecuzione iniziale o mentre è in esecuzione. Se si utilizza RHEL / CentOS su apparecchiature server moderne, numactl
si consiglia di utilizzare taskset
.
Cpuset / cset è per la protezione della CPU ed è un framework costruito attorno a cgroup Linux. Cset non è mai stato popolare in alcune distribuzioni (come RHEL) perché ci sono altri strumenti disponibili per la gestione dei processi.
Il primo comando seguente crea uno scudo che limiterebbe le attività del sistema operativo ai core della CPU 0 e 8. Il secondo sposterà la sessione di shell corrente sullo scudo della CPU specificato, determinando un isolamento dei processi del sistema e dell'utente.
# cset shield --cpu 1-7,9-15 --kthread=on
# cset proc --move --pid=$$ --threads --toset=user
Ci sono altre cose che è possibile verificare e mettere a punto prima di intraprendere il percorso dei processi di associazione alle CPU; interrupt ( irqbalance
disabilitazione parziale), impostazioni di risparmio energetico, scheduler di sistema, elevatori I / O, politica in tempo reale ( chrt
).
Vedi: Impostazioni TCP a bassa latenza su Ubuntu
Ecco un esempio ( contorto ) di un wrapper di applicazione che seleziona un core, arresta irqbalance, lo avvia e blacklist il core selezionato, quindi esegue ./your_program con SCHED_FIFO e priorità 99 sul core selezionato.
Core=5
CoreMask=`echo "16 o 2 $Core ^ p" | dc`
service irqbalance stop
until [ "`service irqbalance status`" = "irqbalance is stopped" ] ; do sleep 1 ; done
IRQBALANCE_ONESHOT=1 IRQBALANCE_BANNED_CPUS=${CoreMask} irqbalance
sleep 1
until [ "`service irqbalance status`" = "irqbalance is stopped" ] ; do sleep 1 ; done
numactl --physcpubind=${Core} --localalloc chrt -f 99 ./your_program