У меня есть сервер 2005 года выпуска (два процессора Xeon с тактовой частотой 3 ГГц, контроллер LSI53C1030T RAID / SCSI с 256 МБ кеш-памяти, 8 ГБ ОЗУ), и я переделываю его для использования в качестве небольшого хранилища виртуальных машин.
Первая попытка заключалась в том, чтобы поместить диски 4x300 ГБ в аппаратный RAID5, а затем установить поверх него LVM и iSCSI Openfiler. Это привело к очень непостоянной скорости чтения (от 20 МБ / с до 2 ГБ / с, но это, вероятно, кэширование) и ужасным, но стабильным 8 МБ / с записи. Все эти результаты были измерены как с локальным dd, так и с реальной передачей большого файла по сети, и оба дали одинаковые результаты.
Итак, после долгого чтения я обнаружил, что вышеупомянутый контроллер LSI не так хорош для аппаратного RAID, поэтому я отключил функцию RAID на канале с дисками 4x300 ГБ, сделал массив RAID с программным RAID mdadm и поставил LVM поверх Это. Я провел больше тестов, и результаты улучшились (запись 20 МБ / сек), но это все равно ужасно. Я потратил еще один день на выравнивание разделов, оптимизацию фрагментов, ширину полосы, размеры шага, игру с параметрами ext4, различными параметрами ведения журнала и т. Д., Без заметных улучшений.
Другой эксперимент, который я провел, проводился hdparm -tT
на / dev / md0 против / dev / mapper / vg0-lv0 (который был просто отображением всего md0), и я получил замедление в 2 раза при прохождении через LVM. Я читал, что LVM может вводить некоторые штрафы за скорость, но сокращение скорости вдвое неприемлемо.
Поскольку все это не имело смысла, я вернулся к основам, сделал один раздел на одном диске, без LVM, RAID, просто старый добрый SCSI320 и провел на нем несколько тестов. У меня было ~ 75 МБ / с на чтение и ~ 55 МБ / с на запись при нескольких запусках и нескольких программах.
Итак, если один диск может выполнять чтение со скоростью 75 МБ / с и запись со скоростью 55 МБ / с, почему RAID5 (аппаратный или программный!) Из трех из них имеет такую ужасную скорость? Что я делаю не так? Что еще мне попробовать?
ОБНОВЛЕНИЕ 1: Продолжая эксперименты, я заметил, что один из дисков иногда не хотел быть разбитым; parted, а fdisk просто откажется записывать в него разделы. Поэтому я попробовал те же команды на всех других дисках, чтобы убедиться, что это не системная проблема, и казалось, что она изолирована только для этого одного диска. Я побежал smartctl
Тесты здоровья на нем, и все проверили нормально. dmesg
был единственным источником каких-либо указаний на то, что с приводом может быть что-то не так, хотя и с довольно загадочными и не особо полезными сообщениями. Из чистого любопытства я вытащил диск, перезагрузил и переделал все, что делал до сих пор для программного RAID5 без LVM, но с ext4 на нем. При первой попытке я получил 200 МБ / с чтения и 120 МБ / с записи на массив из пяти дисков (за это время я нашел еще два диска по 300 ГБ) при тестировании с dd, выгружающим файлы размером 4,2 ГБ в блоках по 64 КБ на новый раздел. Судя по всему, привод, хотя и не полностью мертв, не был особенно кооперативным, и, как только вы его исключили, все работало НАМНОГО лучше.
Теперь я чувствую себя более разумным, 8 МБ / с просто не кажутся нужными, независимо от уровня RAID.
Завтра: тестирование с LVM и, возможно, возвращение к аппаратному RAID.
Как известно, RAID5 плохо сказывается на производительности записи. Причина этого в том, что каждая запись на конкретный диск должна обновлять блок четности, поэтому каждая запись требует чтения с каждого другого диска в массиве + вычисление четности, которое затем перезаписывается на диск, где четность сохраняется для этого конкретного блока.
Это занимает много времени по сравнению с простой записью одного блока.
Если вам нужна быстрая запись, лучше использовать зеркальную конфигурацию, например RAID1 или RAID10.