Skip to content

Commit 5c4487f

Browse files
committed
rbd discard fixup
1 parent 97ccc8c commit 5c4487f

File tree

1 file changed

+25
-14
lines changed

1 file changed

+25
-14
lines changed

main.rst

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,24 +9,25 @@ qemu-kvm и discard
99
++++++++++++++++++
1010

1111
И Ceph (RBD) и Qemu умеют в discard/trim/unmap. Это означает, что гостевая ОС
12-
может отправить соответствующий запрос к хранилищу чтобы сообщить что данные не
12+
может отправить соответствующий запрос к хранилищу, чтобы сообщить что данные не
1313
нужны. Исходно это было предназначено для SSD-дисков с целью оптимизации
1414
wear-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

7680
Linux
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

@@ -93,9 +97,16 @@ Linux
9397
Windows
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

Comments
 (0)