Как быстро записать буфер неопределенного размера на NVMe SSD - PullRequest
0 голосов
/ 27 марта 2019

Я занимаюсь разработкой приложения, в котором у меня есть большие данные, которые постоянно записываются в оперативную память, и я пытаюсь быстро прочитать данные из оперативной памяти и записать их в твердотельный накопитель NVMe, после завершения записи я снова ставлю в очередь оперативную память. пространство, чтобы это было написано.

Моя текущая проблема заключается в том, что данные записываются непрерывно в течение неопределенного времени, поэтому, в конечном итоге, объем моей ОЗУ становится недостаточным для размещения всех данных, его необходимо считывать и хранить на диске. Из-за размера данных критерии скорости записи высоки (1,5 Г / с).

Я часто вижу упоминание mmap для повышения эффективности ввода-вывода, но в основном это эффективность чтения, поскольку она предотвращает копирование больших данных в DRAM. Поэтому мне интересно в моем случае использования: выгодно ли использовать mmap для непосредственного сопоставления моего SSD как виртуальной памяти и прямой записи в него быстрее, чем в стандартном fwrite?

1 Ответ

2 голосов
/ 15 апреля 2019

Проблема с mmap для записи состоит в том, что вы не знаете, когда запись завершена или даже запущена, это может увеличить число операций записи, которые диск должен выполнить в LBA, поскольку память была записана, но не завершена4 КБ, запись была произведена на диск, а затем данные были снова записаны в память, и теперь страница должна быть записана снова.

Если вы хотите просто, лучше всего использовать файл O_DIRECT ииспользуйте системный вызов записи или AIO.Если вам нужна наилучшая скорость, вы можете использовать SPDK для получения необработанного доступа к устройству NVMe без вмешательства ядра и записи с нулевым копированием.

SPDK - это драйвер для устройств NVMe, полностью в пользовательском пространстве.Это означает, что вы используете драйвер ядра для сопоставления PCIe BAR с пользовательским пространством, говорите SPDK подключиться к устройству NVMe, и теперь вы можете выдавать необработанные команды NVMe на устройство без какой-либо копии.Большим преимуществом по сравнению с простым mmap является то, что у вас есть полный контроль над тем, какие операции ввода-вывода выполняются, в каком порядке и сколько команд одновременно выполняются и их размеры.Это означает больше работы для приложения, но это действительно дает вам полный контроль и лучшую производительность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...