Все дистрибутивы 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 с точки зрения пространства пользователя, если я правильно понимаю.
cgroup_enable=memory swapaccount=1
в командной строке ядра; обратите внимание, что это приводит к незначительным потерям производительности). Пример реализации: ulatencyd .Ответы:
Насколько я знаю, это не проблема, специфичная для Linux, а то, как работает SWAP (или виртуальная память). Если операционная система должна искать данные на жестком диске, а не в оперативной памяти, она будет замедляться. С этим ничего не поделаешь, доступ к диску гораздо медленнее, чем доступ к ОЗУ.
Вы не сможете установить приоритет обмена процессами, который определяется ядром, которое будет пытаться максимизировать эффективность, вы не сможете сделать это лучше. Что вы можете сделать, это установить приоритет процессора процесса, и это может помочь. Ваша система отключена из-за времени, которое требуется для чтения из / в SWAP, это означает, что ЦП должен будет ждать получения соответствующих данных процессом, запрашивающим их, прежде чем он сможет продолжить работу. Если вы установите для своего DE более высокий приоритет для доступа к ЦП, это должно подтолкнуть его операции к вершине и немного ускорить процесс.
Таким образом, приоритет процессора задается с помощью
nice
иrenice
команд:Приоритеты варьируются от -20 (самый высокий приоритет) до 20 (самый низкий приоритет). Чтобы изменить приоритет запущенного процесса, вы можете сделать:
где
$PID
является PID процесса, приоритет которого вы хотите увеличить. Вы можете использовать,pgrep
чтобы узнать, что это такое. Например:Другой вариант - установить « перестановку» системы, которая определяет, когда она начнет перестановку. Значение свопинга 1 означает, что оно будет меняться только во избежание ошибок нехватки памяти. Более высокие значения означают, что он начнет меняться, даже если еще есть доступная физическая память. Вы можете установить это относительно низкое значение, чтобы сделать вашу систему подкачки как можно меньше. Добавьте эту строку к
/etc/sysctl.conf
:ВНИМАНИЕ: Это не очень хорошая идея, если у вас недостаточно ОЗУ, в общем случае swap - это хорошо, вам нужно немного поиграться со значениями, чтобы найти правильный баланс для вашей системы.
источник