From 8c4a11b51c3177a04b033a6a423f64296c5c42c9 Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Sun, 16 Jul 2023 23:57:10 +0300 Subject: [PATCH] Document cached_read_{data,meta,journal} parameters --- docs/config/layout-osd.en.md | 3 +- docs/config/layout-osd.ru.md | 2 ++ docs/config/osd.en.md | 43 +++++++++++++++++++++++ docs/config/osd.ru.md | 48 +++++++++++++++++++++++++ docs/config/src/layout-osd.yml | 5 ++- docs/config/src/osd.yml | 64 ++++++++++++++++++++++++++++++++++ 6 files changed, 163 insertions(+), 2 deletions(-) diff --git a/docs/config/layout-osd.en.md b/docs/config/layout-osd.en.md index 3ab5190a..5fea4beb 100644 --- a/docs/config/layout-osd.en.md +++ b/docs/config/layout-osd.en.md @@ -213,4 +213,5 @@ 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). +of read iops to spare). You may also consider enabling +[cached_read_meta](osd.en.md#cached_read_meta) in this case. diff --git a/docs/config/layout-osd.ru.md b/docs/config/layout-osd.ru.md index 8ee7f3f7..7645ec29 100644 --- a/docs/config/layout-osd.ru.md +++ b/docs/config/layout-osd.ru.md @@ -232,3 +232,5 @@ csum_block_size данных. без снижения производительности. Также вариант 3 *может* рекомендоваться для All-Flash кластеров на основе NVMe-дисков, когда памяти НЕ достаточно, потому что NVMe-диски имеют огромный запас производительности по чтению. +В таких случаях, возможно, также имеет смысл включать параметр +[cached_read_meta](osd.ru.md#cached_read_meta). diff --git a/docs/config/osd.en.md b/docs/config/osd.en.md index 1ec108d5..61ff58d8 100644 --- a/docs/config/osd.en.md +++ b/docs/config/osd.en.md @@ -31,6 +31,9 @@ them, even without restarting by updating configuration in etcd. - [max_flusher_count](#max_flusher_count) - [inmemory_metadata](#inmemory_metadata) - [inmemory_journal](#inmemory_journal) +- [cached_read_data](#cached_read_data) +- [cached_read_meta](#cached_read_meta) +- [cached_read_journal](#cached_read_journal) - [journal_sector_buffer_count](#journal_sector_buffer_count) - [journal_no_same_sector_overwrites](#journal_no_same_sector_overwrites) - [throttle_small_writes](#throttle_small_writes) @@ -255,6 +258,46 @@ is typically very small because it's sufficient to have 16-32 MB journal for SSD OSDs. However, in theory it's possible that you'll want to turn it off for hybrid (HDD+SSD) OSDs with large journals on quick devices. +## cached_read_data + +- Type: boolean +- Default: false + +Read data through Linux page cache, i.e. use a file descriptor opened without +O_DIRECT for data reads. May improve read performance for frequently accessed +data if it fits in RAM. Memory in page cache is shared by all processes and +not accounted in OSD memory consumption. + +## cached_read_meta + +- Type: boolean +- Default: false + +Read metadata through Linux page cache. May be beneficial when checksums +are enabled and [inmemory_metadata](#inmemory_metadata) is disabled, because +in this case metadata blocks are read from disk to verify checksums on every +read request and caching them may reduce this extra read load. + +Absolutely pointless to enable with enabled inmemory_metadata because all +metadata is kept in memory anyway, and likely pointless without checksums, +because in that case, metadata blocks are read from disk only during journal +flushing. + +If the same device is used for data and metadata, enabling [cached_read_data](#cached_read_data) +also enables this parameter, given that it isn't turned off explicitly. + +## cached_read_journal + +- Type: boolean +- Default: false + +Read buffered data from journal through Linux page cache. Does not have sense +without disabling [inmemory_journal](#inmemory_journal), which, again, is +enabled by default. + +If the same device is used for metadata and journal, enabling [cached_read_meta](#cached_read_meta) +also enables this parameter, given that it isn't turned off explicitly. + ## journal_sector_buffer_count - Type: integer diff --git a/docs/config/osd.ru.md b/docs/config/osd.ru.md index 30c68f2c..38bdcd07 100644 --- a/docs/config/osd.ru.md +++ b/docs/config/osd.ru.md @@ -32,6 +32,9 @@ - [max_flusher_count](#max_flusher_count) - [inmemory_metadata](#inmemory_metadata) - [inmemory_journal](#inmemory_journal) +- [cached_read_data](#cached_read_data) +- [cached_read_meta](#cached_read_meta) +- [cached_read_journal](#cached_read_journal) - [journal_sector_buffer_count](#journal_sector_buffer_count) - [journal_no_same_sector_overwrites](#journal_no_same_sector_overwrites) - [throttle_small_writes](#throttle_small_writes) @@ -263,6 +266,51 @@ Flusher - это микро-поток (корутина), которая коп параметра может оказаться полезным для гибридных OSD (HDD+SSD) с большими журналами, расположенными на быстром по сравнению с HDD устройстве. +## cached_read_data + +- Тип: булево (да/нет) +- Значение по умолчанию: false + +Читать данные через системный кэш Linux (page cache), то есть, использовать +для чтения данных файловый дескриптор, открытый без флага O_DIRECT. Может +улучшить производительность чтения для часто используемых данных, если они +помещаются в память. Память кэша разделяется между всеми процессами в +системе и не учитывается в потреблении памяти процессом OSD. + +## cached_read_meta + +- Тип: булево (да/нет) +- Значение по умолчанию: false + +Читать метаданные через системный кэш Linux. Может быть полезно, когда +включены контрольные суммы, а параметр [inmemory_metadata](#inmemory_metadata) +отключён, так как в этом случае блоки метаданных читаются с диска при каждом +запросе чтения для проверки контрольных сумм и их кэширование может снизить +дополнительную нагрузку на диск. + +Абсолютно бессмысленно включать данный параметр, если параметр +inmemory_metadata включён (по умолчанию это так), и также вероятно +бессмысленно включать его, если не включены контрольные суммы, так как в +этом случае блоки метаданных читаются с диска только во время сброса +журнала. + +Если одно и то же устройство используется для данных и метаданных, включение +[cached_read_data](#cached_read_data) также включает данный параметр, при +условии, что он не отключён явным образом. + +## cached_read_journal + +- Тип: булево (да/нет) +- Значение по умолчанию: false + +Читать буферизованные в журнале данные через системный кэш Linux. Не имеет +смысла без отключения параметра [inmemory_journal](#inmemory_journal), +который, опять же, по умолчанию включён. + +Если одно и то же устройство используется для метаданных и журнала, +включение [cached_read_meta](#cached_read_meta) также включает данный +параметр, при условии, что он не отключён явным образом. + ## journal_sector_buffer_count - Тип: целое число diff --git a/docs/config/src/layout-osd.yml b/docs/config/src/layout-osd.yml index f36f88bd..e3f192c3 100644 --- a/docs/config/src/layout-osd.yml +++ b/docs/config/src/layout-osd.yml @@ -244,7 +244,8 @@ 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). + of read iops to spare). You may also consider enabling + [cached_read_meta](osd.en.md#cached_read_meta) in this case. info_ru: | Размер блока расчёта контрольных сумм. @@ -275,3 +276,5 @@ без снижения производительности. Также вариант 3 *может* рекомендоваться для All-Flash кластеров на основе NVMe-дисков, когда памяти НЕ достаточно, потому что NVMe-диски имеют огромный запас производительности по чтению. + В таких случаях, возможно, также имеет смысл включать параметр + [cached_read_meta](osd.ru.md#cached_read_meta). diff --git a/docs/config/src/osd.yml b/docs/config/src/osd.yml index 6e61fa57..8690a3b1 100644 --- a/docs/config/src/osd.yml +++ b/docs/config/src/osd.yml @@ -260,6 +260,70 @@ достаточно 16- или 32-мегабайтного журнала. Однако в теории отключение параметра может оказаться полезным для гибридных OSD (HDD+SSD) с большими журналами, расположенными на быстром по сравнению с HDD устройстве. +- name: cached_read_data + type: bool + default: false + info: | + Read data through Linux page cache, i.e. use a file descriptor opened without + O_DIRECT for data reads. May improve read performance for frequently accessed + data if it fits in RAM. Memory in page cache is shared by all processes and + not accounted in OSD memory consumption. + info_ru: | + Читать данные через системный кэш Linux (page cache), то есть, использовать + для чтения данных файловый дескриптор, открытый без флага O_DIRECT. Может + улучшить производительность чтения для часто используемых данных, если они + помещаются в память. Память кэша разделяется между всеми процессами в + системе и не учитывается в потреблении памяти процессом OSD. +- name: cached_read_meta + type: bool + default: false + info: | + Read metadata through Linux page cache. May be beneficial when checksums + are enabled and [inmemory_metadata](#inmemory_metadata) is disabled, because + in this case metadata blocks are read from disk to verify checksums on every + read request and caching them may reduce this extra read load. + + Absolutely pointless to enable with enabled inmemory_metadata because all + metadata is kept in memory anyway, and likely pointless without checksums, + because in that case, metadata blocks are read from disk only during journal + flushing. + + If the same device is used for data and metadata, enabling [cached_read_data](#cached_read_data) + also enables this parameter, given that it isn't turned off explicitly. + info_ru: | + Читать метаданные через системный кэш Linux. Может быть полезно, когда + включены контрольные суммы, а параметр [inmemory_metadata](#inmemory_metadata) + отключён, так как в этом случае блоки метаданных читаются с диска при каждом + запросе чтения для проверки контрольных сумм и их кэширование может снизить + дополнительную нагрузку на диск. + + Абсолютно бессмысленно включать данный параметр, если параметр + inmemory_metadata включён (по умолчанию это так), и также вероятно + бессмысленно включать его, если не включены контрольные суммы, так как в + этом случае блоки метаданных читаются с диска только во время сброса + журнала. + + Если одно и то же устройство используется для данных и метаданных, включение + [cached_read_data](#cached_read_data) также включает данный параметр, при + условии, что он не отключён явным образом. +- name: cached_read_journal + type: bool + default: false + info: | + Read buffered data from journal through Linux page cache. Does not have sense + without disabling [inmemory_journal](#inmemory_journal), which, again, is + enabled by default. + + If the same device is used for metadata and journal, enabling [cached_read_meta](#cached_read_meta) + also enables this parameter, given that it isn't turned off explicitly. + info_ru: | + Читать буферизованные в журнале данные через системный кэш Linux. Не имеет + смысла без отключения параметра [inmemory_journal](#inmemory_journal), + который, опять же, по умолчанию включён. + + Если одно и то же устройство используется для метаданных и журнала, + включение [cached_read_meta](#cached_read_meta) также включает данный + параметр, при условии, что он не отключён явным образом. - name: journal_sector_buffer_count type: int default: 32