повысить отзывчивость рабочего стола на linux при замене

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 с точки зрения пространства пользователя, если я правильно понимаю.

FSMaxB
источник
3
cgroups, если у вас включена память cgroup и включен учет подкачки ( cgroup_enable=memory swapaccount=1в командной строке ядра; обратите внимание, что это приводит к незначительным потерям производительности). Пример реализации: ulatencyd .
Дероберт
@derobert Отлично, похоже, это именно то, что я искал. Я начну экспериментировать с этим, как только у меня будет время.
FSMaxB
Отлично, у ulatencyd даже есть пакет AUR, думаю, мне повезло, что я пользователь Archlinux.
FSMaxB
Есть даже статья в вики wiki.archlinux.org/index.php/Ulatencyd
FSMaxB
Если бы я мог проголосовать за этот вопрос больше, я бы! Неужели нет прямого способа сказать GUI и нескольким ключевым программам оставаться в оперативной памяти, чтобы она оставалась отзывчивой? Я имею в виду, что в худшем случае дает пользователям Linux эту опцию? Компьютер вылетает? КТО НЕ СДЕЛАЛ ЭТОГО ДО? :) Я имею в виду, что иногда я случайно запускаю слишком много виртуальных машин, потому что я не могу правильно добавить (номера ОЗУ), а затем НАВСЕГДА требуется, чтобы вернуть все под контроль. Указав GUI и, возможно, терминалу остаться в оперативной памяти, это исправит ?! Пожалуйста, кто-нибудь ответит на это!
Деймон

Ответы:

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

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

terdon
источник
Как вы утверждаете, это может быть решено в пространстве ядра, что означает, что это будет очень хорошо для Linux. Изменение подкачки ничего не изменит, потому что при использовании всей оперативной памяти система все равно переставляется. Кроме того, приоритет процесса не изменит ничего в его управлении памятью, а только поведение планировщика и времени процессора не очень помогает ускорить доступ к диску.
FSMaxB
@FSMaxB Приоритет ЦП может помочь, так как он приоритизирует DE, он не поможет, если само DE поменяется местами, но будет, если что-то еще удерживает ЦП и, следовательно, замедляет работу машины.
Тердон
Когда DE некоторое время простаивает, по моему опыту, DE всегда меняются местами, когда заканчивается память.
FSMaxB
@FSMaxB да, это имеет смысл, так как DE - это память. Тем не менее, увеличение приоритета может помочь, по крайней мере, планировщик не будет сдерживать его.
Тердон