Skip to content

Commit 32686df

Browse files
committed
Qemu + RBD + discard
1 parent 2a09256 commit 32686df

File tree

1 file changed

+69
-1
lines changed

1 file changed

+69
-1
lines changed

main.rst

Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,74 @@ FAQ
44

55
RBD
66
---
7-
* настройки для дискарда в квм. про партиал дискарт, виртио-скайзи, дискард блок сайз. макс-дискард? важно в квм что-то про домейн добавить дефолт опцию
7+
8+
qemu-kvm и discard
9+
++++++++++++++++++
10+
11+
И Ceph (RBD) и Qemu умеют в discard/trim/unmap. Это означает, что гостевая ОС
12+
может отправить соответствующий запрос к хранилищу чтобы сообщить что данные не
13+
нужны. Исходно это было предназначено для SSD-дисков с целью оптимизации
14+
wear-leveling (выравнивание износа). В RBD это позволяет удалить ненужные данные
15+
из кластера и тем самым уменьшить бекфиллинг, размеры снапшотов и др.
16+
17+
Мы знаем, что RBD виртуально делит диски на куски по 4 МБ (по-умолчанию). Каждый
18+
кусок -- это один объект Rados. Соответственно, дискард может либо удалить целиком
19+
один объект (если он не нужен), либо сократить размер (вплоть до нуля). Что он не может
20+
-- так это продискардить середину объекта или начало. В API RBD нет функции для
21+
выяснения этого чанка. Поэтому Qemu не может догадаться какие дискарды можно отправлять
22+
в librbd а какие закончатся ошибкой. В документации про это ничего не сказано.
23+
24+
Есть костыль для ceph.conf -- параметр ``rbd_skip_partial_discard``. Однако:
25+
26+
http://tracker.ceph.com/issues/16386
27+
http://tracker.ceph.com/issues/16869
28+
29+
В связи с чем, лучше проинструктировать Qemu чтобы она сообщила в гостевую о
30+
имеющемся выравнивании в 4 МБ. Тогда ядро гостевой ОС не будет отправлять дискарды
31+
которые невозможно выполнить в RBD.
32+
33+
К сожалению, libvirt напрямую не может указать это для каждого диска персонально.
34+
Но есть костыль:
35+
36+
.. code-block:: xml
37+
38+
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
39+
<qemu:commandline>
40+
<qemu:arg value='-global'/>
41+
<qemu:arg value='scsi-hd.discard_granularity=4194304'/>
42+
</qemu:commandline>
43+
</domain>
44+
45+
.. important::
46+
47+
``xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'`` крайне важен.
48+
без этой строки ``<qemu:commandline>`` будет проигнорирован. Проверить
49+
можно повторно отредактировав описание ВЫКЛЮЧЕНОЙ виртуальной машины
50+
``virsh edit some-domain``
51+
52+
(Пример по ссылке http://docs.ceph.com/docs/master/rbd/qemu-rbd похоже что
53+
устарел и не работает)
54+
55+
Для справки есть ещё такие параметры:
56+
57+
* ``logical_block_size``
58+
* ``physical_block_size``
59+
* ``min_io_size``
60+
* ``opt_io_size``
61+
62+
Их всех можно посмотреть командой ``lsblk`` в гостевой ОС (чтобы удостовериться,
63+
что виртуальная машина настроена правильно).
64+
65+
.. important::
66+
67+
Discard будет работать только для виртуальных дисковых интерфейсов IDE и
68+
virtio-scsi. Не путайте virtio и virtio-scsi -- это два совершенно разных
69+
интерфейса. virtio устарел и более не развивается. В гостевой ОС
70+
virtio-scsi выклядит как /dev/sd*, а virtio как /dev/vd*
71+
72+
Недорасписанное
73+
+++++++++++++++
74+
875
* опции для рбд образов типа фастдифф
976
* бага с удалением снапшотов созданных ранними версиями
1077
* откат к снапшоту крайне медленный (как он работает) и что без дедупликации по сравнению со старыми
@@ -13,6 +80,7 @@ RBD
1380
* Виды кеширования в квм - дока от сусе где демелиоратор сказал что он не прав.
1481
И описание что есть потеря данных при вырубания питания.
1582
https://www.spinics.net/lists/ceph-users/msg15983.html
83+
http://docs.ceph.com/docs/master/rbd/qemu-rbd/#qemu-cache-options
1684

1785
* скруб еррор -- как понять хотябы какой это образ.
1886
* как бекапить :)

0 commit comments

Comments
 (0)