Как препятствовать тому, чтобы определенная программа подкачала?

Действительно ли возможно предотвратить определенную программу (т.е. rhythmbox и его зависимости) от когда-либо свопинга до диска?

Я спрашиваю, потому что у меня есть проблема, когда аудиоплеер икает каждый раз, когда пожиратели ресурсов Хрома слишком много памяти. Существует ли способ работать вокруг этого? Это не проблема в Windows больше поэтому, по-видимому, существует путь.

23
задан 09.02.2011, 04:36

3 ответа

Я думаю, что проблема отклонения не обязательно вызывается путем свопинга. Если программа играет что-то, Linux должен заметить это и не подкачать ее. Программы, которые не делают многого, являются первыми, которые подкачиваются. Можно проверить, становится ли программа действительно подкачанной путем взгляда на RSS/RES поле от PS или вершины. RSS размер резидентного набора, неподкачанная физическая память, которую задача использует (в килобайтах).

Я думаю, что Ваша проблема по всей вероятности вызывается неподходящим ЦП и планированием ввода-вывода и небольшим количеством неэффективности Rhythmbox, который делает это чувствительным к высоким системным нагрузкам. Приоритет ЦП может быть изменен с хорошими командами и renice. Приоритет ввода-вывода может быть изменен с ионизировать командой. Только суперпользователь может использовать высокие приоритеты. Необходимо также знать, что парни ядра Linux пытаются улучшить скорость отклика настольных систем с различными патчами низкой задержки, таким образом, Вы могли бы рассмотреть использование их. Один из них является ~200 патчами строк, записанными Mike Galbraith, который произвел впечатление даже на Linus. Альтернатива этому патчу является приемом cgroups Lennart Poettering, который я думаю, будет значение по умолчанию в Fedora 15.

Так или иначе без тех патчей существует две опции: запустите программу с высоким приоритетом или измените ее впоследствии. Для первой опции Вы могли использовать сценарий обертки вокруг Rhythmbox:

#!/bin/sh
# Run Rhytmbox with high CPU and I/O priorities
nice -n -10 ionice -c 1 -n 1 su -l -c rhythmbox alexei

Необходимо будет выполнить его как корень. Если Вы не хотите входить в систему как корень только для запуска этого, можно использовать также su или sudo.

Что касается изменения приоритета впоследствии, если Вы слишком ленивы для входа в систему как корень для изменения его, Вы могли бы попытаться использовать задание крона, которое работает каждые 5 минут и устанавливает приоритет rhythmbox процесс, но я не рекомендовал бы делать это:

#!/bin/sh
renice -n -10 -p `pidof rhythmbox`
ionice -c 1 -n 1 -p `pidof rhythmbox`
10
ответ дан 07.12.2019, 09:53

Короткий ответ: Вы не можете, и не был должен.

Давным-давно исполняемые файлы соблюдали липкий бит +t который сказал бы ядру не подкачивать, но сегодня оно проигнорировано.

Если ядро решает, что должно подкачать, оно уверенный имеет допустимую причину. Linux очень агрессивен на использовании памяти, потому что RAM, которая неактивна, является потраченным впустую ресурсом.

Если Вы действительно не хотите подкачивать, получать больше RAM, или просто # swapoff -a (не рекомендуемый, может повернуть Вашу систему, неприменимую, если у Вас уже есть проблемы).

Shouldn't идет, когда Вы разрабатываете некоторое приложение и не хотите, чтобы оно подкачало вообще. Смотрите на это сообщение на stackoverflow.

5
ответ дан 07.12.2019, 09:53

Этому, кажется, уже ответили здесь:

https://stackoverflow.com/questions/578137/can-i-tell-linux-not-to-swap-out-a-particular-processes-memory

Хотя согласие состоит в том, что Вы, вероятно, не были должны:/

4
ответ дан 07.12.2019, 09:53

Теги

Похожие вопросы