Археологические раскопки ядра vista-longhorn

         

Менеджер файла подкачки


Виста существенно пересмотрела алгоритмы работы с файлом подкачки, значительно сократив накладные расходы на его поддержку, но... имея 1 Гбайт памяти на борту, в XP файл подкачки можно вообще отключить, поскольку имеющийся физической памяти достаточно даже для весьма "прожорливых" приложений. Виста — другое дело, очень сильно напоминающее анекдот про жену, обещающую решить проблемы, которые возникнут в связи с ее появлением. Платформа .NET потребляет память в таких количествах, что без подкачки уже никак не обойтись и чтобы разрыв в производительности между виста и XP не был столь драматическим, разработчикам пришлось пойти на многочисленные ухищрения, едва не оторвав себе хвост и не разорвав задницу напополам, но далеко не все "улучшения" дают положительный результат. Оптимизация — дело тонкое…

Начнем с того, что страницы, ранее объединенные в связанный список (linked list), теперь повешены на сбалансированные AVL-деревья, дающие выигрыш только при размерах файла подкачки в несколько десятков гигабайт. А на хрена нам столько памяти?! Ну да, серверам очень даже и не на хрена, для них это вполне нормально, но мы-то говорим в первую очередь о рабочих станциях! (Сервер можно и на базе Open BSD слепить у нее и с безопасностью и с производительностью всяко получше будет, чем у виста/server longhorn).

А вот сокращение фрагментации файла подкачки (как внешней — на диске, так и внутренней — соседние виртуальные страницы выгружаются рядом) можно только приветствовать, однако… сразу же возникает вопрос — почему же этого не сделали ранее? Да потому, что уменьшение внутренней фрагментации снижает эффективность использования дискового пространства и оправдывает себя только на подкачках очень большого размера. Все очень просто! Выгружая страницу на диск, система вынуждена зарезервировать в файле подкачке место для ее "соседей", которые, возможно, никогда не будут выгружены! Впрочем, при современных объемах жестких дисков это становится уже не столь критично, производительность — важнее.


Радует и тот факт, что система наконец-то перестала выгружать модифицированные страницы, содержимое которых более не используется. Например, при выделении нового блока памяти он автоматически забивается нулями (в противном случае, один процесс мог бы без труда похитить данные всех остальных), но выгружать такую страницу памяти на диск ненужно, поскольку в любой момент времени забивку нулями можно выполнить повторно! Однако, исследование виртуальной памяти и файла подкачки показывает, что "лишние" вытеснения страниц происходят сравнительно редко и выигрыш в производительности на общем фоне практически неощутим, тем не менее "десяток старушек — уже рубль" (с) Раскольников.

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


Содержание раздела