Общая архитектура дисковой подсистемы в VMware Cloud Director
- Cloud Director управляет ресурсами, включая хранилище, через vSphere.
- Каждый виртуальный диск привязан к виртуальной машине через виртуальный контроллер (SAS, PVSCSI).
- В Cloud Director задаются Storage Policy, благодаря которым производится ограничение производительности отдельных дисков по IOPS (количество операций ввода-вывода в секунду)
Работа с гостевыми ОС
Windows:
- ОС «видит» виртуальный диск как обычный физический.
- Работает с ним через драйверы (такие как pvscsi).
- Производительность в том числе зависит от выбора SCSI-контроллера:
- LSI Logic SAS — совместимость.
- PVSCSI (Paravirtual) — высокая производительность, особенно под нагрузкой.
Linux:
- Диск отображается в каталоге устройств /dev/
- Ядро Linux работает с виртуальными драйверами (например, pvscsi, vmw_pvscsi).
- Используется стандартная подсистема блочного устройства + планировщики ввода-вывода.
- Современные дистрибутивы используют системы управления udev и blk-mq для оптимизации дисковых операций.
Поведение операционной системы при записи данных
ОС (Windows, Linux) по умолчанию использует файловый кэш в оперативной памяти. Это означает, что:
- Когда вы скачиваете или сохраняете файл, он сначала попадает в оперативную память (RAM). На данном этапе скорость записи будет высокой;
- Запись при, этом может считаться завершённой на уровне приложения, несмотря на то, что фактически данные ещё не записаны на диск.
- Далее, по завершении скачивания, сохранения или при переполнении RAM, система начинает запись данных непосредственно на диск, где задействованы лимиты заданные Storage Policy. Скорость при этом может резко снизиться — это нормальное поведение.
Т.е. изначальный прирост скорости контролируется на уровне ОС, а не хранилища.
Это объясняет, почему скорость скачивания или записи файла может сначала быть высокой, а затем проседать.
Что влияет на производительность дисков
- Storage Policy:
- Ограничение политики хранилища по IOPS (например, 3000 IOPS). Это ограничение применяется на уровень хранения, а не на ОС: даже если ОС может отправлять больше запросов, они будут ограничены на уровне гипервизора или datastore.
- Тип контроллера:
- PVSCSI производительнее LSI SAS.
- сетевой адаптер VMXNET3 - не влияет на сами диски, но может быть связан с другими нагрузками.
- Нагрузка внутри ВМ (гостевая ОС):
- Высокая нагрузка на CPU или активные фоновые процессы могут замедлять работу с диском.
- Большое число vCPU может приводить к возникновению ожидания исполнения команды (Co-stop) — это может «тормозить» весь I/O, включая диск. Признаки: кратковременные фризы в работе системы.
- Нехватка RAM - система будет чаще обращаться к диску напрямую, что может вызвать дополнительную нагрузку и снижение скорости выполнения операций чтения и записи.
- Внутри ОС могут работать антивирусы, индексаторы, службы логирования, cron-задачи, что может создавать множество мелких операций чтения/записи, при этом особой нагрузки на систему видно не будет.
- Заполнение системного диска:
- При близком к 100% заполнении системного диска ОС может дольше искать свободные блоки, фрагментировать файлы, перераспределять блоки.
- Снапшоты:
- При наличии активного снапшота, система может вести операции записи не напрямую, а в дельта-файл, что увеличивает задержки и снижает производительность. Это особенно критично при длительном использовании снапшотов.
Стоит отдельно упомянуть такую обширную тему как размер блока данных.
Размер блока — это минимальная единица данных, с которой работает ваша операционная система при чтении или записи на диск. Чем больше размер блока, тем больше данных передаётся за одну операцию, но и тем выше риски задержек при нестабильной нагрузке.
IOPS (операции ввода-вывода в секунду) — это основной параметр, ограничивающий производительность вашего виртуального диска. Каждая операция чтения или записи (независимо от размера данных) учитывается как одна IOPS.
Например:
- 1000 IOPS × 4 KB = ~4 MB/с
- 1000 IOPS × 64 KB = ~64 MB/с
Следует отметить, что увеличение размера блока в ОС не увеличивает лимит IOPS.
Размер блока влияет на то, сколько данных передаётся за одну операцию. Чем больше размер блока, тем выше пропускная способность, но только до тех пор, пока вы не упираетесь в задержки или фрагментацию
При большом блоке система должна сначала найти и зарезервировать большой непрерывный участок пространства на диске. Если таких участков становится мало (например, диск почти заполнен или сильно фрагментирован), появляются Large Seeks — операции с переходами между удалёнными областями виртуального диска, что приводит к задержкам дисковой подсистемы.
Блоки, которые пытается записать ОС, находятся слишком далеко друг от друга логически. Система тратит больше времени на перемещения и внутреннюю организацию записи, и вы видите рост задержки (latency), несмотря на большой объём данных в секунду.
Чтобы избежать просадок скорости и задержек, размер блока стоит подбирать с учётом доступных IOPS и характера нагрузки, а так же самой системы и приложений, а не ориентироваться только на максимальный объём передачи данных.