TL; DR : Z krótkich badań wynika, że można ograniczyć polecenia do określonej liczby rdzeni, jednak we wszystkich przypadkach trzeba użyć polecenia, które faktycznie wymusza ograniczenie.
grupy
Linux ma cgroups
często używany dokładnie w celu ograniczenia zasobów dostępnych dla procesów. Z bardzo krótkich badań można znaleźć przykład w Arch Wiki z konfiguracją Matlab (oprogramowanie naukowe) w /etc/cgconfig.conf
:
group matlab {
perm {
admin {
uid = username;
}
task {
uid = username;
}
}
cpuset {
cpuset.mems="0";
cpuset.cpus="0-5";
}
memory {
memory.limit_in_bytes = 5000000000;
}
}
Aby taka konfiguracja zadziałała, musisz uruchomić proces za pomocą cgexec
polecenia, np. Z tej samej strony wiki:
$ cgexec -g memory,cpuset:matlab /opt/MATLAB/2012b/bin/matlab -desktop
zestaw zadań
Pokrewnych pytanie dotyczące ASK i Ubuntu Jak ograniczyć proces do jednego rdzenia procesora w systemie Linux? [duplikat] na stronie Uniksa i Linuksa pokazuje przykład zastosowania taskset
ograniczenia procesorów dla tego procesu. W pierwszym pytaniu jest to osiągane poprzez analizowanie wszystkich procesów dla konkretnego użytkownika
$ ps aux | awk '/^housezet/{print $2}' | xargs -l taskset -p 0x00000001
W drugim pytaniu proces rozpoczyna się taskset
sam:
$ taskset -c 0 mycommand --option # start a command with the given affinity
Wniosek
Chociaż z pewnością możliwe jest ograniczenie procesów, wydaje się, że nie jest to takie proste dla konkretnych użytkowników. Przykład w połączonym poście Ask Ubuntu wymagałby spójnego skanowania procesów należących do każdego użytkownika i korzystania z niego taskset
na każdym nowym. O wiele bardziej rozsądnym podejściem byłoby selektywne uruchamianie aplikacji intensywnie wykorzystujących procesor, za pośrednictwem cgexec
lub taskset
; nie ma również sensu ograniczanie wszystkich procesów do określonej liczby CPUS, szczególnie tych, które faktycznie korzystają z równoległości i współbieżności w celu szybszego wykonywania swoich zadań - ograniczenie ich do określonej liczby procesorów może spowolnić przetwarzanie. Dodatkowo, jak wspomniano w odpowiedzi Terdona, jest to marnotrawstwo zasobów
Uruchamianie wybranych aplikacji za pośrednictwem taskset
lub cgexec
wymaga komunikowania się z użytkownikami w celu poinformowania ich, jakie aplikacje mogą uruchomić, lub tworzenia skryptów opakowujących, które uruchamiają wybrane aplikacje za pomocą tasksel
lub cgexec
.
Ponadto należy rozważyć ustawienie liczby procesów, które może odrodzić się użytkownik lub grupa, zamiast ustawiania limitu liczby procesorów. Można to osiągnąć za pomocą /etc/security/limits.conf
pliku .
Zobacz też