У меня есть вопрос относительно swap
и physical memory
. Часто я запускаю программу, требующую большой памяти, и в результате я вижу, что некоторые данные копируются из physical memory
в swap
. Однако, как только программа завершается, и physical memory
освобождается, я все еще вижу значительный объем данных на swap
, который значительно замедляет работу системы и раздражает!
В чем причина это и как ОС решает, какая часть данных должна перейти на swap
? Как долго эти данные должны быть там и как они «освобождаются»?
Если вы часто испытываете замедление из-за обмена страницей, вам, скорее всего, потребуется больше памяти. Выключение службы неиспользуемых или низкоприоритетных служб и внесение других корректировок, уменьшающих память, может использоваться как временная остановка.
В чем причина этого и как ОС решает, какая часть данных должна идти на свопинг?В то время как в вашем тяжелом процессе памяти управление памятью заменяло страницы, чтобы освободить место для вашего процесса. Обычно это делается на основе Least Recent Used. (Программы часто имеют страницы памяти, которые были необходимы в какой-то момент, но больше не существуют.)
Если у вас несколько устройств, вы можете разбить отображение страницы, удалив этот раздел подкачки. Это приведет к тому, что страницы будут занесены в память (хотя их можно поменять довольно быстро).
В чем причина этого и как ОС решает, какая часть данных должна идти на свопинг?
Как долго эти данные должны быть там и как они «освобождаются»?
После сопоставления для свопинга страницы могут оставаться сопоставленными для свопинга, пока процесс не будет заканчивается, после чего страницы «освобождаются». Страницы, сопоставленные с местом подкачки, могут быть расположены в памяти. Диспетчер страниц может поддерживать сопоставление, чтобы предотвратить необходимость переназначения страницы, если ее нужно снова поменять.
Ожидается некоторое замедление при переходе страниц в память.
Использование sar или munin для отслеживания активности входа / выхода страницы должно позволить вам увидеть, сколько времени потребуется на выполнение отображать активные страницы в памяти. Как только они были заменены обратно в память, они должны оставаться там, пока память доступна.
Отдельный раздел подкачки, расположенный рядом с активно доступными разделами. Это уменьшает задержку в голове при необходимости замены. Использование файла подкачки, расположенного на наиболее часто используемом разделе. Это может уменьшить задержку в голове. Специальный диск для раздела подкачки. Применяется ряд улучшений производительности ввода-вывода. Использование SSD для места подкачки. I / O намного быстрее, чем диск. (Быстрый USB-накопитель также может работать лучше, чем ваш диск, но сначала измерьте скорости ввода-вывода.)Некоторые вещи, которые могут увеличить производительность подкачки.
Я упрощаю вещи, но есть только два случая, когда выгружаемая память в swap копируется обратно в физическую RAM:
Там есть ошибка страницы (приложение пытается вызвать память, отображаемую для обмена). Вы используете sudo swapoff -a (и др.), Чтобы отключиться.Все остальное имеет тенденцию быть пустой тратой времени. Память в свопе имеет тенденцию быть относительно неиспользованным, с низким уровнем трафика. Алгоритм Linux использует вещи, собирающиеся в swap, - это LRU (последнее время используется). Если вы столкнулись с ситуацией, когда вы пытаетесь разобраться с дисками и приложения останавливаются на ошибках страницы, проблема проста в исправлении: вам нужно больше оперативной памяти.
Память, просто сидящая на свопе, не замедлит работу компьютер. Это имеет только тот эффект, когда что-то должно застревать в swap и использоваться.
Примечание. Как я уже сказал, я упрощаю ситуацию здесь. Управление памятью - это абсолютно огромная тема, и мои несколько абзацев не выполняют никаких алгоритмов, их дизайнеров или их исполнителей. На протяжении многих лет у меня была своя доля битв с Linux-памятью и управлением кешем, но кое-что я узнал до сих пор: разработчики ядра знают больше, чем я. Они поставили вещи так, как они есть по причине.