|
1 | 1 | RBD
|
2 | 2 | ---
|
3 | 3 |
|
4 |
| -qemu-kvm и discard |
5 |
| -++++++++++++++++++ |
6 |
| - |
7 |
| -И Ceph (RBD) и Qemu умеют в discard/trim/unmap. Это означает, что гостевая ОС |
8 |
| -может отправить соответствующий запрос к хранилищу, чтобы сообщить что данные не |
9 |
| -нужны. Исходно это было предназначено для SSD-дисков с целью оптимизации |
10 |
| -wear-leveling (выравнивание износа). В RBD это позволяет удалить ненужные данные |
11 |
| -из кластера и тем самым уменьшить бекфиллинг, размеры снапшотов и др. |
12 |
| - |
13 |
| -Мы знаем, что RBD виртуально делит диски на куски по 4 МБ (по-умолчанию). Каждый |
14 |
| -кусок -- это один объект Rados. Соответственно, дискард может либо удалить целиком |
15 |
| -один объект (если он не нужен), либо сократить размер (вплоть до нуля). Что он не может |
16 |
| --- так это продискардить середину объекта или начало. Он мог бы просто заполнить нулями, |
17 |
| -но нет. Появляется ошибка, правда, не фатальная. В API RBD нет функции для |
18 |
| -выяснения размера чанка. Поэтому Qemu не может догадаться какие дискарды можно отправлять |
19 |
| -в librbd, а какие закончатся ошибкой. В документации про это ничего не сказано. |
20 |
| - |
21 |
| -Есть костыль для ceph.conf -- параметр ``rbd_skip_partial_discard``. Однако: |
22 |
| - |
23 |
| -* http://tracker.ceph.com/issues/16386 |
24 |
| -* http://tracker.ceph.com/issues/16869 |
25 |
| - |
26 |
| -В связи с чем, лучше проинструктировать Qemu чтобы она сообщила в гостевую об |
27 |
| -имеющемся выравнивании в 4 МБ. Тогда ядро гостевой ОС не будет отправлять дискарды |
28 |
| -которые невозможно выполнить в RBD. |
29 |
| - |
30 |
| -К сожалению, libvirt напрямую не может указать это для каждого диска персонально. |
31 |
| -Но есть костыль: |
32 |
| - |
33 |
| -.. code-block:: xml |
34 |
| -
|
35 |
| - <domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'> |
36 |
| - <qemu:commandline> |
37 |
| - <qemu:arg value='-global'/> |
38 |
| - <qemu:arg value='scsi-hd.discard_granularity=4194304'/> |
39 |
| - </qemu:commandline> |
40 |
| - ... |
41 |
| - <disk type='network' device='disk'> |
42 |
| - <!-- |
43 |
| - detect_zeroes='on' |
44 |
| - https://libvirt.org/formatdomain.html: |
45 |
| -
|
46 |
| - NB enabling the detection is a compute intensive operation, |
47 |
| - but can save file space and/or time on slow media. |
48 |
| -
|
49 |
| - А ещё это может повлиять на бенчмарки в стиле dd if=/dev/zero ... |
50 |
| - fio использует случайный паттерн. |
51 |
| - --> |
52 |
| - <driver name='qemu' type='raw' cache='writeback' discard='unmap'/> |
53 |
| - ... |
54 |
| - </disk> |
55 |
| - </domain> |
56 |
| -
|
57 |
| -.. important:: |
58 |
| - |
59 |
| - ``xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'`` крайне важен. |
60 |
| - Без этой строки ``<qemu:commandline>`` будет проигнорирован. Проверить |
61 |
| - можно повторно отредактировав описание ВЫКЛЮЧЕНОЙ виртуальной машины |
62 |
| - ``virsh edit some-domain`` |
63 |
| - |
64 |
| - Данный фрагмент будет работать только для virtio-scsi. Для IDE аналогично, |
65 |
| - но мне неизвестно как :). |
66 |
| - |
67 |
| -(Пример по ссылке http://docs.ceph.com/docs/master/rbd/qemu-rbd похоже что |
68 |
| -устарел и не работает) |
69 |
| - |
70 |
| -Для справки есть ещё такие параметры: |
71 |
| - |
72 |
| -* ``logical_block_size`` |
73 |
| -* ``physical_block_size`` |
74 |
| -* ``min_io_size`` |
75 |
| -* ``opt_io_size`` |
76 |
| - |
77 |
| -.. important:: |
78 |
| - |
79 |
| - Discard будет работать только для виртуальных дисковых интерфейсов IDE и |
80 |
| - virtio-scsi. Не путайте virtio и virtio-scsi -- это два совершенно разных |
81 |
| - интерфейса. virtio устарел и более не развивается. В гостевой ОС |
82 |
| - virtio-scsi выглядит как ``/dev/sd*``, а virtio как ``/dev/vd*``. |
83 |
| - |
84 |
| - |
85 |
| -Их всех можно посмотреть командой ``lsblk`` в гостевой ОС чтобы удостовериться, |
86 |
| -что виртуальная машина настроена правильно |
87 |
| -(``DISC-GRAN`` равен размеру чанка в RBD): |
88 |
| - |
89 |
| -.. code:: |
90 |
| -
|
91 |
| - $ lsblk -D |
92 |
| - NAME DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO |
93 |
| - sda 0 4M 1G 0 |
94 |
| - ├─sda1 4176896 4M 1G 0 |
95 |
| - ├─sda2 3145728 4M 1G 0 |
96 |
| - └─sda3 3145728 4M 1G 0 |
97 |
| -
|
98 |
| - $ lsblk -t |
99 |
| - NAME ALIGNMENT MIN-IO OPT-IO PHY-SEC LOG-SEC ROTA SCHED RQ-SIZE RA WSAME |
100 |
| - sda 0 512 0 512 512 1 deadline 128 128 2G |
101 |
| - ├─sda1 0 512 0 512 512 1 deadline 128 128 2G |
102 |
| - ├─sda2 0 512 0 512 512 1 deadline 128 128 2G |
103 |
| - └─sda3 0 512 0 512 512 1 deadline 128 128 2G |
104 |
| -
|
105 |
| -
|
106 |
| -Чтобы это заработало полностью, нужно не только убедиться что эта возможность |
107 |
| -появилась на блочном уровне в гостевой ОС, но и чтобы гостевая ОС |
108 |
| -использовала эту функцию. |
109 |
| - |
110 |
| -Linux |
111 |
| -~~~~~ |
112 |
| - |
113 |
| -* ``fstrim -v -a``. Вручную, либо по расписанию (раз в неделю). Рекомендуется. |
114 |
| - не уверен, но в Ubuntu, по-моему, работает из коробки. |
115 |
| -* Опции для SWAP-разделов. TODO: расписать какие именно. Есть первичный дискард |
116 |
| - перед подключением, есть включение дискарда во время работы. |
117 |
| -* Есть опции при монтировании различных ФС чтобы выполняли discard для данных |
118 |
| - которые стали ненужными (после удаления файлов) |
119 |
| -* Команда ``blkdiscard`` для очистки всего устройства либо раздела или тома LVM. |
120 |
| - |
121 |
| -.. warning:: |
122 |
| - |
123 |
| - Говорят, что опции монтирования и аналогичные опции для SWAP-раздела понижают |
124 |
| - производительность. С другой стороны, массивный fstrim по расписанию может |
125 |
| - дать непредвиденные проседания IO в гостевой ОС. |
126 |
| - |
127 |
| -Windows |
128 |
| -~~~~~~~ |
129 |
| - |
130 |
| -TODO: всё работает из коробки как-то само собой. На старых версиях можно включить |
131 |
| -через реестр. Как посмотреть ? Как форсировано прочистить ? |
132 |
| - |
133 |
| -Настоятельно рекомендуется установить дополнения в гостевую ОС: |
134 |
| - |
135 |
| -* https://fedoraproject.org/wiki/Windows_Virtio_Drivers |
136 |
| -* https://www.linux-kvm.org/page/WindowsGuestDrivers/Download_Drivers |
137 |
| - |
138 |
| -Иначе придётся довольствоваться только IDE, а это сильно меньшая производительность. |
139 |
| - |
| 4 | +.. include:: rbd-qemu.rst |
140 | 5 |
|
141 | 6 | Недорасписанное
|
142 | 7 | +++++++++++++++
|
|
0 commit comments