|
4 | 4 |
|
5 | 5 | RBD |
6 | 6 | --- |
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 | + |
8 | 75 | * опции для рбд образов типа фастдифф |
9 | 76 | * бага с удалением снапшотов созданных ранними версиями |
10 | 77 | * откат к снапшоту крайне медленный (как он работает) и что без дедупликации по сравнению со старыми |
|
13 | 80 | * Виды кеширования в квм - дока от сусе где демелиоратор сказал что он не прав. |
14 | 81 | И описание что есть потеря данных при вырубания питания. |
15 | 82 | https://www.spinics.net/lists/ceph-users/msg15983.html |
| 83 | + http://docs.ceph.com/docs/master/rbd/qemu-rbd/#qemu-cache-options |
16 | 84 |
|
17 | 85 | * скруб еррор -- как понять хотябы какой это образ. |
18 | 86 | * как бекапить :) |
|
0 commit comments