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.