Jak automatycznie ustawić priorytet IO dysku?

8

Jeśli użyję aplikacji intensywnie korzystających z IO (takich jak Virtualbox, weryfikacja danych Steam, a nawet dd), mój system prawie przestanie odpowiadać. Mimo, że wszystko zaczęło się od normalnego priorytetu, powodują, że pulpit jest bardzo powolny i opóźnia uruchomienie innych aplikacji.

Wiem, że mogę użyć czegoś takiego, jak ionicena przykład zmienić priorytet na bezczynny, ale w przypadku Virtualboksa, który odradza wiele procesów, staje się to trudne.

Czy mogę podać jakieś wskazówki do systemu, aby podczas uruchamiania niektórych aplikacji były uruchamiane z najmniejszym priorytetem We / Wy?

Salem
źródło
wypróbowałeś moje rozwiązanie? Czy to działa?
sm4rk0

Odpowiedzi:

7

Uwaga: To rozwiązanie działa tylko z programem planującym cfq, jak wyjaśniono tutaj . Powinieneś sprawdzić, który z nich jest wystawiony

cat /sys/block/sda/queue/scheduler

i zmień to w razie potrzeby.

Jeśli dobrze zrozumiałem, chcesz, aby jakieś ioniceustawienia były stosowane przy każdym uruchomieniu polecenia. Możesz to zrobić w ten sposób:

echo 'ionice -c 3 /usr/bin/VirtualBox "$@"' > VirtualBox
chmod a+x VirtualBox
sudo mv VirtualBox /usr/local/bin/

Pierwsze polecenie tworzy plik VirtualBoxz tekstem w cudzysłowie jako jego zawartością. Powinno to mieć pełną ścieżkę do programu, ponieważ jeśli tylko zostanie określony VirtualBox, może zinterpretować go jako właśnie utworzony plik i utworzyć „pętlę”.

Drugie polecenie powoduje, że jest on wykonywalny, a trzeci przenosi ten nowy plik do folderu, który znajduje się przed folderem bin „systemowego” /usr/bin, więc nasz nowy plik zostanie wykonany zamiast oryginalnego. Część „$ @” zawiera wszystkie argumenty, z którymi wywołano polecenie, więc są one przekazywane do prawdziwego polecenia VirtualBox.

Zgodnie z odpowiedzią („tak”) na to pytanie superużytkownika Czy procesy dzieci dziedziczą priorytety jonizacji od rodziców? Jak sprawdzasz priorytet IO uruchomionego procesu? , powinno wystarczyć ioniceprocesowi nadrzędnemu, tak jak to:

ionice -c 3 VirtualBox

Na ionice stronie podręcznika dostępne są następujące wartości klas planowania we / wy:

  • 0 za brak
  • 1 w czasie rzeczywistym
  • 2 dla najlepszego wysiłku
  • 3 dla bezczynności (używane w powyższym przykładzie)

Można użyć numeru lub nazwy klasy.

Ponadto, -n levelopcja ma zastosowanie do klas czasu rzeczywistego i najlepszych starań, z 0-7 jako prawidłowymi danymi (poziomy priorytetu).

sm4rk0
źródło
1
Chociaż teoretycznie może to odpowiedzieć na pytanie, lepiej byłoby zawrzeć tutaj istotne części odpowiedzi i podać odnośnik.
Lucio
@Lucio, dziękuję za podpowiedź, ale czy nie ionice„zasadnicza część procesu powinna wystarczyć ”?
sm4rk0
1
Tak masz rację. Ale jeśli możesz , poświęć trochę czasu, a następnie dodaj więcej informacji z własnego doświadczenia na temat tej procedury, tworząc lepszą odpowiedź :)
Lucio
@Lucio, mam nadzieję, że teraz jest wystarczająco dobry. Dziękujemy za naleganie (:
sm4rk0
1
FYI: ionicemoże pracować cfqtylko z harmonogramem! Aby uzyskać więcej informacji: unix.stackexchange.com/questions/136226/…
andras.tim
-1

Możesz użyć polecenia „renice”, aby nadać priorytet procesom:

renice -<priority> <application's pid>

Być może twój dysk zbyt szybko się obraca, więc jeśli chcesz uruchomić aplikację taką jak Virtualbox, musi się ona zakręcić, zanim będziesz mógł zacząć pracować (może to chwilę potrwać).

Ashish
źródło
Dzięki za podpowiedź, ale szukałem sposobu, aby zrobić to automatycznie i systemowo. Na przykład: uruchamiając Virtualbox, uruchom go z najniższym możliwym priorytetem IO ...
Salem
regularne ładne i renice nie ustalają priorytetów we / wy oddzielnie.
Jay _silly_evarlast_ Wren
I to jest miłe, a nie jonowe. Jedno dotyczy procesora, drugie - we / wy.
Dagelf,