diff --git a/docs/intro/features.en.md b/docs/intro/features.en.md index be25acae..cdb63c6e 100644 --- a/docs/intro/features.en.md +++ b/docs/intro/features.en.md @@ -36,6 +36,7 @@ - [Clustered file system](../usage/nfs.en.md#vitastorfs) - [Experimental internal etcd replacement - antietcd](../config/monitor.en.md#use_antietcd) - [Built-in Prometheus metric exporter](../config/monitor.en.md#enable_prometheus) +- [NFS RDMA support](../usage/nfs.en.md#rdma) (probably also usable for GPUDirect) ## Plugins and tools diff --git a/docs/intro/features.ru.md b/docs/intro/features.ru.md index 021fbeb0..2c85e6a4 100644 --- a/docs/intro/features.ru.md +++ b/docs/intro/features.ru.md @@ -38,6 +38,7 @@ - [Кластерная файловая система](../usage/nfs.ru.md#vitastorfs) - [Экспериментальная встроенная замена etcd - antietcd](../config/monitor.ru.md#use_antietcd) - [Встроенный Prometheus-экспортер метрик](../config/monitor.ru.md#enable_prometheus) +- [Поддержка NFS RDMA](../usage/nfs.ru.md#rdma) (вероятно, также подходящая для GPUDirect) ## Драйверы и инструменты diff --git a/docs/usage/nfs.en.md b/docs/usage/nfs.en.md index 2616b374..fbe9ce08 100644 --- a/docs/usage/nfs.en.md +++ b/docs/usage/nfs.en.md @@ -111,6 +111,21 @@ settings, because Vitastor NFS proxy doesn't keep uncommitted data in memory with these settings. But it may even work without `immediate_commit=all` because the Linux NFS client repeats all uncommitted writes if it loses the connection. +## RDMA + +vitastor-nfs supports NFS over RDMA, which, in theory, should also allow to use +VitastorFS from GPUDirect. + +You can test NFS-RDMA even if you don't have an RDMA NIC using SoftROCE: + +1. First, add SoftROCE device on both servers: `rdma link add rxe0 type rxe netdev eth0`. + Here, `rdma` utility is a part the iproute2 package, and `eth0` should be replaced with + the name of your Ethernet NIC. + +2. Start vitastor-nfs with RDMA: `vitastor-nfs start (--fs | --block) --pool --port 20049 --nfs_rdma 20049 --portmap 0` + +3. Mount the FS: `mount 192.168.0.10:/mnt/test/ /mnt/vita/ -o port=20049,mountport=20049,nfsvers=3,soft,nolock,rdma` + ## Commands ### mount @@ -131,11 +146,16 @@ The server will be automatically stopped when the FS is unmounted. Start network NFS server. Options: -| | | -|-----------------|------------------------------------------------------------| -| `--bind ` | bind service to \ address (default 0.0.0.0) | -| `--port ` | use port \ for NFS services (default is 2049) | -| `--portmap 0` | do not listen on port 111 (portmap/rpcbind, requires root) | +| | | +|------------------------|-----------------------------------------------------------------------------------------------------------------------------| +| `--bind ` | bind service to \ address (default 0.0.0.0) | +| `--port ` | use port \ for NFS services (default is 2049). Specify "auto" to auto-select and print port | +| `--portmap 0` | do not listen on port 111 (portmap/rpcbind, requires root) | +| `--nfs_rdma ` | enable NFS-RDMA at RDMA-CM port \ (you can try 20049). If RDMA is enabled and --port is set to 0, TCP will be disabled | +| `--nfs_rdma_credit 16` | maximum operation credit for RDMA clients (max iodepth) | +| `--nfs_rdma_send 1024` | maximum RDMA send operation count (should be larger than iodepth) | +| `--nfs_rdma_alloc 1M` | RDMA memory allocation rounding | +| `--nfs_rdma_gc 64M` | maximum unused RDMA buffers | ### upgrade diff --git a/docs/usage/nfs.ru.md b/docs/usage/nfs.ru.md index 01a6ef16..5f3b65f6 100644 --- a/docs/usage/nfs.ru.md +++ b/docs/usage/nfs.ru.md @@ -116,6 +116,21 @@ JSON-формате :-). Для инспекции содержимого БД даже без `immediate_commit=all`, потому что NFS-клиент ядра Linux повторяет все незафиксированные запросы при потере соединения. +## RDMA + +vitastor-nfs поддерживает NFS через RDMA. В теории это также должно позволять использовать +VitastorFS из GPUDirect. + +Вы можете протестировать NFS-RDMA, даже если у вас нет RDMA-карты, с помощью SoftROCE: + +1. Сначала создайте SoftROCE устройства на обоих тестовых серверах: `rdma link add rxe0 type rxe netdev eth0`. + Утилита `rdma` входит в состав пакета iproute2, а `eth0` вам нужно заменить на имя своей + сетевой карты. + +2. Запустите vitastor-nfs с RDMA: `vitastor-nfs start (--fs | --block) --pool --port 20049 --nfs_rdma 20049 --portmap 0` + +3. Смонтируйте ФС: `mount 192.168.0.10:/mnt/test/ /mnt/vita/ -o port=20049,mountport=20049,nfsvers=3,soft,nolock,rdma` + ## Команды ### mount @@ -136,11 +151,16 @@ JSON-формате :-). Для инспекции содержимого БД Запустить сетевой NFS-сервер. Опции: -| | | -|-----------------|-----------------------------------------------------------------------| -| `--bind ` | принимать соединения по адресу \ (по умолчанию 0.0.0.0 - на всех) | -| `--port ` | использовать порт \ для NFS-сервисов (по умолчанию 2049) | -| `--portmap 0` | отключить сервис portmap/rpcbind на порту 111 (по умолчанию включён и требует root привилегий) | +| | | +|------------------------|-----------------------------------------------------------------------------------------------------------------------------| +| `--bind ` | принимать соединения по адресу \ (по умолчанию 0.0.0.0 - на всех) | +| `--port ` | использовать порт \ для NFS-сервисов (по умолчанию 2049). Укажите "auto", чтобы выбрать и напечатать случайный порт | +| `--portmap 0` | отключить сервис portmap/rpcbind на порту 111 (по умолчанию включён и требует root привилегий) | +| `--nfs_rdma ` | включить NFS-RDMA на порту RDMA-CM \ (попробуйте 20049). Если RDMA включено и указано `--port 0`, TCP будет отключено | +| `--nfs_rdma_credit 16` | максимальный "кредит", глубина очереди для NFS-клиентов | +| `--nfs_rdma_send 1024` | максимальное число операций RDMA отправки (должно быть больше nfs_rdma_credit) | +| `--nfs_rdma_alloc 1M` | округление выделения памяти для RDMA-клиентов | +| `--nfs_rdma_gc 64M` | максимальный объём неиспользуемой памяти RDMA-клиентом перед освобождением | ### upgrade