@@ -9,24 +9,25 @@ qemu-kvm и discard
99++++++++++++++++++
1010
1111И Ceph (RBD) и Qemu умеют в discard/trim/unmap. Это означает, что гостевая ОС
12- может отправить соответствующий запрос к хранилищу чтобы сообщить что данные не
12+ может отправить соответствующий запрос к хранилищу, чтобы сообщить что данные не
1313нужны. Исходно это было предназначено для SSD-дисков с целью оптимизации
1414wear-leveling (выравнивание износа). В RBD это позволяет удалить ненужные данные
1515из кластера и тем самым уменьшить бекфиллинг, размеры снапшотов и др.
1616
1717Мы знаем, что RBD виртуально делит диски на куски по 4 МБ (по-умолчанию). Каждый
1818кусок -- это один объект Rados. Соответственно, дискард может либо удалить целиком
1919один объект (если он не нужен), либо сократить размер (вплоть до нуля). Что он не может
20- -- так это продискардить середину объекта или начало. В API RBD нет функции для
21- выяснения этого чанка. Поэтому Qemu не может догадаться какие дискарды можно отправлять
22- в librbd а какие закончатся ошибкой. В документации про это ничего не сказано.
20+ -- так это продискардить середину объекта или начало. Он мог бы просто заполнить нулями,
21+ но нет. Появляется ошибка, правда, не фатальная. В API RBD нет функции для
22+ выяснения размера чанка. Поэтому Qemu не может догадаться какие дискарды можно отправлять
23+ в librbd, а какие закончатся ошибкой. В документации про это ничего не сказано.
2324
2425Есть костыль для ceph.conf -- параметр ``rbd_skip_partial_discard ``. Однако:
2526
26- http://tracker.ceph.com/issues/16386
27- http://tracker.ceph.com/issues/16869
27+ * http://tracker.ceph.com/issues/16386
28+ * http://tracker.ceph.com/issues/16869
2829
29- В связи с чем, лучше проинструктировать Qemu чтобы она сообщила в гостевую о
30+ В связи с чем, лучше проинструктировать Qemu чтобы она сообщила в гостевую об
3031имеющемся выравнивании в 4 МБ. Тогда ядро гостевой ОС не будет отправлять дискарды
3132которые невозможно выполнить в RBD.
3233
@@ -45,10 +46,13 @@ http://tracker.ceph.com/issues/16869
4546 .. important ::
4647
4748 ``xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0' `` крайне важен.
48- без этой строки ``<qemu:commandline> `` будет проигнорирован. Проверить
49+ Без этой строки ``<qemu:commandline> `` будет проигнорирован. Проверить
4950 можно повторно отредактировав описание ВЫКЛЮЧЕНОЙ виртуальной машины
5051 ``virsh edit some-domain ``
5152
53+ Данный фрагмент будет работать только для virtio-scsi. Для IDE аналогично,
54+ но мне неизвестно как :).
55+
5256(Пример по ссылке http://docs.ceph.com/docs/master/rbd/qemu-rbd похоже что
5357устарел и не работает)
5458
@@ -67,22 +71,22 @@ http://tracker.ceph.com/issues/16869
6771 Discard будет работать только для виртуальных дисковых интерфейсов IDE и
6872 virtio-scsi. Не путайте virtio и virtio-scsi -- это два совершенно разных
6973 интерфейса. virtio устарел и более не развивается. В гостевой ОС
70- virtio-scsi выклядит как /dev/sd*, а virtio как /dev/vd*
74+ virtio-scsi выглядит как `` /dev/sd* `` , а virtio как `` /dev/vd* ``.
7175
72- Чтобы это заработало полностью, нужно убедиться что эта возможность во-первых,
73- появилась на блочном уровне в гостевй ОС, во-вторых, чтобы гостевая ОС
76+ Чтобы это заработало полностью, нужно убедиться что эта возможность, во-первых,
77+ появилась на блочном уровне в гостевой ОС, а во-вторых, чтобы гостевая ОС
7478использовала эту функцию.
7579
7680Linux
7781~~~~~
7882
7983* ``fstrim -v -a ``. Вручную, либо по расписанию (раз в неделю). Рекомендуется.
80- не уверен, но в Ubuntu по-моему работает из коробки.
84+ не уверен, но в Ubuntu, по-моему, работает из коробки.
8185* Опции для SWAP-разделов. TODO: расписать какие именно. Есть первичный дискард
8286 перед подключением, есть включение дискарда во время работы.
8387* Есть опции при монтировании различных ФС чтобы выполняли discard для данных
8488 которые стали ненужными (после удаления файлов)
85- * Команда `blkdiscard`` для очистки всего устройства либо раздела или тома LVM.
89+ * Команда `` blkdiscard `` для очистки всего устройства либо раздела или тома LVM.
8690
8791.. warning ::
8892
9397Windows
9498~~~~~~~
9599
96- TODO: всё работает из коробки как-то само собой. на старых версиях можно включить
100+ TODO: всё работает из коробки как-то само собой. На старых версиях можно включить
97101через реестр. Как посмотреть ? Как форсировано прочистить ?
98102
103+ Настоятельно рекомендуется установить дополнения в гостевую ОС:
104+
105+ * https://fedoraproject.org/wiki/Windows_Virtio_Drivers
106+ * https://www.linux-kvm.org/page/WindowsGuestDrivers/Download_Drivers
107+
108+ Иначе придётся довольствоваться только IDE, а это сильно меньшая производительность.
109+
99110
100111Недорасписанное
101112+++++++++++++++
0 commit comments