Swap не копируется обратно в физическую память

У меня есть вопрос относительно swap и physical memory. Часто я запускаю программу, требующую большой памяти, и в результате я вижу, что некоторые данные копируются из physical memory в swap. Однако, как только программа завершается, и physical memory освобождается, я все еще вижу значительный объем данных на swap, который значительно замедляет работу системы и раздражает!

В чем причина это и как ОС решает, какая часть данных должна перейти на swap? Как долго эти данные должны быть там и как они «освобождаются»?

1
задан 27 March 2012 в 03:45

2 ответа

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

В чем причина этого и как ОС решает, какая часть данных должна идти на свопинг?

В то время как в вашем тяжелом процессе памяти управление памятью заменяло страницы, чтобы освободить место для вашего процесса. Обычно это делается на основе Least Recent Used. (Программы часто имеют страницы памяти, которые были необходимы в какой-то момент, но больше не существуют.)

Если у вас несколько устройств, вы можете разбить отображение страницы, удалив этот раздел подкачки. Это приведет к тому, что страницы будут занесены в память (хотя их можно поменять довольно быстро).

В чем причина этого и как ОС решает, какая часть данных должна идти на свопинг?

Как долго эти данные должны быть там и как они «освобождаются»?

После сопоставления для свопинга страницы могут оставаться сопоставленными для свопинга, пока процесс не будет заканчивается, после чего страницы «освобождаются». Страницы, сопоставленные с местом подкачки, могут быть расположены в памяти. Диспетчер страниц может поддерживать сопоставление, чтобы предотвратить необходимость переназначения страницы, если ее нужно снова поменять.

Ожидается некоторое замедление при переходе страниц в память.

Использование sar или munin для отслеживания активности входа / выхода страницы должно позволить вам увидеть, сколько времени потребуется на выполнение отображать активные страницы в памяти. Как только они были заменены обратно в память, они должны оставаться там, пока память доступна.

Отдельный раздел подкачки, расположенный рядом с активно доступными разделами. Это уменьшает задержку в голове при необходимости замены. Использование файла подкачки, расположенного на наиболее часто используемом разделе. Это может уменьшить задержку в голове. Специальный диск для раздела подкачки. Применяется ряд улучшений производительности ввода-вывода. Использование SSD для места подкачки. I / O намного быстрее, чем диск. (Быстрый USB-накопитель также может работать лучше, чем ваш диск, но сначала измерьте скорости ввода-вывода.)

Некоторые вещи, которые могут увеличить производительность подкачки.

2
ответ дан 25 May 2018 в 13:12

Я упрощаю вещи, но есть только два случая, когда выгружаемая память в swap копируется обратно в физическую RAM:

Там есть ошибка страницы (приложение пытается вызвать память, отображаемую для обмена). Вы используете sudo swapoff -a (и др.), Чтобы отключиться.

Все остальное имеет тенденцию быть пустой тратой времени. Память в свопе имеет тенденцию быть относительно неиспользованным, с низким уровнем трафика. Алгоритм Linux использует вещи, собирающиеся в swap, - это LRU (последнее время используется). Если вы столкнулись с ситуацией, когда вы пытаетесь разобраться с дисками и приложения останавливаются на ошибках страницы, проблема проста в исправлении: вам нужно больше оперативной памяти.

Память, просто сидящая на свопе, не замедлит работу компьютер. Это имеет только тот эффект, когда что-то должно застревать в swap и использоваться.

Примечание. Как я уже сказал, я упрощаю ситуацию здесь. Управление памятью - это абсолютно огромная тема, и мои несколько абзацев не выполняют никаких алгоритмов, их дизайнеров или их исполнителей. На протяжении многих лет у меня была своя доля битв с Linux-памятью и управлением кешем, но кое-что я узнал до сих пор: разработчики ядра знают больше, чем я. Они поставили вещи так, как они есть по причине.

3
ответ дан 25 May 2018 в 13:12
  • 1
    +1 Ядровые разработчики знают больше, чем нас, простых смертных. Это напоминает мне комментарии Эндрю Мортона много лет назад о том, как люди настраивают параметры подкачки: «Я собираюсь вставлять свои пальцы в уши и петь« ла-ла-ла », пока люди не скажут мне:« Я поставил обманчивость на ноль и не сделал что я хотел этого сделать ». " Вы должны это уважать: kerneltrap.org/node/3000 – Richard Holloway 27 March 2012 в 16:24

Другие вопросы по тегам:

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