Не могу понять, почему скорость записи на 10xHDD SAS, встроенном в RAID5, слишком низкая. Кэш чтения: включен. Кэш записи: отключен (на сервере нет батареи). Размер полосы: 512 КБ.
-----------------------------------------------------------------------
CrystalDiskMark 3.0.1 x64 (C) 2007-2010 hiyohiyo
Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]
Sequential Read : 371.345 MB/s
Sequential Write : 22.066 MB/s
Random Read 512KB : 1710.567 MB/s
Random Write 512KB : 18.550 MB/s
Random Read 4KB (QD=1) : 78.245 MB/s [ 19102.9 IOPS]
Random Write 4KB (QD=1) : 0.654 MB/s [ 159.6 IOPS]
Random Read 4KB (QD=32) : 538.820 MB/s [131547.9 IOPS]
Random Write 4KB (QD=32) : 2.214 MB/s [ 540.5 IOPS]
Test : 50 MB [E: 0.0% (0.4/16740.0 GB)] (x2)
Date : 2016/09/28 12:35:44
OS : Windows NT 6.2 Server Standard Edition (full installation) [6.2 Build 9200] (x64)
--------
Тот же результат дает тестирование в той же ОС на виртуальной машине на ESXi6U2. Контроллер: логический SAS (настройки по умолчанию при создании ВМ).
Использование аппаратного RAID-контроллера: Adpatec 8405.
Почему слишком медленно? Спасибо за любые решения.
Ни в коем случае нельзя использовать RAID-5 без батареи - независимо от того, используете ли вы кэширование записи или нет. Любой RAID подлежит записи без буферизации батареи. Кроме того, это значительно увеличит скорость записи при использовании аккумуляторного буфера.
Но если вы категорически настаиваете на том, чтобы не использовать буферизацию батареи, попробуйте уменьшить размер полосы. 512k кажутся огромными, если вы в основном выполняете случайные небольшие операции ввода-вывода. В массиве размером 3 жестких диска вам необходимо записать смежные блоки размером 1 мегабайт, чтобы заполнить путь ввода-вывода. Выполнение меньшего ввода-вывода приводит к усилению записи из-за цикла чтения-изменения-записи. Это означает, что ваш массив читает 1 МБ чистых данных, изменяет 4 КБ, и ему снова нужно записать 1 МБ. Добавление накладных расходов на поиск объясняет, почему даже производительность 512k так низка (коэффициент усиления равен 2, перезапись данных требует ожидания почти одного оборота пластин, добавляя 8 мс ожидания ввода-вывода на 1 M записанных данных). Фактически, таким образом вы можете передавать только 512 КБ за 16 мс, что примерно соответствует тому, что вы получаете: менее 32 МБ / с (если у ваших дисков время доступа 8 мс). Я даже предполагаю, что среднее время доступа - ваша самая большая проблема. Получите кэш с буферизацией от батареи, обойти это невозможно. И используйте SSD CacheCade, чтобы уменьшить накладные расходы на поиск.
Вы можете обойтись, используя ИБП и кэширование с обратной записью, но без BBU на контроллере кеш может по-прежнему подвергаться сбросам кеша приложений и барьерам записи, что иногда все равно приводит к снижению производительности.
Если вы не можете предсказать шаблоны записи вашего приложения, я бы сильно уменьшил размер полосы, особенно если вы собираетесь использовать много шпинделей.
Почему отключен кеш записи? Если у вас есть батарея на контроллере RAID (информация не найдена), вы можете активировать режим обратной записи.
А как насчет RAID 50? Вы теряете дисковое пространство, но действительно повышаете производительность.
Я думаю, что RAID 5 на 10 дисках тормозит расчетом четности, но я не эксперт.
Это типичная проблема с RAID5. Требуется кэш записи, чтобы избежать цикла чтения-изменения-записи. Это снижает производительность, иногда очень сильно. https://en.wikipedia.org/wiki/Read-modify-write У меня есть такие RAID-массивы, без кеша они пишут очень медленно.
Еще одна идея: вы можете настроить планировщик ядра: https://www.kernel.org/doc/Documentation/block/queue-sysfs.txt
Используйте планировщик noop вместо cfq. Контроллер рейда имеет собственный планировщик, поэтому ваши пакеты планируются 2 раза перед записью на устройство.
Чтобы установить его: echo 'noop'> / sys / block / DEVICENAME / queue / scheduler
Вы можете сделать его постоянным, используя пакет sysfsutils в debian.
Еще одна идея: увеличьте объем оперативной памяти. Linux автоматически использует его для кэширования файлов. Я знаю, что это только решает проблему, но если у вас короткое время записи, это может быть лучшим решением.
Результаты с кешем записи:
-----------------------------------------------------------------------
CrystalDiskMark 3.0.1 x64 (C) 2007-2010 hiyohiyo
Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]
Sequential Read : 1950.515 MB/s
Sequential Write : 3545.783 MB/s
Random Read 512KB : 2932.946 MB/s
Random Write 512KB : 2980.421 MB/s
Random Read 4KB (QD=1) : 79.481 MB/s [ 19404.4 IOPS]
Random Write 4KB (QD=1) : 78.543 MB/s [ 19175.5 IOPS]
Random Read 4KB (QD=32) : 551.817 MB/s [134721.0 IOPS]
Random Write 4KB (QD=32) : 519.086 MB/s [126729.9 IOPS]
Test : 50 MB [E: 0.0% (0.4/16740.0 GB)] (x2)
Date : 2016/09/28 14:25:09
OS : Windows NT 6.2 Server Standard Edition (full installation) [6.2 Build 9200] (x64)
Оба результата были получены на одном и том же RAID5 10xHHD с использованием Adaptec 8405. Сектор: размер 4k Размер полосы: 512k
Результаты RAID50 на том же оборудовании:
-----------------------------------------------------------------------
CrystalDiskMark 3.0.1 x64 (C) 2007-2010 hiyohiyo
Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]
Sequential Read : 1799.496 MB/s
Sequential Write : 3423.066 MB/s
Random Read 512KB : 2450.107 MB/s
Random Write 512KB : 2627.551 MB/s
Random Read 4KB (QD=1) : 77.889 MB/s [ 19016.0 IOPS]
Random Write 4KB (QD=1) : 76.530 MB/s [ 18684.0 IOPS]
Random Read 4KB (QD=32) : 519.356 MB/s [126796.0 IOPS]
Random Write 4KB (QD=32) : 522.408 MB/s [127541.0 IOPS]
Test : 50 MB [E: 0.0% (0.6/14879.9 GB)] (x2)
Date : 2016/09/29 6:41:13
OS : Windows NT 6.2 Server Standard Edition (full installation) [6.2 Build 9200] (x64)
В любом случае, я все еще ищу решения, которые позволят максимально ускорить запись.
Подробная информация о полосе (спасибо hurikhan77):
«Ни в коем случае нельзя использовать RAID-5 без батареи - независимо от того, используете ли вы кэширование записи или нет. Любой RAID подлежит записи без буферизации батареи. Кроме того, это значительно увеличит скорость записи.
Но если вы категорически настаиваете на том, чтобы не использовать буферизацию батареи, попробуйте уменьшить размер полосы. 512k кажутся огромными, если вы в основном выполняете случайные небольшие операции ввода-вывода. В массиве размером 3 жестких диска вам необходимо записать смежные блоки размером 1 мегабайт, чтобы заполнить путь ввода-вывода. Выполнение меньшего ввода-вывода приводит к усилению записи из-за цикла чтения-изменения-записи. Это означает, что ваш массив читает 1 МБ чистых данных, изменяет 4 КБ, и ему снова нужно записать 1 МБ. Добавление накладных расходов на поиск объясняет, почему даже производительность 512k так низка (коэффициент усиления равен 2, перезапись данных требует ожидания почти одного оборота пластин, добавляя 8 мс ожидания ввода-вывода на 1 M записанных данных). Фактически, таким образом вы можете передавать только 512 КБ за 16 мс, что примерно соответствует тому, что вы получаете: менее 32 МБ / с (если у ваших дисков время доступа 8 мс). Я даже предполагаю, что среднее время доступа - ваша самая большая проблема. Получите кэш с буферизацией от батареи, обойти это невозможно. И используйте SSD CacheCade, чтобы уменьшить накладные расходы на поиск ».
Ваша низкая скорость записи связана с тем, как RAID5 управляет входящими данными при записи элементов с полосами меньшего размера. В этом случае контроллер вынужден выполнять повторяющиеся шаблоны чтения-изменения-записи для правильной записи входящих данных, что снижает производительность.
В вашем конкретном случае эта проблема усугубляется двумя факторами:
Что вы можете сделать, чтобы уменьшить проблему?