Можно ли предотвратить какую-либо конкретную программу (т. Е. Rhythmbox и ее зависимости) от загрузки на диск?
Я спрашиваю, потому что у меня есть проблема, когда музыкальный проигрыватель икает, когда Chromium перегружает память. Есть ли способ обойти это? Это больше не проблема в Windows, так что, вероятно, есть способ.
ps
илиtop
проверяли, действительно ли rhytmbox поменялся местами, проверив полеRSS
/RES
? Я думаю, что ваша проблема в основном вызвана неправильным планированием. Вы должны попытатьсяrenice
выполнить процесс rhytmbox или изменить некоторые его настройки, например, размер аудио-буфера.Ответы:
Я думаю, что проблема сбоя не обязательно вызвана обменом. Если программа что-то играет, Linux должен это заметить, а не менять местами. Программы, которые мало что делают - это первые, которые меняются местами. Вы можете проверить, действительно ли программа поменялась местами, посмотрев на поле
RSS
/RES
из ps или top .RSS
это размер резидентного набора, не поменяная местами физическая память, используемая задачей (в килобайтах).Я думаю, что ваша проблема, скорее всего, вызвана неправильным планированием процессора и ввода-вывода и небольшой неэффективностью Rhythmbox, что делает его чувствительным к высоким системным нагрузкам. Приоритет процессора можно изменить с помощью команд nice и renice . Приоритет ввода / вывода можно изменить с помощью команды ionice . Только суперпользователь может использовать высокие приоритеты. Вы также должны знать, что ребята из ядра Linux пытаются улучшить быстродействие настольных систем с помощью различных патчей с низкой задержкой, поэтому вы можете рассмотреть возможность их использования. Одним из них является патч ~ 200 строк, написанный Майком Гэлбрейтом, который поразил даже Линуса. Альтернативой этому патчу является трюк cgroups Леннарта Поэттеринга который я думаю будет по умолчанию в Fedora 15.
В любом случае, без этих патчей есть два варианта: запустить программу с высоким приоритетом или изменить ее впоследствии. Для первого варианта вы можете использовать скрипт-обертку вокруг Rhythmbox:
Вам нужно будет запустить его как root. Если вы не хотите входить в систему как root, просто чтобы начать это, вы можете использовать либо
su
илиsudo
.Что касается последующего изменения приоритета, если вам лень входить в систему как root, чтобы изменить его, вы можете попробовать использовать задание cron, которое запускается каждые 5 минут и устанавливает приоритет
rhythmbox
процесса, но я бы не рекомендовал делать это:источник
Краткий ответ: Вы не можете и не должны.
Давным-давно исполняемые файлы использовали залипший бит,
+t
который говорил бы ядру не обмениваться, но сегодня он игнорируется.Если ядро решит, что оно должно поменяться местами, у него есть веская причина. Linux очень агрессивно использует память, потому что ОЗУ, которое не используется, является потраченным впустую ресурсом.
Если вы действительно не хотите менять местами, получать больше оперативной памяти или просто
# swapoff -a
(не рекомендуется, может сделать вашу систему непригодной для использования, если у вас уже есть проблемы).Shouldn't
происходит, когда вы разрабатываете какое-то приложение и вообще не хотите, чтобы оно менялось. Посмотрите на этот пост на stackoverflow .источник
Здесь, кажется, уже был дан ответ:
/programming/578137/can-i-tell-linux-not-to-swap-out-a-particular-processes-memory
Хотя согласие таково, что вы, вероятно, не должны: /
источник
Есть несколько способов сделать это. Вы можете попытаться попробовать «говорит» Linux работать меньше с помощью swap (как правило):
От: https://www.kernel.org/doc/Documentation/sysctl/vm.txt
Другой вариант - использовать менеджер ядра cgroups, это зависит от конкретного процесса, но у вас будет некоторая «работа»: Ответ здесь: /unix/10214/per-process-swapiness-for -linux # 10227
источник
Вы можете использовать
mlockall()
системный вызов. mlockall () заставляет процесс памяти быть резидентным (= без подкачки, без перегрузки и т. д.). AFAIK, нет команды оболочки, чтобы сделать это, но ее легко создать. Это будет выглядеть так:Обратите внимание, вам нужно быть пользователем root, чтобы звонить
mlockall()
.Однако, как сказано в другом ответе, я не думаю, что это действительно то, что вы хотите.
источник