LINUX.ORG.RU

После обновления lvm возросла запись / чтение на дисках при использовании кеширования, что это может быть?

 , , ,


2

3

Здравствуйте.

Есть 4 сервера с операционной системой CentOS 7, на всех серверах стоит по 2 HDD диска и по 2 SSD накопителя. Создано 2 программных RAID-1 массива (один на HDD, другой на SSD).

Из указанных дисков HDD создано хранилище на базе LVM с кешированием на SSD дисках в режиме writeback.

После обновления пакетов lvm до версии 2.02.171-8 (последняя доступная версия в официальном репозитории), чтение с SSD дисков возросло в 2-3 раза и одновременно с этим возросла запись на HDD диски (пропорционально чтению с SSD дисков).

Хранилище используется под виртуальные машины на базе QEMU-KVM, нагрузка с их стороны не менялась. Одновременно с обновлением пакетов lvm производилось обновление всей системы (то есть ядро, qemu также были обновлены).

Ради эксперимента, на одном из серверов с низкой нагрузкой я переключил режим кеширования с writeback на writethrough, чтение с SSD и запись на HDD сразу снизились.

По ссылке https://yadi.sk/d/0a7fULcv3SrmrM можете посмотреть графики записи и чтения с дисков. На сервере 1 виден скачок чтения и записи после обновления и перезагрузки системы, на сервере 2 видно резкое снижение чтения и записи после переключения кеширования в режим writethrough.

Я пробовал искать подобные проблемы в сети, но ничего найти не смог. Также изучал https://bugzilla.redhat.com/buglist.cgi?quicksearch=lvm2 и https://bugs.debian.org/cgi-bin/pkgreport.cgi?pkg=lvm2;dist=unstable , ничего похожего не нашел.

Откатился с ядра 3.10.0-693.21.1.el7.x86_64 обратно на 3.10.0-514.26.2.el7.x86_64, проблема осталась. Пробовал поставить 4.4.120-1.el7.elrepo.x86_64, проблема также сохраняется. Откатил LVM вместе с зависимостями от 2.02.171-8 к 2.02.166-1, проблема также сохранилась.

Что это может быть? Ошибка статистики или же система действительно по каким-то причинам пишет больше, чем должна? Куда копать в данном случае?


А какой процесс пишет больше всех на диск? через iotop можно посмотреть

anonymous
()

Можете показать:

iostat -xdm 1

Какая версия qemu-kvm?

Также, какой планировщик используется?

int13h ★★★★★
()

Спасибо отписавшимся. Проблему для себя решил.

Я произвел чистую установку CentOS 7.4 со всеми актуальными пакетами, на ней проблему не удалось воспроизвести. Сравнил конфигурацию хранилища LVM из каталога /etc/lvm/backup, откуда выяснил, что на всех серверах metadata_format стоит в 1, а на свежей установке у хранилища стоит 2.

Что удалось выяснить - если система была обновлена с первых версий 7 ветки (точно не помню, возможно 7.1 или 7.2 изначально была установлена), то при подключении кеширования с помощью команды lvcreate без явного указания cachemetadataformat (по умолчанию стоит auto), почему-то ставилась 1 версия. А в новой установке при тех же условиях ставилась 2 версия.

Сама проблема воспроизводилась следующим образом - режим кешировния writeback, cachemetadataformat в 1. При записи на такое хранилище, процесс вел себя достаточно странно: помимо записываемых данных (которые по логике должны попадать в кеш и на диск), система производила чтение каких-то данных с HDD (в значительно больших объемах, чем велась запись), эти данные писались в кеш на SSD, а после завершения записи этот объем данных записывался обратно на HDD. Это очень хорошо видно в связке использования fio + iostat, виртуальные машины здесь не причем, проблема воспроизводится и без них.

Решение простое: отключаем кеширование и явно указываем версию мета-данных. Ниже пример команд, может кому-то пригодятся (переменные замените под себя):

lvconvert --uncache ${VG_NAME}/${LV_NAME}
lvcreate --type cache --cachemetadataformat 2 --cachemode writeback -L${SIZE}G -n ${LV_NAME}_cache ${VG_NAME}/${LV_NAME} /dev/${SSD}

Yoh
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.