Объективный анализ характера ввода-вывода в Windows 7Источник: isazonovwordpress Илья Сазонов
Сейчас не редкость виртуальные машины Windows 7. При разворачивании их на системах виртуализации образы виртуальных машин размещаются на сетевом хранилище. Чем больше виртуальных машин, тем выше нагрузка на систему хранения данных, а ее ресурсы ограничены. Более того чем выше требования к пропускной способности хранилища, тем оно дороже. Поэтому критически важно снижать нагрузку на систему хранения со стороны виртуальных машин. Все это верно и для больших систем с сотнями виртуальных машин, и для совсем маленьких (даже персональных компьютеров). Впрочем это верно и для обычных физических, не виртуальных, конфигураций. Но прежде чем что-то настраивать и тем более оптимизировать, надо понимать суть происходящих процессов при операциях ввода-вывода. Сейчас я хочу показать лишь один момент среди целого каскада факторов, которые влияют на производительность системы ввода-вывода. Вопрос, ответ на который я хотел получить: какой размер блока ввода-вывода (IO block size) в Windows 7? Почему возник такой вопрос? Гостевая операционная система это источник всех операций ввода-вывода (если ее выключить, то останется только служебный трафик системы виртуализации, который должен быть в этой ситуации около нуля). Поэтому характер операций ввода-вывода гостевых операционных систем будет определять характер нагрузки на систему хранения. Для получения объективных данных я провел простой эксперимент по копированию большого файла (2 Гб) между локальным виртуальным диском в виртаульной машине с Windows 7 и папкой на сетевой шаре. Первый замер сделан при копировании на виртуальную машину - это операция записи на виртуальный диск. Второй замер был сделан для обратной операции: файл копировался с виртуальной машины на сетевую шару - операция чтения с виртуального диска. Результаты приведены ниже. Диаграмма 1. Windows 7 запись большого файла (копирование с сетевой шары на локальный диск) Диаграмма 2. Windows 7 чтение большого файла (копирование с локального диска на сетевую шару)
На обоих графиках видно, что размер блока чаще всего попадает в хорошо известные нам числа - 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536,… и 1048576 (1 Мб). Некоторые размеры блоков, как видно на графиках, очень популярные. Факт первый: операции чтения и операции записи идентичны в мысле ответа на наш вопрос - вид графиков одинаковый. Факт второй: Максимальный размер блока операции ввода-вывода в Windows 7 равен 1 Мб. Факт третий. Windows 7 не использует один размер блока для операций ввода-вывода
Давайте посмотрим что будет в случае копирования (возьмем только запись - при чтении, как мы поняли, будет аналогичная картина) большого числа маленьких файлов. Копируем рабочую папку, в которой находятся несколько тысяч документов MS Office типичного размера плюс небольшое количество каких-то более крупных файлов.
Диаграмма 3. Windows 7 запись большого количества маленьких файлов (копирование с сетевой шары на локальный диск) Что мы видим в этом случае? Факт первый. Гистограмма сосредоточена в области маленьких размеров блока ввода-вывода. Факт второй. Пики приходятся на размеры 4096 (4Кб), 16384, 65536 (64Кб), 262144 и 1048576 (1 Мб). Причем размер 4096 явный лидер. Факт третий. Обратите внимание на пик 4Кб полученный при копировании маленьких файлов. Ничего не напоминает? Смотрим KB140365: обычный размер кластера NTFS 4Кб! Виртуальный диск, на котором проводился эксперимент, имеет именно такой размер кластера. Теперь на основе полученных фактов можно сделать некоторые выводы. Вывод первый: Ядро Windows 7 использует для конкретной операции ввода-вывода максимально возможный размер блока. Получается, что Windows 7 передает драйверу физической системы ввода-вывода информацию максимально возможного размера и выравнивает ее всегда на удобную границу, например, в 4Кб, 16Кб, 64Кб, 1Мб. И теперь только от драйвера зависит насколько эффективно он выполнит задание. Вывод второй: Ядро Windows 7 выполняет операции ввода-вывода максимально эффективно. Заключение: полученные объективные данные по характеру ввода-вывода в Windows 7 можно использовать для объективного анализа системы ввода-вывода в физической системе (локальный ввод-вывод), в системе виртуализации (виртуализация дисков в виртуальной машине) или сетевой системе ввода-вывода (SAN). |