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 cgroupsczę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ą cgexecpolecenia, 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 tasksetograniczenia 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ę tasksetsam:
$ 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 tasksetna każdym nowym. O wiele bardziej rozsądnym podejściem byłoby selektywne uruchamianie aplikacji intensywnie wykorzystujących procesor, za pośrednictwem cgexeclub 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 tasksetlub cgexecwymaga 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ą tasksellub 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.confpliku .
Zobacz też