Итак, прежде всего, позвольте мне сказать, что я не оператор, а разработчик. Так что я собираюсь в немного неизвестной земли здесь, поэтому, пожалуйста, потерпите меня.
Я хотел бы использовать виртуальную машину Azure для извлечения XML-файла объемом 50 ГБ из zip-файла объемом 1,9 ГБ. Поэтому я проверял, какой размер экземпляра в Azure следует использовать, чтобы получить хорошую производительность, не платя за то, что мне нужно.
Тем не менее, производительность дисков виртуальных машин Azure не была удивительной, и я хотел бы знать, что я делаю что-то не так или мои результаты соответствуют ожиданиям.
Прежде всего, с чем я тестировал? У меня есть пользовательское консольное приложение .NET, которое принимает только zip-файл в качестве аргумента и сразу начинает извлекать zip-файл в тот же каталог, в котором находится zip-файл. Во время извлечения приложение вычисляет, сколько мегабайт приложение записывает в целевой файл в секунду и выводит его.
На моей локальной машине разработки я получаю довольно хорошую производительность с этим написанным приложением, 160-210 МБ / с. Таким образом, весь процесс извлечения занимает около 8 минут. Характеристики моей локальной машины: Intel Core i7 950, 3 ГГц, 4 ядра (8 логических), 12 ГБ оперативной памяти, Samsung SSD 830 серии, 250 ГБ.
Итак, я начал тестировать экземпляры разных размеров, и вот мои результаты.
- На экземпляре A4 с Windows Server 2012 Datacenter R2 (8 ядер, 14 ГБ ОЗУ) с чередованием RAID-массива из 4 виртуальных дисков с использованием одной учетной записи хранения без кэширования хоста я получил стабильные 30-35 МБ / с, что означает экстракция заняла 24 минуты 48 секунд. Я также попытался включить кэширование на хосте, но это не имело никакого значения.
- На экземпляре D4 с Windows Server 2012 Datacenter (8 ядер, 28 ГБ ОЗУ, 500 ГБ на локальном SSD-диске) я получил действительно хорошую производительность (150+ МБ / с) в течение первых минут, а затем менял производительность с пиками в 200 МБ / с и долины на 9 МБ / с. Средняя производительность была между 70 и 100 МБ / с. Экстракция заняла 9 минут и 40 секунд.
- На экземпляре D3 с Windows Server 2012 Datacenter (4 ядра, 14 ГБ ОЗУ, 250 ГБ локальный SSD-диск) я получил действительно хорошую производительность (150+ МБ / с) в первую минуту, но затем производительность снизилась до 20-40 МБ / с, чтобы процесс экстракции занял 21 минуту 49 секунд.
На экземплярах D2 и D1 производительность диска хуже, чем на D3.
И это действительно удивляет меня. Как может локальный SSD-диск работать так плохо, как на экземплярах D1, D2 и D3? И кто-нибудь знает, почему производительность диска сильно отличается от D1 до D4? Это проблема с памятью? Когда я смотрю на диспетчер задач во время извлечения, использование памяти стремительно растет. Я подозреваю, что это потому, что Windows кэширует записанные данные, но когда ей не хватает памяти, она должна сбросить данные на диск. Когда это происходит, производительность диска снижается. Но этого не происходит на моей локальной машине, так почему такое агрессивное кэширование необходимо на этих виртуальных машинах?
Я знаю, что между моей локальной машиной и виртуальной машиной, размещенной в Azure, есть различия, но действительно ли ожидаемая производительность диска действительно ожидаема?
(Первоначально я разместил свой вопрос на Stackoverflow , так как подозревал, что причиной было мое приложение. Но я не уверен больше)