15

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

Это своего рода раздражающее поведение, особенно в системах с низким быстродействием.

Есть ли способ придать некоторым приложениям / заданиям, таким как среда рабочего стола и т.д., Более высокий приоритет, чтобы оставаться в оперативной памяти, чем другим приложениям, чтобы приложение, фактически загружающее всю память, было заменено до среды рабочего стола и т.д.?

РЕДАКТИРОВАТЬ: я говорю о случае, когда используется вся ОЗУ, поэтому он всегда начнет подкачку, если он не отключен (я не хочу, чтобы процессы прерывались случайным образом). У меня была эта проблема не только в средах с низкой оперативной памятью, но и с 8 ГБ оперативной памяти на моем настольном компьютере, частично из-за множества виртуальных машин, частично из-за утечки памяти. ZRAM также не является решением, поскольку он только задерживает проблему. Единственное решение, которое я могу придумать для этой проблемы - это некоторая утилита пользовательского пространства или API ядра, которая позволяет вообще поменять местами определенные задания или, по крайней мере, сделать это очень маловероятным. Кто-нибудь знает другое решение или знает что-либо о таком инструменте или API, которые существуют или планируются?

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

1 ответ1

1

Насколько я знаю, это не проблема, специфичная для Linux, а то, как работает SWAP (или виртуальная память). Если операционная система должна искать данные на жестком диске, а не в оперативной памяти, она будет замедляться. Ничего не поделаешь, доступ к диску намного медленнее, чем доступ к ОЗУ.

Вы не сможете установить приоритет обмена процессами, который определяется ядром, которое будет пытаться максимизировать эффективность, вы не сможете сделать это лучше. Что вы можете сделать, это установить приоритет процессора для процесса, и это может помочь. Ваша система отключена из-за времени, которое требуется для чтения из / в SWAP, это означает, что ЦП должен будет ждать получения соответствующих данных процессом, запрашивающим их, прежде чем он сможет продолжить. Если вы установите для своего DE более высокий приоритет для доступа к ЦП, это должно подтолкнуть его операции к вершине и немного ускорить процесс.

Итак, приоритет процессора устанавливается командами 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

ВНИМАНИЕ: Это не очень хорошая идея, если у вас недостаточно ОЗУ, в общем, подкачка - это хорошо, вам нужно немного поиграться со значениями, чтобы найти правильный баланс для вашей системы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .