суббота, 1 мая 2010 г.

VM disk defragmentation

К вопросу о дефрагментации дисков виртуальных машин - Windows Guest Defragmentation, Take Two.
Суть:
1) была создана ВМ с диском в 50 ГБ, 29 из которых занято.
2) Данные на этом диске были искуственно фрагментированы.
3) ВМ была склонирована, клон был подвергнт дефрагментации.
4) Осуществлено сравнение двух полученных копий. В качестве операции сравнения использовалась установка SQL Server 2008. Отслеживалось время процесса и статистика работы дисковой подсистемы средствами гипервизора (vscsiStats).

Количество операций ввода вывода разного размера:


После дефрагментации значительно увеличилось число операций ввода вывода, осуществляемых последовательно. Удивительно ;-). На дефрагментированном диске последовательно осуществлялось порядка 30% операций IO. У фрагментированного - порядка 15%.

Улучшилась ситуация с задержками. Основная информация тут - почти не осталось операций с задержками свыше 30 миллисекунд. В случае фрагментированного диска число таких операции составляло до 15%.


Вывод: дефрагментация довольно ощутимо улучшила общее время выполнения работы, среднее значение latency улучшилось на порядок (!), с 58 до 3.5 мс. Основной вклад в улучшение внесла практически полная пропажа операций, выполняемых более 30 мс.

Сводная статистика:


Некоторые оговорки:
  • Для тонких дисков, ВМ со снапшотами и ВМ с Linked Clones  операция дефрагментации приведет к значительному росту потребляемого места. Однако для тонких дисков, возможно, достаточно будет всего лишь Storage VMotion для уменьшения к ожидаемому размеру.
  • Сложно гарантировать положительный эффект в реальности - обычно один LUN разделяют много ВМ. Совокупные обращения, пусть последовательные для каждой из них, фрагментированы для LUN целиком.
  • Для приложений, оперирующих малыми блоками (обычно это сервера БД), эффект вряд ли будет значительным.
Если для кого-то данная тема представляет прикладной интерес, рекомендую глянуть комментарии к исходному посту.

5 комментариев:

  1. > В качестве операции сравнения использовалась установка SQL Server 2008.

    Сомнительная по полезности задача для оценки _настоящей_ рабочей нагрузки.

    > После дефрагментации значительно увеличилось число операций ввода вывода, осуществляемых последовательно.

    Вопрос насколько это на самом деле так для, например OLTP-баз, где даже без виртуальных машин (читай дополнительно рандомизирующего доступ фактора) и так принят за типовой паттерн 100% random 80% read.
    Или после дефрагментации random read из задачи к базе станет sequental? ;)

    В общем опять "замах на рубль - удар ни о чем" :(

    ОтветитьУдалить
  2. все так, и прямо такие оговорки в конце и приводятся.

    ОтветитьУдалить
  3. Еще одна оговорка - при свободном нефрагментированном datastore несомненно будет наблюдаться эффект от дефрагментации NTFS.

    Но если ВМ создаются, растут, удаляются, мигрируют и заполнение datastore 80-90%? Т.е. если VMFS фрагментирована?

    ОтветитьУдалить
  4. пропали все картинки в посте..

    ОтветитьУдалить
  5. в оригинальном посте остались.

    ОтветитьУдалить