Implement io_uring zero-copy send support
This commit is contained in:
@@ -34,6 +34,7 @@
|
||||
- [etcd_ws_keepalive_interval](#etcd_ws_keepalive_interval)
|
||||
- [etcd_min_reload_interval](#etcd_min_reload_interval)
|
||||
- [tcp_header_buffer_size](#tcp_header_buffer_size)
|
||||
- [min_zerocopy_send_size](#min_zerocopy_send_size)
|
||||
- [use_sync_send_recv](#use_sync_send_recv)
|
||||
|
||||
## osd_network
|
||||
@@ -321,6 +322,34 @@ Vitastor содержат 128-байтные заголовки, за котор
|
||||
поменять этот параметр и посмотреть, как он влияет на производительность
|
||||
случайного и линейного доступа.
|
||||
|
||||
## min_zerocopy_send_size
|
||||
|
||||
- Тип: целое число
|
||||
- Значение по умолчанию: 32768
|
||||
|
||||
OSD и клиенты будут пробовать использовать TCP-отправку без копирования (zero-copy) на
|
||||
основе io_uring для буферов, больших, чем это число байт. Отправка без копирования
|
||||
поддерживается в io_uring, начиная с версии ядра Linux 6.1. Наличие поддержки
|
||||
проверяется автоматически и zero-copy отключается, когда поддержки нет. Также
|
||||
её можно отключить явно, установив данный параметр в отрицательное значение.
|
||||
|
||||
⚠️ Внимание! Производительность данной функции может сильно отличаться на разных
|
||||
процессорах и на разных версиях ядра Linux. В целом, zero-copy обычно быстрее с
|
||||
большими сообщениями, а с мелкими (например, 4 КБ) zero-copy может быть даже
|
||||
медленнее. 32 КБ достаточно почти для всех процессоров, но для каких-то можно
|
||||
использовать даже меньшие значения. Например, для EPYC Milan/Genoa подходит 4 КБ,
|
||||
а для Xeon Ice Lake - 12 КБ (но, пожалуйста, перепроверьте это сами).
|
||||
|
||||
Инструкция по проверке:
|
||||
1. Добавьте `iommu=pt` в командную строку загрузки вашего ядра Linux и перезагрузитесь.
|
||||
2. Обновите ядро. Например, для AMD EPYC очень важно использовать версию 6.11+.
|
||||
3. Позапускайте тесты с помощью [send-zerocopy из примеров liburing](https://github.com/axboe/liburing/blob/master/examples/send-zerocopy.c),
|
||||
чтобы найти минимальный размер сообщения, для которого zero-copy отправка оптимальна.
|
||||
Запускайте `./send-zerocopy tcp -4 -R` на стороне сервера и
|
||||
`time ./send-zerocopy tcp -4 -b 0 -s РАЗМЕР_БУФЕРА -D АДРЕС_СЕРВЕРА` на стороне клиента
|
||||
с опцией `-z 0` (обычная отправка) и `-z 1` (отправка без копирования), и сравнивайте
|
||||
скорость в МБ/с и занятое процессорное время (user+system).
|
||||
|
||||
## use_sync_send_recv
|
||||
|
||||
- Тип: булево (да/нет)
|
||||
|
||||
Reference in New Issue
Block a user