From 21b5124a4bb1efff78c9e1e1c03d41cf346cb6f0 Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Mon, 10 Jul 2023 02:18:41 +0300 Subject: [PATCH] Document data_csum_type and csum_block_size parameters --- docs/config/layout-osd.en.md | 40 +++++++++++++++++++ docs/config/layout-osd.ru.md | 49 +++++++++++++++++++++++ docs/config/src/layout-osd.yml | 71 ++++++++++++++++++++++++++++++++++ docs/intro/features.en.md | 2 +- docs/intro/features.ru.md | 2 +- docs/usage/disk.en.md | 6 ++- docs/usage/disk.ru.md | 6 ++- src/disk_tool.cpp | 4 ++ 8 files changed, 176 insertions(+), 4 deletions(-) diff --git a/docs/config/layout-osd.en.md b/docs/config/layout-osd.en.md index 932cb434..3ab5190a 100644 --- a/docs/config/layout-osd.en.md +++ b/docs/config/layout-osd.en.md @@ -24,6 +24,8 @@ initialization and can't be changed after it without losing data. - [disable_journal_fsync](#disable_journal_fsync) - [disable_device_lock](#disable_device_lock) - [disk_alignment](#disk_alignment) +- [data_csum_type](#data_csum_type) +- [csum_block_size](#csum_block_size) ## data_device @@ -174,3 +176,41 @@ Intel Optane (probably, not tested yet). Clients don't need to be aware of disk_alignment, so it's not required to put a modified value into etcd key /vitastor/config/global. + +## data_csum_type + +- Type: string +- Default: none + +Data checksum type to use. May be "crc32c" or "none". Set to "crc32c" to +enable data checksums. + +## csum_block_size + +- Type: integer +- Default: 4096 + +Checksum calculation block size. + +Must be equal or a multiple of [bitmap_granularity](layout-cluster.en.md#bitmap_granularity) +(which is usually 4 KB). + +Checksums increase metadata size by 4 bytes per each csum_block_size of data. + +Checksums are always a compromise: +1. You either sacrifice +1 GB RAM per 1 TB of data +2. Or you raise csum_block_size, for example, to 32k and sacrifice + 50% random write iops due to checksum read-modify-write +3. Or you turn off [inmemory_metadata](osd.en.md#inmemory_metadata) and + sacrifice 50% random read iops due to checksum reads + +Option 1 (default) is recommended for all-flash setups because these usually +have enough RAM. + +Option 2 is recommended for HDD-only setups. HDD-only setups usually do NOT +have enough RAM for the default 4 KB csum_block_size. + +Option 3 is recommended for SSD+HDD setups (because metadata SSDs will handle +extra reads without any performance drop) and also *maybe* for NVMe all-flash +setups when you don't have enough RAM (because NVMe drives have plenty +of read iops to spare). diff --git a/docs/config/layout-osd.ru.md b/docs/config/layout-osd.ru.md index f6652e94..8ee7f3f7 100644 --- a/docs/config/layout-osd.ru.md +++ b/docs/config/layout-osd.ru.md @@ -25,6 +25,8 @@ - [disable_journal_fsync](#disable_journal_fsync) - [disable_device_lock](#disable_device_lock) - [disk_alignment](#disk_alignment) +- [data_csum_type](#data_csum_type) +- [csum_block_size](#csum_block_size) ## data_device @@ -183,3 +185,50 @@ journal_block_size и meta_block_size. Однако единственные SSD Клиентам не обязательно знать про disk_alignment, так что помещать значение этого параметра в etcd в /vitastor/config/global не нужно. + +## data_csum_type + +- Тип: строка +- Значение по умолчанию: none + +Тип используемых OSD контрольных сумм данных. Может быть "crc32c" или "none". +Установите в "crc32c", чтобы включить расчёт и проверку контрольных сумм данных. + +Следует понимать, что контрольные суммы в зависимости от размера блока их +расчёта либо увеличивают потребление памяти, либо снижают производительность. +Подробнее смотрите в описании параметра [csum_block_size](#csum_block_size). + +## csum_block_size + +- Тип: целое число +- Значение по умолчанию: 4096 + +Размер блока расчёта контрольных сумм. + +Должен быть равен или кратен [bitmap_granularity](layout-cluster.ru.md#bitmap_granularity) +(который обычно равен 4 КБ). + +Контрольные суммы увеличивают размер метаданных на 4 байта на каждые +csum_block_size данных. + +Контрольные суммы - это всегда компромисс: +1. Вы либо жертвуете потреблением +1 ГБ памяти на 1 ТБ дискового пространства +2. Либо вы повышаете csum_block_size до, скажем, 32k и жертвуете 50% + скорости случайной записи из-за цикла чтения-изменения-записи для расчёта + новых контрольных сумм +3. Либо вы отключаете [inmemory_metadata](osd.ru.md#inmemory_metadata) и + жертвуете 50% скорости случайного чтения из-за чтения контрольных сумм + с диска + +Вариант 1 (при настройках по умолчанию) рекомендуется для SSD (All-Flash) +кластеров, потому что памяти в них обычно хватает. + +Вариант 2 рекомендуется для кластеров на одних жёстких дисках (без SSD +под метаданные). На 4 кб блок контрольной суммы памяти в таких кластерах +обычно НЕ хватает. + +Вариант 3 рекомендуется для гибридных кластеров (SSD+HDD), потому что +скорости SSD под метаданными хватит, чтобы обработать дополнительные чтения +без снижения производительности. Также вариант 3 *может* рекомендоваться +для All-Flash кластеров на основе NVMe-дисков, когда памяти НЕ достаточно, +потому что NVMe-диски имеют огромный запас производительности по чтению. diff --git a/docs/config/src/layout-osd.yml b/docs/config/src/layout-osd.yml index 6f94ff6d..f36f88bd 100644 --- a/docs/config/src/layout-osd.yml +++ b/docs/config/src/layout-osd.yml @@ -204,3 +204,74 @@ Клиентам не обязательно знать про disk_alignment, так что помещать значение этого параметра в etcd в /vitastor/config/global не нужно. +- name: data_csum_type + type: string + default: none + info: | + Data checksum type to use. May be "crc32c" or "none". Set to "crc32c" to + enable data checksums. + info_ru: | + Тип используемых OSD контрольных сумм данных. Может быть "crc32c" или "none". + Установите в "crc32c", чтобы включить расчёт и проверку контрольных сумм данных. + + Следует понимать, что контрольные суммы в зависимости от размера блока их + расчёта либо увеличивают потребление памяти, либо снижают производительность. + Подробнее смотрите в описании параметра [csum_block_size](#csum_block_size). +- name: csum_block_size + type: int + default: 4096 + info: | + Checksum calculation block size. + + Must be equal or a multiple of [bitmap_granularity](layout-cluster.en.md#bitmap_granularity) + (which is usually 4 KB). + + Checksums increase metadata size by 4 bytes per each csum_block_size of data. + + Checksums are always a compromise: + 1. You either sacrifice +1 GB RAM per 1 TB of data + 2. Or you raise csum_block_size, for example, to 32k and sacrifice + 50% random write iops due to checksum read-modify-write + 3. Or you turn off [inmemory_metadata](osd.en.md#inmemory_metadata) and + sacrifice 50% random read iops due to checksum reads + + Option 1 (default) is recommended for all-flash setups because these usually + have enough RAM. + + Option 2 is recommended for HDD-only setups. HDD-only setups usually do NOT + have enough RAM for the default 4 KB csum_block_size. + + Option 3 is recommended for SSD+HDD setups (because metadata SSDs will handle + extra reads without any performance drop) and also *maybe* for NVMe all-flash + setups when you don't have enough RAM (because NVMe drives have plenty + of read iops to spare). + info_ru: | + Размер блока расчёта контрольных сумм. + + Должен быть равен или кратен [bitmap_granularity](layout-cluster.ru.md#bitmap_granularity) + (который обычно равен 4 КБ). + + Контрольные суммы увеличивают размер метаданных на 4 байта на каждые + csum_block_size данных. + + Контрольные суммы - это всегда компромисс: + 1. Вы либо жертвуете потреблением +1 ГБ памяти на 1 ТБ дискового пространства + 2. Либо вы повышаете csum_block_size до, скажем, 32k и жертвуете 50% + скорости случайной записи из-за цикла чтения-изменения-записи для расчёта + новых контрольных сумм + 3. Либо вы отключаете [inmemory_metadata](osd.ru.md#inmemory_metadata) и + жертвуете 50% скорости случайного чтения из-за чтения контрольных сумм + с диска + + Вариант 1 (при настройках по умолчанию) рекомендуется для SSD (All-Flash) + кластеров, потому что памяти в них обычно хватает. + + Вариант 2 рекомендуется для кластеров на одних жёстких дисках (без SSD + под метаданные). На 4 кб блок контрольной суммы памяти в таких кластерах + обычно НЕ хватает. + + Вариант 3 рекомендуется для гибридных кластеров (SSD+HDD), потому что + скорости SSD под метаданными хватит, чтобы обработать дополнительные чтения + без снижения производительности. Также вариант 3 *может* рекомендоваться + для All-Flash кластеров на основе NVMe-дисков, когда памяти НЕ достаточно, + потому что NVMe-диски имеют огромный запас производительности по чтению. diff --git a/docs/intro/features.en.md b/docs/intro/features.en.md index 24e5caed..b0175cd2 100644 --- a/docs/intro/features.en.md +++ b/docs/intro/features.en.md @@ -30,6 +30,7 @@ - [Write throttling to smooth random write workloads in SSD+HDD configurations](../config/osd.en.md#throttle_small_writes) - [RDMA/RoCEv2 support via libibverbs](../config/network.en.md#rdma_device) - [Scrubbing without checksums](../config/osd.en.md#auto_scrub) (verification of copies) +- [Checksums](../config/layout-osd.en.md#data_csum_type) ## Plugins and tools @@ -55,7 +56,6 @@ The following features are planned for the future: - iSCSI proxy - Multi-threaded client - Faster failover -- Checksums - Tiered storage (SSD caching) - NVDIMM support - Compression (possibly) diff --git a/docs/intro/features.ru.md b/docs/intro/features.ru.md index f5757442..407ca61b 100644 --- a/docs/intro/features.ru.md +++ b/docs/intro/features.ru.md @@ -32,6 +32,7 @@ - [Сглаживание производительности случайной записи в SSD+HDD конфигурациях](../config/osd.ru.md#throttle_small_writes) - [Поддержка RDMA/RoCEv2 через libibverbs](../config/network.ru.md#rdma_device) - [Фоновая проверка целостности без контрольных сумм](../config/osd.ru.md#auto_scrub) (сверка копий) +- [Контрольные суммы](../config/layout-osd.ru.md#data_csum_type) ## Драйверы и инструменты @@ -55,7 +56,6 @@ - iSCSI-прокси - Многопоточный клиент - Более быстрое переключение при отказах -- Контрольные суммы - Поддержка SSD-кэширования (tiered storage) - Поддержка NVDIMM - Возможно, сжатие diff --git a/docs/usage/disk.en.md b/docs/usage/disk.en.md index 30557f9a..6ca3fe1b 100644 --- a/docs/usage/disk.en.md +++ b/docs/usage/disk.en.md @@ -86,6 +86,8 @@ Options (both modes): --journal_size 1G/32M Set journal size (area or partition size) --block_size 1M/128k Set blockstore object size --bitmap_granularity 4k Set bitmap granularity +--data_csum_type none Set data checksum type (crc32c or none) +--csum_block_size 4k Set data checksum block size --data_device_block 4k Override data device block size --meta_device_block 4k Override metadata device block size --journal_device_block 4k Override journal device block size @@ -249,7 +251,9 @@ Options (see also [Cluster-Wide Disk Layout Parameters](../config/layout-cluster ``` --object_size 128k Set blockstore block size --bitmap_granularity 4k Set bitmap granularity ---journal_size 32M Set journal size +--journal_size 16M Set journal size +--data_csum_type none Set data checksum type (crc32c or none) +--csum_block_size 4k Set data checksum block size --device_block_size 4k Set device block size --journal_offset 0 Set journal offset --device_size 0 Set device size diff --git a/docs/usage/disk.ru.md b/docs/usage/disk.ru.md index 83a46d5e..274d4fef 100644 --- a/docs/usage/disk.ru.md +++ b/docs/usage/disk.ru.md @@ -87,6 +87,8 @@ vitastor-disk - инструмент командной строки для уп --journal_size 1G/32M Задать размер журнала (области или раздела журнала) --block_size 1M/128k Задать размер объекта хранилища --bitmap_granularity 4k Задать гранулярность битовых карт +--data_csum_type none Задать тип контрольных сумм (crc32c или none) +--csum_block_size 4k Задать размер блока расчёта контрольных сумм --data_device_block 4k Задать размер блока устройства данных --meta_device_block 4k Задать размер блока метаданных --journal_device_block 4k Задать размер блока журнала @@ -254,7 +256,9 @@ OSD отключены fsync-и. ``` --object_size 128k Размер блока хранилища --bitmap_granularity 4k Гранулярность битовых карт ---journal_size 32M Размер журнала +--journal_size 16M Размер журнала +--data_csum_type none Задать тип контрольных сумм (crc32c или none) +--csum_block_size 4k Задать размер блока расчёта контрольных сумм --device_block_size 4k Размер блока устройства --journal_offset 0 Смещение журнала --device_size 0 Размер устройства diff --git a/src/disk_tool.cpp b/src/disk_tool.cpp index ce97ab0e..5d5dcfe9 100644 --- a/src/disk_tool.cpp +++ b/src/disk_tool.cpp @@ -59,6 +59,8 @@ static const char *help_text = " --journal_size 32M/1G Set journal size (area or partition size)\n" " --block_size 128k/1M Set blockstore object size\n" " --bitmap_granularity 4k Set bitmap granularity\n" + " --data_csum_type none Set data checksum type (crc32c or none)\n" + " --csum_block_size 4k Set data checksum block size\n" " --data_device_block 4k Override data device block size\n" " --meta_device_block 4k Override metadata device block size\n" " --journal_device_block 4k Override journal device block size\n" @@ -161,6 +163,8 @@ static const char *help_text = " --object_size 128k Set blockstore block size\n" " --bitmap_granularity 4k Set bitmap granularity\n" " --journal_size 16M Set journal size\n" + " --data_csum_type none Set data checksum type (crc32c or none)\n" + " --csum_block_size 4k Set data checksum block size\n" " --device_block_size 4k Set device block size\n" " --journal_offset 0 Set journal offset\n" " --device_size 0 Set device size\n"