Czy można zapobiec zamianie określonego programu (tj. Rhythmbox i jego zależności) na dysk?
Pytam, ponieważ mam problem z czknięciem odtwarzacza muzyki, ilekroć Chromium ma za dużo pamięci. Czy istnieje sposób na obejście tego? Nie jest to już problemem w systemie Windows, więc prawdopodobnie istnieje na to sposób.
ps
lubtop
sprawdziłeś, czy rhytmbox jest naprawdę zamieniony przez zaznaczenie polaRSS
/RES
? Myślę, że twój problem jest spowodowany głównie niewłaściwym planowaniem. Powinieneś spróbowaćrenice
przetworzyć rhytmbox lub zmienić niektóre jego ustawienia, np. Rozmiar bufora audio.Odpowiedzi:
Myślę, że problem z czkawką niekoniecznie jest spowodowany zamianą. Jeśli jakiś program coś odtwarza, Linux powinien to zauważyć i nie zamieniać. Programy, które niewiele robią, są pierwszymi, które ulegają zamianie. Możesz sprawdzić, czy program naprawdę się zamienia, patrząc na pole
RSS
/RES
od ps lub od góry .RSS
to rezydentny rozmiar zestawu, nie wymieniona pamięć fizyczna używana przez zadanie (w kilobajtach).Myślę, że twój problem jest najprawdopodobniej spowodowany niewłaściwym planowaniem procesora i I / O oraz odrobiną nieefektywności Rhythmbox, co czyni go wrażliwym na duże obciążenia systemu. Priorytet procesora można zmienić poleceniami nice i renice . Priorytet we / wy można zmienić za pomocą polecenia ionice . Tylko superużytkownik może używać wysokich priorytetów. Powinieneś także wiedzieć, że ludzie jądra Linuksa próbują poprawić czas reakcji systemów komputerowych za pomocą różnych łatek o niskim opóźnieniu, więc możesz rozważyć ich użycie. Jednym z nich jest łatka na ~ 200 linii napisana przez Mike'a Galbraitha, która zrobiła wrażenie na Linusie. Alternatywą dla tej łatki jest sztuczka z grupami Lennarta Poetteringa co, jak sądzę, będzie domyślnym w Fedorze 15.
W każdym razie bez tych łatek istnieją dwie opcje: uruchom program z wysokim priorytetem lub zmień go później. W przypadku pierwszej opcji można użyć skryptu opakowania wokół Rhythmbox:
Musisz uruchomić go jako root. Jeśli nie chcesz, aby zalogować się jako root tylko do rozpoczęcia tego, można użyć jednej
su
lubsudo
.Jeśli chodzi o późniejszą zmianę priorytetu, jeśli jesteś zbyt leniwy, aby zalogować się jako root, aby go zmienić, możesz spróbować użyć zadania cron, które jest uruchamiane co 5 minut i ustawia priorytet
rhythmbox
procesu, ale nie polecam tego:źródło
Krótka odpowiedź: nie możesz i nie powinieneś.
Dawno temu pliki wykonywalne uhonorowały lepki bit,
+t
który powiedziałby jądrze, aby nie zamieniać, ale dziś jest ignorowany.Jeśli jądro podejmie decyzję o zamianie, z pewnością ma ważny powód. Linux bardzo agresywnie wykorzystuje pamięć, ponieważ bezczynna pamięć RAM jest zmarnowanym zasobem.
Jeśli naprawdę nie chcesz zamieniać, uzyskać więcej pamięci RAM lub po prostu
# swapoff -a
(niezalecane, może sprawić, że Twój system będzie bezużyteczny, jeśli masz już problemy).Shouldn't
dzieje się, gdy tworzysz jakąś aplikację i nie chcesz, aby w ogóle się zmieniała. Spójrz na ten post na stackoverflow .źródło
Wydaje się, że już na to odpowiedziano:
/programming/578137/can-i-tell-linux-not-to-swap-out-a-particular-processes-memory
Konsensus jest taki, że prawdopodobnie nie powinieneś: /
źródło
Można to zrobić na kilka sposobów. Możesz spróbować wypróbować, że „mówi”, aby Linux pracował mniej z zamianą (ogólnie):
Od: https://www.kernel.org/doc/Documentation/sysctl/vm.txt
Inną opcją jest użycie menedżera jądra cgroups, jest to specyficzne dla poszczególnych procesów, ale będziesz miał trochę „pracy” do wykonania: Odpowiedzi tutaj: /unix/10214/per-process-swapiness-for -linux # 10227
źródło
Możesz użyć
mlockall()
syscall. mlockall () wymusza rezydentność procesu pamięci (= bez zamiany, bez nadpisywania itp.). AFAIK, nie ma do tego polecenia powłoki, ale łatwo je utworzyć. Wyglądałoby to tak:Uwaga: aby zadzwonić, musisz być rootem
mlockall()
.Jednak, jak powiedziano w innej odpowiedzi, nie sądzę, że tak naprawdę chcesz.
źródło