disabilitando i core cpu sul processore quad core su linux


14

Voglio disabilitare 3 core della CPU ed eseguire il mio processore su un singolo core. Ho usato il comando: maxcpus=1. Ma dopo questo ho eseguito questo comando ls /sys/devices/system/cpu. Mostra ancora cpu0,cpu1,cpu2,cpu3.

Ho anche provato: echo 0 > /sys/devices/system/cpu3/onlinema ottengo il seguente errore: no such file or directory.


Non è chiaro dove metti il maxcpus=1 comandante ? Hai inserito quella stringa grub.cfgcome opzione di avvio? (Aggiorna la tua domanda invece di rispondere ai commenti).
Anthon,

Sto usando la scheda freescale IMx6 sabreauto su Linux OS. Ho eseguito il comando su un emulatore di terminale "gtkterm"
user3818847

Con questo comando echo 0> / sys / devices / system / cpu3 / online sono in grado di vedere l'arresto di cpu3. Ora quello che voglio sapere è, dovrei riavviare il sistema affinché le modifiche
abbiano

AFAIK dovresti specificare maxcpus = 1 come parametro per il kernel (cioè quando sei in grub). Modifica '/ etc / defaults / grub' per aggiungerlo ai parametri del kernel, esegui 'update-grub' e riavvia. Ciò renderà le cose persistenti, cioè con una sola CPU all'avvio di Linux.
Anthon,

2
@ user3818847 che distro stai usando? La modifica dei parametri di avvio (da passare maxcpus=1) varia in base alla distribuzione. Anche il /syspercorso che hai è semplicemente quello sbagliato, il percorso corretto è /sys/devices/system/cpu/cpu3/online.
Patrick,

Risposte:


28

Come ha indicato Patrick in un commento , hai /syssbagliato strada .

echo 0 > /sys/devices/system/cpu/cpu3/online

Se si desidera spegnere tutte le CPU tranne cpu0:

for x in /sys/devices/system/cpu/cpu[1-9]*/online; do
  echo 0 >"$x"
done

Digitare maxcpus=1al prompt della shell non ha alcun effetto. Più precisamente, imposta la variabile maxcpussul valore 1in quella shell, che non ha altri effetti. È possibile impostare il numero di CPU all'avvio passando maxcpuscome parametro del kernel . Per questo, devi cambiare la configurazione del tuo bootloader (es. Per cambiare la riga di comando del kernel in U-Boot).


Grazie per i suggerimenti Ha funzionato con il comando suggerito da te
user3818847

Questo è almeno in qualche modo specifico del kernel. Sto eseguendo il kernel 3.6.6 e non ci sono file di questo tipo; invece usi il singolo /sys/devices/system/cpu/onlinee i ./offlinefile per controllare tutti i core.
Daniel Griscom,

@Gilles - C'è un modo per sapere quanto tempo ci vuole per accendere coree spegnere?
Chetan Arvind Patil,

@ChetanArvindPatil Time it. Penso che il tempo sarebbe dominato dall'accesso alla RAM se il codice in questione non fosse già nella cache L2 e al momento di spegnere il core altrimenti, ma dipende molto dalla CPU e dal sistema operativo.
Gilles 'SO- smetti di essere malvagio' il

1
@Xofo Quando il kernel spegne un core, quel core sta eseguendo il codice del kernel, quindi nessun thread è programmato su quel particolare core in quel momento. Dopo che il core è spento, i thread non sono più pianificati su quel core. Non so cosa succede se l'affinità di un thread lo limita a una serie di core tutti spenti.
Gilles 'SO- smetti di essere malvagio' il

1

non devi necessariamente disattivare o disabilitare i core.

si usa Cpusets e taskset

http://man7.org/linux/man-pages/man7/cpuset.7.html

Un cpuset definisce un elenco di CPU e nodi di memoria ...

Il filesystem cpuset è un'interfaccia pseudo-filesystem per il meccanismo cpuset del kernel, che viene utilizzato per controllare il posizionamento del processore e il posizionamento della memoria dei processi. È comunemente montato su / dev / cpuset.

Sui sistemi con kernel compilati con supporto integrato per cpuset, tutti i processi sono collegati a un cpuset e i cpuset sono sempre presenti. Se un sistema supporta cpuset, avrà la voce nodev cpuset nel file / proc / filesystems. Montando il filesystem cpuset (consultare la sezione ESEMPIO di seguito), l'amministratore può configurare i cpuset su un sistema per controllare il processore e il posizionamento della memoria dei processi su quel sistema. Per impostazione predefinita, se la configurazione di cpuset su un sistema non viene modificata o se il filesystem cpuset non è nemmeno montato, il meccanismo cpuset, sebbene presente, non ha alcun effetto sul comportamento del sistema.

Le CPU di un sistema includono tutte le unità di elaborazione logica su cui è possibile eseguire un processo, inclusi, se presenti, più core del processore all'interno di un pacchetto e Hyper-Thread all'interno del core del processore. I nodi di memoria includono tutti i banchi distinti di memoria principale; i sistemi piccoli e SMP in genere hanno un solo nodo di memoria che contiene tutta la memoria principale del sistema, mentre i sistemi NUMA (accesso alla memoria non uniforme) hanno più nodi di memoria.

In breve, se hai 1 CPU con 6 core, configureresti cpuset e avvieresti il ​​processo in un cpuset configurato su un solo core, ad esempio core # 3. Se fosse un processo parallelo sarebbe tutto limitato a quell'unico core in modo tale che se avessi avviato 4 processi in un dato cpuset con un solo core definito, allora ciascuno dei 4 processi otterrebbe un utilizzo del 25% della cpu sul core # 3.

A partire da ciò, ciò che accade in genere è una cpuset configurata in modo tale

  • in un sistema di oltre 200 core, ad esempio, cpusetA è core 0..60 ovunque si trovino, cpusetB è core 61..70; cpusetC è core 71..80; e così via, tuttavia un amministratore / architetto sceglie di configurare.
  • cpusetA è assegnato a determinati utenti e / o programmi software specifici; cpusetB è assegnato a diversi utenti / programmi; e così via.
  • un utente avvia un processo (processo) che richiederebbe N core ... all'interno di un dato cpuset, e ora quei processi multipli (paralleli) sono limitati a quel dato cpuset. E per quei N paralleli limitati a un dato cpuset, ciascuno di quei processi dovrebbe / dovrebbe fare uso dell'affinità del processore o dell'affinità della cpu in modo che quei processi paralleli non si muovano su core diversi all'interno del cpuset.

anche: https://linux.die.net/man/1/taskset

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.