From 14d6acbcba4c816176e94b4505524920c6dac523 Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Tue, 28 Feb 2023 02:58:28 +0300 Subject: [PATCH] Set default rdma_max_recv/send to 16/8, fix documentation --- docs/config/network.en.md | 29 ++++++++++++++++----- docs/config/network.ru.md | 34 ++++++++++++++++++------ docs/config/src/network.yml | 52 +++++++++++++++++++++++++++---------- docs/usage/disk.en.md | 2 +- docs/usage/disk.ru.md | 2 +- mon/mon.js | 4 +-- src/messenger.cpp | 4 +-- 7 files changed, 94 insertions(+), 33 deletions(-) diff --git a/docs/config/network.en.md b/docs/config/network.en.md index 72851ee2..bc85ed37 100644 --- a/docs/config/network.en.md +++ b/docs/config/network.en.md @@ -19,6 +19,7 @@ between clients, OSDs and etcd. - [rdma_max_sge](#rdma_max_sge) - [rdma_max_msg](#rdma_max_msg) - [rdma_max_recv](#rdma_max_recv) +- [rdma_max_send](#rdma_max_send) - [peer_connect_interval](#peer_connect_interval) - [peer_connect_timeout](#peer_connect_timeout) - [osd_idle_timeout](#osd_idle_timeout) @@ -74,6 +75,12 @@ to work. For example, Mellanox ConnectX-3 and older adapters don't have Implicit ODP, so they're unsupported by Vitastor. Run `ibv_devinfo -v` as root to list available RDMA devices and their features. +Remember that you also have to configure your network switches if you use +RoCE/RoCEv2, otherwise you may experience unstable performance. Refer to +the manual of your network vendor for details about setting up the switch +for RoCEv2 correctly. Usually it means setting up Lossless Ethernet with +PFC (Priority Flow Control) and ECN (Explicit Congestion Notification). + ## rdma_port_num - Type: integer @@ -116,20 +123,30 @@ required to change this parameter. ## rdma_max_msg - Type: integer -- Default: 1048576 +- Default: 132096 Maximum size of a single RDMA send or receive operation in bytes. ## rdma_max_recv +- Type: integer +- Default: 16 + +Maximum number of RDMA receive buffers per connection (RDMA requires +preallocated buffers to receive data). Each buffer is `rdma_max_msg` bytes +in size. So this setting directly affects memory usage: a single Vitastor +RDMA client uses `rdma_max_recv * rdma_max_msg * OSD_COUNT` bytes of memory. +Default is roughly 2 MB * number of OSDs. + +## rdma_max_send + - Type: integer - Default: 8 -Maximum number of parallel RDMA receive operations. Note that this number -of receive buffers `rdma_max_msg` in size are allocated for each client, -so this setting actually affects memory usage. This is because RDMA receive -operations are (sadly) still not zero-copy in Vitastor. It may be fixed in -later versions. +Maximum number of outstanding RDMA send operations per connection. Should be +less than `rdma_max_recv` so the receiving side doesn't run out of buffers. +Doesn't affect memory usage - additional memory isn't allocated for send +operations. ## peer_connect_interval diff --git a/docs/config/network.ru.md b/docs/config/network.ru.md index 01531619..4779fcf5 100644 --- a/docs/config/network.ru.md +++ b/docs/config/network.ru.md @@ -19,6 +19,7 @@ - [rdma_max_sge](#rdma_max_sge) - [rdma_max_msg](#rdma_max_msg) - [rdma_max_recv](#rdma_max_recv) +- [rdma_max_send](#rdma_max_send) - [peer_connect_interval](#peer_connect_interval) - [peer_connect_timeout](#peer_connect_timeout) - [osd_idle_timeout](#osd_idle_timeout) @@ -78,6 +79,13 @@ Implicit On-Demand Paging (Implicit ODP) и Scatter/Gather (SG). Наприме суперпользователя, чтобы посмотреть список доступных RDMA-устройств, их параметры и возможности. +Обратите внимание, что если вы используете RoCE/RoCEv2, вам также необходимо +правильно настроить для него коммутаторы, иначе вы можете столкнуться с +нестабильной производительностью. Подробную информацию о настройке +коммутатора для RoCEv2 ищите в документации производителя. Обычно это +подразумевает настройку сети без потерь на основе PFC (Priority Flow +Control) и ECN (Explicit Congestion Notification). + ## rdma_port_num - Тип: целое число @@ -121,22 +129,32 @@ OSD в любом случае согласовывают реальное зн ## rdma_max_msg - Тип: целое число -- Значение по умолчанию: 1048576 +- Значение по умолчанию: 132096 Максимальный размер одной RDMA-операции отправки или приёма. ## rdma_max_recv +- Тип: целое число +- Значение по умолчанию: 16 + +Максимальное число буферов для RDMA-приёма данных на одно соединение +(RDMA требует заранее выделенных буферов для приёма данных). Каждый буфер +имеет размер `rdma_max_msg` байт. Таким образом, настройка прямо влияет на +потребление памяти - один Vitastor-клиент с RDMA использует +`rdma_max_recv * rdma_max_msg * ЧИСЛО_OSD` байт памяти, по умолчанию - +примерно 2 МБ * число OSD. + +## rdma_max_send + - Тип: целое число - Значение по умолчанию: 8 -Максимальное число параллельных RDMA-операций получения данных. Следует -иметь в виду, что данное число буферов размером `rdma_max_msg` выделяется -для каждого подключённого клиентского соединения, так что данная настройка -влияет на потребление памяти. Это так потому, что RDMA-приём данных в -Vitastor, увы, всё равно не является zero-copy, т.е. всё равно 1 раз -копирует данные в памяти. Данная особенность, возможно, будет исправлена в -более новых версиях Vitastor. +Максимальное число RDMA-операций отправки, отправляемых в очередь одного +соединения. Желательно, чтобы оно было меньше `rdma_max_recv`, чтобы +у принимающей стороны в процессе работы не заканчивались буферы на приём. +Не влияет на потребление памяти - дополнительная память на операции отправки +не выделяется. ## peer_connect_interval diff --git a/docs/config/src/network.yml b/docs/config/src/network.yml index e2d8ada8..8032ef44 100644 --- a/docs/config/src/network.yml +++ b/docs/config/src/network.yml @@ -53,6 +53,12 @@ to work. For example, Mellanox ConnectX-3 and older adapters don't have Implicit ODP, so they're unsupported by Vitastor. Run `ibv_devinfo -v` as root to list available RDMA devices and their features. + + Remember that you also have to configure your network switches if you use + RoCE/RoCEv2, otherwise you may experience unstable performance. Refer to + the manual of your network vendor for details about setting up the switch + for RoCEv2 correctly. Usually it means setting up Lossless Ethernet with + PFC (Priority Flow Control) and ECN (Explicit Congestion Notification). info_ru: | Название RDMA-устройства для связи с Vitastor OSD (например, "rocep5s0f0"). Имейте в виду, что поддержка RDMA в Vitastor требует функций устройства @@ -61,6 +67,13 @@ потому не поддерживаются в Vitastor. Запустите `ibv_devinfo -v` от имени суперпользователя, чтобы посмотреть список доступных RDMA-устройств, их параметры и возможности. + + Обратите внимание, что если вы используете RoCE/RoCEv2, вам также необходимо + правильно настроить для него коммутаторы, иначе вы можете столкнуться с + нестабильной производительностью. Подробную информацию о настройке + коммутатора для RoCEv2 ищите в документации производителя. Обычно это + подразумевает настройку сети без потерь на основе PFC (Priority Flow + Control) и ECN (Explicit Congestion Notification). - name: rdma_port_num type: int default: 1 @@ -114,26 +127,39 @@ так что менять этот параметр обычно не нужно. - name: rdma_max_msg type: int - default: 1048576 + default: 132096 info: Maximum size of a single RDMA send or receive operation in bytes. info_ru: Максимальный размер одной RDMA-операции отправки или приёма. - name: rdma_max_recv + type: int + default: 16 + info: | + Maximum number of RDMA receive buffers per connection (RDMA requires + preallocated buffers to receive data). Each buffer is `rdma_max_msg` bytes + in size. So this setting directly affects memory usage: a single Vitastor + RDMA client uses `rdma_max_recv * rdma_max_msg * OSD_COUNT` bytes of memory. + Default is roughly 2 MB * number of OSDs. + info_ru: | + Максимальное число буферов для RDMA-приёма данных на одно соединение + (RDMA требует заранее выделенных буферов для приёма данных). Каждый буфер + имеет размер `rdma_max_msg` байт. Таким образом, настройка прямо влияет на + потребление памяти - один Vitastor-клиент с RDMA использует + `rdma_max_recv * rdma_max_msg * ЧИСЛО_OSD` байт памяти, по умолчанию - + примерно 2 МБ * число OSD. +- name: rdma_max_send type: int default: 8 info: | - Maximum number of parallel RDMA receive operations. Note that this number - of receive buffers `rdma_max_msg` in size are allocated for each client, - so this setting actually affects memory usage. This is because RDMA receive - operations are (sadly) still not zero-copy in Vitastor. It may be fixed in - later versions. + Maximum number of outstanding RDMA send operations per connection. Should be + less than `rdma_max_recv` so the receiving side doesn't run out of buffers. + Doesn't affect memory usage - additional memory isn't allocated for send + operations. info_ru: | - Максимальное число параллельных RDMA-операций получения данных. Следует - иметь в виду, что данное число буферов размером `rdma_max_msg` выделяется - для каждого подключённого клиентского соединения, так что данная настройка - влияет на потребление памяти. Это так потому, что RDMA-приём данных в - Vitastor, увы, всё равно не является zero-copy, т.е. всё равно 1 раз - копирует данные в памяти. Данная особенность, возможно, будет исправлена в - более новых версиях Vitastor. + Максимальное число RDMA-операций отправки, отправляемых в очередь одного + соединения. Желательно, чтобы оно было меньше `rdma_max_recv`, чтобы + у принимающей стороны в процессе работы не заканчивались буферы на приём. + Не влияет на потребление памяти - дополнительная память на операции отправки + не выделяется. - name: peer_connect_interval type: sec min: 1 diff --git a/docs/usage/disk.en.md b/docs/usage/disk.en.md index 13e46b34..30557f9a 100644 --- a/docs/usage/disk.en.md +++ b/docs/usage/disk.en.md @@ -1,4 +1,4 @@ -[Documentation](../../README.md#documentation) → Usage → Disk Tool +[Documentation](../../README.md#documentation) → Usage → Disk management tool ----- diff --git a/docs/usage/disk.ru.md b/docs/usage/disk.ru.md index af9dc568..83a46d5e 100644 --- a/docs/usage/disk.ru.md +++ b/docs/usage/disk.ru.md @@ -1,4 +1,4 @@ -[Документация](../../README-ru.md#документация) → Использование → Управление дисками +[Документация](../../README-ru.md#документация) → Использование → Инструмент управления дисками ----- diff --git a/mon/mon.js b/mon/mon.js index 1150e584..b44200da 100644 --- a/mon/mon.js +++ b/mon/mon.js @@ -70,8 +70,8 @@ const etcd_tree = { rdma_gid_index: 0, rdma_mtu: 4096, rdma_max_sge: 128, - rdma_max_send: 64, - rdma_max_recv: 128, + rdma_max_send: 8, + rdma_max_recv: 16, rdma_max_msg: 132096, log_level: 0, block_size: 131072, diff --git a/src/messenger.cpp b/src/messenger.cpp index 6f4fa80d..0581ca83 100644 --- a/src/messenger.cpp +++ b/src/messenger.cpp @@ -157,10 +157,10 @@ void osd_messenger_t::parse_config(const json11::Json & config) this->rdma_max_sge = 128; this->rdma_max_send = config["rdma_max_send"].uint64_value(); if (!this->rdma_max_send) - this->rdma_max_send = 64; + this->rdma_max_send = 8; this->rdma_max_recv = config["rdma_max_recv"].uint64_value(); if (!this->rdma_max_recv) - this->rdma_max_recv = 128; + this->rdma_max_recv = 16; this->rdma_max_msg = config["rdma_max_msg"].uint64_value(); if (!this->rdma_max_msg || this->rdma_max_msg > 128*1024*1024) this->rdma_max_msg = 129*1024;