Управление виртуальной памятью в LinuxУправление виртуальной памятью в Linux
Рассмотренный алгоритм применяется в большинстве современных систем управления памятью, однако часто он незначительно изменен. Здесь будет обсуждаться ядро Linux 2.2, поскольку на время написания этой книги ядро 2.4 все еще подвергалось существенным исправлениям в области подсистемы виртуальной памяти. Ядро Linux реализует другой набор параметров ядра, поэтому настройка производительности памяти в Linux слегка отличается.
Когда в системе Linux размер свободного списка опускается ниже значения f reepages. high, система начинает неспешно откачивать страницы. Когда доступная память падает ниже значения freepages. low, пейджинг становится интенсивным. А если размер свободного списка опускается ниже freepages.min, то только ядро может назначать память. Настраиваемые параметры f reepages находятся в файле /ргос/ sys/vm/ireepages (формат f reepages. min f reepages. low f reepages. high).
В Linux демон страниц называется kswapd. Он очищает столько страниц, сколько необходимо для возврата размера системного свободного списка на отметку выше f reepage. high. Работой kswapd управляют три параметра: tries_base, tries_min и swap_cluster. В таком порядке они расположены в файле /ргос/'sys/vm/kswapd. Самый важный параметр -это swap_cluster. Он задает количество страниц, которое kswapd переписывает за раз. Такое значение должно быть достаточно большим, чтобы kswapd производил ввод-вывод большими участками, но в то же время и достаточно маленьким, чтобы не перегружать очередь запросов дискового ввода-вывода. Если возникает ситуация с нехваткой памяти и (Так называемый COW-сбой; не путать с жвачным животным, падающим в пропасть («cow» - корова. - Примеч. перев.).) интенсивным пейджингом, то следует поэкспериментировать с увеличением этого значения, чтобы добиться большей пропускной способности страничного пространства.
Когда в Linux происходит страничная ошибка, то для того чтобы избежать множественных коротких обращений к диску, считывается сразу несколько страниц. Точное количество страниц, которые помещаются в память, равно 2П, где п - значение параметра page-cluster (единственное значение в файле настройки /proc/sys/vm/page-cluster). Устанавливать это значение выше 5 нецелесообразно.
Есть два важных аспекта, касающихся жизненного цикла страниц. Первый - это метод, который применяет сканер страниц, и параметры, определяющие его работу. С помощью управления пейджингом сканер страниц управляет размером свободного списка. Воздействие пейджинга на производительность может быть огромным. Второй аспект - это способ, с помощью которого назначаются и высвобождаются страницы. Легкие страничные ошибки происходят, когда процесс запрашивает страницу памяти. Значительные страничные ошибки случаются, когда запрашиваемая страница не содержит тех данных, которые ожидает процесс. |