banner
Дом / Новости / Повышение скорости NVMe/TCP
Новости

Повышение скорости NVMe/TCP

May 22, 2023May 22, 2023

Скачать презентацию:Повышение скорости NVMe/TCP

Я Саги Гримберг. Я технический директор и сооснователь Lightbits Labs, а также соавтор спецификации стандарта NVMe over TCP.

Итак, начнем с небольшого вступления. Что такое NVMe через TCP? NVMe over TCP — это стандартная транспортная привязка, которая запускает NVMe поверх стандартных сетей TCP/IP. Он соответствует стандартной спецификации NVMe, которая определяет интерфейс очередей и интерфейс нескольких очередей, который работает поверх сокетов TCP/IP. Он имеет стандартный набор команд NVMe, но он просто инкапсулирован в то, что мы называем NVMe/TCP PDU, которое отображает потоки TCP. Итак, на этой диаграмме мы в основном имеем архитектуру NVMe, базовые архитектуры, которые определяют администрирование, ввод-вывод и другие наборы команд.

01:14 СГ: Ниже у нас есть NVMe over Fabrics, который определяет капсулы, свойства и обнаружение. А NVMe over TCP по сути определяет дополнительные функции и обмен сообщениями, а также сопоставление транспорта с самой базовой структурой, которой в нашем случае является TCP/IP.

Так как же обрабатывается очередь с помощью NVMe через TCP или как она определяется в NVMe через TCP? По сути, каждая очередь соответствует двунаправленному TCP-соединению, и передача данных по команде обычно обрабатывается выделенным контекстом, будь то программно или каким-то образом аппаратно. Итак, на диаграмме слева у нас есть хост, который имеет интерфейс очереди к самому транспорту NVMe, имеет очередь отправки и очередь завершения. Все отправки и завершения обрабатываются в том, что мы называем потоком ввода-вывода NVMe-TCP, или в некотором контексте ввода-вывода, который запускается либо от хоста, который отправляет ввод-вывод, либо из сети, обычно завершая ввод-вывод или получая данные.

02:24 СГ: Такая же картина происходит и в правой части с контроллером, и по сути, это контексты, отвечающие за передачу данных между хостом и контроллером. Таким образом, каждая из этих очередей на самом деле обычно сопоставляется с выделенными процессорами, но не обязательно, на самом деле ее может быть больше, а может быть и меньше, но дело в том, что нет сериализации на уровне контроллера, поэтому каждая очередь не зависит от общего лента с другими очередями, что делает ее чрезвычайно параллельной. И диаграмма здесь представляет собой стандартную диаграмму, которая была показана ранее о наборе очередей, у вас также есть очередь администратора, между хостом и контроллером, а затем набор очередей ввода-вывода, пары очередей, которые представляют собой очереди отправки и завершения. . В NVMe/TCP каждая из этих очередей соответствует двунаправленному TCP-соединению. Итак, если мы как бы посмотрим на задержку, у нас есть ряд таких факторов, которые могут закрасться. Прежде всего, при сериализации, но в NVMe/TCP она довольно легкая, она рассчитывается для каждой очереди, поэтому она масштабируется. довольно хорошо.

Эта статья является частью

03:43 СГ: Переключение контекста. Итак, у нас есть как минимум две копии, предоставленные самим драйвером, копия памяти, обычно антикварная, мы можем делать нулевую копию в качестве драйвера уровня ядра. Однако в RX мы выполняем копирование памяти, это не важный фактор, но при очень, очень высокой нагрузке это может способствовать дополнительной задержке. Прерывания — прерывания NIC — определенно оказывают влияние, они потребляют ресурсы ЦП и влияют на масштабируемость, которую может достичь одна очередь. У нас есть LRO и GRO, или адаптивная модерация прерываний может немного смягчить это, но тогда задержка может быть менее постоянной. Затем у нас есть накладные расходы на сокеты, они существуют, но на самом деле они невелики, они довольно быстрые, учитывая, что сокеты довольно неконкурентны в интерфейсе с несколькими очередями, но при небольшом вводе-выводе это может оказать влияние. Привязка между прерываниями, приложениями и потоками ввода-вывода определенно может повлиять, если она не настроена правильно, и мы коснемся этого подробнее. Загрязнение кэша, очевидно, происходит в результате копирования памяти, оно у нас есть, но это не является чем-то таким чрезмерным для современных процессорных ядер, которые имеют достаточно большие кэши.

05:15 СГ: