збільшити чутливість робочого столу на Linux під час заміни


15

У всіх тестованих до цього часу дистрибутивах GNU / Linux виникає проблема, що кожного разу, коли баран заповнюється, і система починає мінятися, весь робочий стіл та графічний інтерфейс користувача стає невідповідним, до певної міри, що іноді мені доводиться чекати приблизно 5-10 секунд після перемістивши фізичну мишу, поки покажчик миші фактично не рухається.

Це своєрідна дратівлива поведінка, особливо в системах з низьким рівнем оперативної здатності.

Чи є якийсь спосіб надати деяким програмам / робочим місцям, таким як середовище робочого столу тощо, більш високий пріоритет для перебування в операційному режимі, ніж інші програми, щоб програма фактично перетягувала всю пам'ять перед тим, як середовище робочого столу тощо?

EDIT: Я говорю про випадок, коли використовується вся оперативна пам’ять, тому вона завжди почне мінятися, якщо вона не відключена (я не хочу, щоб процеси вбивалися випадковим чином). У мене була ця проблема не тільки в умовах низького обсягу оперативної пам’яті, але і з 8 Гбіт оперативної пам’яті на моїй настільній машині, частково через багато віртуальних машин, частково через витік пам’яті. ZRAM також не є рішенням, оскільки лише затримує проблему. Єдине рішення, про яке я можу придумати цю проблему, - це деяка утиліта користувальницького простору або API ядра, яка дозволяє запобігти заміні певних завдань або принаймні зробити це малоймовірним. Хтось знає інше рішення чи щось знає про такий інструмент чи API, який існує чи планується?

2-е редагування: ulatencyd , здається, не працює з новішими версіями systemd, відповідно до https://aur.archlinux.org/packages/ulatencyd-git/ та https://wiki.archlinux.org/index.php/Ulatencyd . Це може бути тому, що systemd взяв на себе повний контроль над групами з точки зору простору користувачів, якщо я правильно це розумію.


3
cgroups, якщо у вас включена пам'ять cgroup memory, та увімкнено обмін обліку ( cgroup_enable=memory swapaccount=1у командному рядку ядра; зауважте, що це незначна вартість продуктивності). Приклад реалізації: ulatencyd .
дероберт

@derobert Чудово це здається, що це саме те, що я шукав. Я почну експериментувати з цим, як тільки встигну.
FSMaxB

Чудово, ulatencyd навіть має пакет AUR, гадаю, мені пощастило бути користувачем Archlinux.
FSMaxB

Є навіть стаття про wiki wiki.archlinux.org/index.php/Ulatencyd
FSMaxB

Якби я міг проголосувати за це більше, - Невже немає прямого способу сказати графічному інтерфейсу та декільком ключовим програмам залишатися в оперативній пам’яті, щоб він залишався чуйним? Я маю на увазі, який гірший сценарій надання користувачам Linux цієї можливості? Комп'ютер виходить з ладу? Хто не зробив це перед? :) Я маю на увазі іноді, я випадково запускаю занадто багато віртуальних машин, тому що я не міг правильно додати (номери оперативної пам’яті), і тоді потрібно ЗАВЖДИ повернути речі під контроль. Якщо сказати про графічний інтерфейс і, можливо, термінал залишитися в оперативній пам'яті, це виправить ?! Будь ласка, хтось відповість на це!
Деймон

Відповіді:


1

Наскільки я знаю, це не специфічна для Linux проблема, а це те, як працює SWAP (або віртуальна пам'ять). Якщо ОС потребує пошуку даних на жорсткому диску на відміну від ОЗУ, вона сповільниться. З цим нічого не можна зробити, доступ до диска набагато повільніше, ніж доступ до ОЗУ.

Ви не зможете встановити пріоритет, з яким обмінюються процеси, що визначається ядром, яке намагатиметься досягти максимальної ефективності, ви не зможете зробити це краще. Що ви можете зробити, це встановити пріоритет процесора в процесі, і це може допомогти. Ваша система знижується через час, необхідний для читання з / до SWAP, це означає, що процесору доведеться чекати, коли відповідні дані будуть отримані процесом, який вимагає його, перш ніж він може продовжуватися. Якщо ви встановите, що ваш DE має більш високий пріоритет для доступу до процесора, це повинно підштовхнути його операції до вершини та трохи прискорити роботу.

Отже, пріоритет CPU встановлюється за допомогою команд niceта renice:

 Renice alters the scheduling priority of one or more running processes.
 The following who parameters are interpreted as process ID's, process
 group ID's, or user names.  Renice'ing a process group causes all pro‐
 cesses in the process group to have their scheduling priority altered.
 Renice'ing a user causes all processes owned by the user to have their
 scheduling priority altered.  By default, the processes to be affected
 are specified by their process ID's.

Пріоритети переходять від -20 (найвищий пріоритет) до 20 (найнижчий пріоритет). Щоб змінити пріоритет запущеного процесу, ви можете:

renice -15 $PID

де $PIDє PID процесу, пріоритет якого ви хочете збільшити. Ви можете використовувати, pgrepщоб дізнатися, що це таке. Наприклад:

renice -15 $(pgrep gnome-session)

Іншим варіантом було б встановити "свобідність" системи, яка визначає, коли вона почне міняти місцями. Значення простоти 1 означає, що воно буде змінюватись лише для уникнення помилок пам'яті. Більш високі значення означають, що він почне мінятися, навіть коли фізична пам'ять все ще є. Ви можете встановити це відносно низьким значенням, щоб зробити систему своєю мірою меншою мірою. Додайте цей рядок до /etc/sysctl.conf:

vm.swappiness=1

ВАЖЛИВО: Це не дуже гарна ідея, якщо у вас немає багато оперативної пам’яті, своп - це взагалі гарна річ, вам потрібно буде трохи пограти зі значеннями, щоб знайти правильний баланс для вашої системи.


Як ви заявляєте, це може бути вирішено в просторі ядра, а це означає, що це було б дуже специфічно для Linux. Зміна замінника нічого не змінить, оскільки при використанні всієї оперативної пам’яті система все одно змінюється. І якщо пріоритет процесу нічого не змінить щодо управління пам'яттю, але лише поведінка планувальника процесора та процесорного часу не дуже корисна для прискорення доступу до диска.
FSMaxB

Пріоритет процесора @FSMaxB може допомогти, оскільки він надасть пріоритет DE, він не допоможе, якщо сам DE заміниться, але буде, якщо щось інше - це те, що затримує процесор і, отже, уповільнює роботу машини.
тердон

Коли DE деякий час простоює, на мій досвід, DE завжди змінюється, коли пам’ять закінчується.
FSMaxB

@FSMaxB Так, це має сенс, оскільки ДЕ - це качани пам'яті. Тим не менш, підвищення його пріоритетності може допомогти, принаймні планувальник не стримуватиме його.
тердон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.