GNU/Linux >> Linux Esercitazione >  >> Linux

come rilevare se isolcpus è attivato?

Quello che cerchi dovrebbe trovarsi all'interno di questo file virtuale:

/sys/devices/system/cpu/isolated

e il contrario in

/sys/devices/system/cpu/present    // Thanks to John Zwinck

Da drivers/base/cpu.c vediamo che la sorgente visualizzata è la variabile del kernel cpu_isolated_map :

static ssize_t print_cpus_isolated(struct device *dev,
    n = scnprintf(buf, len, "%*pbl\n", cpumask_pr_args(cpu_isolated_map));
...
static DEVICE_ATTR(isolated, 0444, print_cpus_isolated, NULL);

e cpu_isolated_map è esattamente ciò che viene impostato da kernel/sched/core.c all'avvio:

/* Setup the mask of cpus configured for isolated domains */
static int __init isolated_cpu_setup(char *str)
{
    int ret;

    alloc_bootmem_cpumask_var(&cpu_isolated_map);
    ret = cpulist_parse(str, cpu_isolated_map);
    if (ret) {
            pr_err("sched: Error, all isolcpus= values must be between 0 and %d\n", nr_cpu_ids);
            return 0;
    }
    return 1;
}

Ma come hai osservato, qualcuno potrebbe aver modificato l'affinità dei processi, inclusi quelli generati da un demone, cron , systemd e così via. Se ciò accade, verranno generati nuovi processi che ereditano la maschera di affinità modificata, non quella impostata da isolcpus .

Quindi quanto sopra ti darà isolcpus come hai richiesto, ma potrebbe comunque non essere utile.

Supponendo di scoprire che isolcpus è stato emesso, ma non ha "preso", questo comportamento indesiderato potrebbe essere derivato da qualche processo che si rende conto che è legato solo a CPU=0 , credendo che sia in modalità monoprocessore per errore e tentando utilmente di "sistemare le cose" reimpostando la maschera di affinità. In tal caso, potresti provare a isolare le CPUS 0-5 invece di 1-6 e vedere se funziona.


Uno dei modi più semplici per rilevare se isolcpus sta consultando proc per vedere quali parametri sono stati passati al kernel in runtime.

Per questo, useresti:

$cat /proc/cmdline 
BOOT_IMAGE=/boot/vmlinuz-4.8.0-1-amd64 root=/dev/sda1 ro isolcpus=2,3 quiet

Come puoi vedere, in questo particolare esempio isolcpus=2,3 è stato passato come argomento al kernel in esecuzione.

Puoi anche usare taskset puntato al PID 1. Dato che il PID 1 è il PID standard per il primo task lanciato dal kernel, possiamo considerare come un'indicazione abbastanza buona che rifletterà se abbiamo isolcpus Lavorando. Come in:

$taskset -cp 1
pid 1's current affinity list: 0,1

Confronto con il lscpu comando nello stesso server:

$lscpu | grep CPU.s
CPU(s):                4
On-line CPU(s) list:   0-3
NUMA node0 CPU(s):     0-3

Come si può vedere, lscpu mostra 4 CPU/core, mentre taskset mostra solo 0,1, quindi questo mostra isolcpus funziona qui.

Dai un'occhiata a:Come garantire la disponibilità esclusiva della CPU per un processo in esecuzione?


Puoi selezionare Cpus_allowed e Cpus_allowed_list per l'attuale processo di shell per vedere quali cpus sono state riservate

cat /proc/$$/status|tail -6

per esempio

Cpus_allowed_list:      0-1, 3-5

significa che la cpu=2 è stata riservata da isolcpus su un server da 6 CPU


Linux
  1. Come rilevare una perdita di memoria?

  2. Come rilevare la modifica dell'indirizzo IP a livello di codice in Linux?

  3. Come vedere il percorso assoluto completo di un collegamento simbolico

  4. Come vedere le dimensioni del pacchetto pip installate?

  5. Come rilevare la disponibilità della GUI in Bash/Shell?

Come vedere le notifiche Android su Ubuntu Desktop

Huawei E173 su Ubuntu 12.04?

Come vedere gli utenti che hanno effettuato l'accesso in Linux

Come rilevare e gestire i dispositivi su Linux

Come visualizzare le statistiche cPanel

Come posso vedere il documento Python su Linux?