Прочитайте огромный файл (~ 200 ГБ) с определенным смещением, используя liburing.Linux

Ответить
Anonymous
 Прочитайте огромный файл (~ 200 ГБ) с определенным смещением, используя liburing.

Сообщение Anonymous »

Контекст: мне нужно прочитать огромный файл (~200 ГБ) со смещением, которое не кратно 512 (или размеру блока), порциями в буфер так быстро и с максимальной скоростью. максимально эффективно. Сетевое приложение использует эти данные в буфере для создания пакетов и отправки их из сетевого адаптера. Моя скорость отправки составляет > 30 Гбит/с, поэтому мне необходимо всегда иметь данные в буфере, чтобы у отправителя моего сетевого приложения никогда не заканчивались данные.
Сведения о SSD : Серия KIOXIA XG8 (M.2) с максимальной скоростью последовательного чтения 7000 ГБ/с (56 Гбит/с).
Первоначально я использовал libaio в режиме O_DIRECT и смог читать достаточно быстро (~ 50 Гбит/с), чтобы мое приложение работало. Поскольку режим O_DIRECT требует соблюдения требований к выравниванию, я ищу альтернативы. В режиме O_RDONLY я могу прочитать файл с требуемым смещением, но это очень медленно (причина может заключаться в том, что aio в режимах, отличных от O_DIRECT, больше не является асинхронным вводом-выводом. Информационный документ io_uring.
В качестве альтернативы (лучше) я использую liburing для чтения моего файла, я использую режим O_RDONLY, поскольку он позволяет читать с любым смещением. Однако скорость чтения слишком низкая.
Вот мой код:

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include "liburing.h"
#include 
#include 
#include 

int main()
{
uint64_t block_size = 1 res: 1073741824  Reading speed: 6.41963 Gbps
cqe->res: 1073741824  Reading speed: 7.44832 Gbps
cqe->res: 1073741824  Reading speed: 7.40503 Gbps
cqe->res: 1073741824  Reading speed: 7.36463 Gbps
cqe->res: 1073741824  Reading speed: 6.78501 Gbps
cqe->res: 1073741824  Reading speed: 7.10513 Gbps
cqe->res: 1073741824  Reading speed: 7.05038 Gbps
cqe->res: 1073741824  Reading speed: 6.10796 Gbps
cqe->res: 1073741824  Reading speed: 5.63116 Gbps
cqe->res: 1073741824  Reading speed: 5.54613 Gbps
.
.
.
Вот результат (со смещением = 10)

Код: Выделить всё

cqe->res: 1073741824  Reading speed: 30.1049 Gbps
cqe->res: 1073741824  Reading speed: 76.969 Gbps
cqe->res: 1073741824  Reading speed: 74.8756 Gbps
cqe->res: 1073741824  Reading speed: 76.9209 Gbps
cqe->res: 1073741824  Reading speed: 77.1421 Gbps
cqe->res: 1073741824  Reading speed: 76.0599 Gbps
cqe->res: 1073741824  Reading speed: 77.7633 Gbps
cqe->res: 1073741824  Reading speed: 77.9113 Gbps
cqe->res: 1073741824  Reading speed: 75.8365 Gbps
cqe->res: 1073741824  Reading speed: 77.1777 Gbps
cqe->res: 1073741824  Reading speed: 76.6224 Gbps
cqe->res: 1073741824  Reading speed: 77.0741 Gbps
cqe->res: 1073741824  Reading speed: 77.0687 Gbps
cqe->res: 1073741824  Reading speed: 77.3948 Gbps
cqe->res: 1073741824  Reading speed: 76.1512 Gbps
cqe->res: 1073741824  Reading speed: 77.502 Gbps
cqe->res: 1073741824  Reading speed: 77.3421 Gbps
cqe->res: 1073741824  Reading speed: 77.4055 Gbps
cqe->res: 1073741824  Reading speed: 75.9798 Gbps
cqe->res: 1073741824  Reading speed: 55.6069 Gbps
cqe->res: 1073741824  Reading speed: 5.94714 Gbps
cqe->res: 1073741824  Reading speed: 32.7055 Gbps
cqe->res: 1073741824  Reading speed: 70.8435 Gbps
cqe->res: 1073741824  Reading speed: 23.822 Gbps
cqe->res: 1073741824  Reading speed: 5.69492 Gbps
cqe->res: 1073741824  Reading speed: 6.65288 Gbps
cqe->res: 1073741824  Reading speed: 6.76708 Gbps
cqe->res: 1073741824  Reading speed: 7.91575 Gbps
cqe->res: 1073741824  Reading speed: 6.29257 Gbps
cqe->res: 1073741824  Reading speed: 6.2675 Gbps
cqe->res: 1073741824  Reading speed: 7.31762 Gbps
cqe->res: 1073741824  Reading speed: 6.35138 Gbps
cqe->res: 1073741824  Reading speed: 7.52077 Gbps
cqe->res: 1073741824  Reading speed: 7.20884 Gbps
cqe->res: 1073741824  Reading speed: 6.05534 Gbps
cqe->res: 1073741824  Reading speed: 5.80964 Gbps
cqe->res: 1073741824  Reading speed: 6.58119 Gbps
cqe->res: 1073741824  Reading speed: 8.65097 Gbps
cqe->res: 1073741824  Reading speed: 27.1533 Gbps
cqe->res: 1073741824  Reading speed: 6.76254 Gbps
cqe->res: 1073741824  Reading speed: 5.9082 Gbps
cqe->res: 1073741824  Reading speed: 7.45788 Gbps
cqe->res: 1073741824  Reading speed: 6.89272 Gbps
cqe->res: 1073741824  Reading speed: 5.76414 Gbps
cqe->res: 1073741824  Reading speed: 5.65644 Gbps
cqe->res: 1073741824  Reading speed: 7.21536 Gbps
cqe->res: 1073741824  Reading speed: 6.09685 Gbps
cqe->res: 1073741824  Reading speed: 6.44203 Gbps
cqe->res: 1073741824  Reading speed: 6.97692 Gbps
.
.
.
В случае смещения = 10, почему я вижу значения скорости чтения, превышающие максимальную скорость чтения SSD (например, 77 Гбит/с)?
Можно ли улучшить код, чтобы обеспечить «лучшую» скорость чтения? Чтобы количественно оценить «лучше», скажем, как можно ближе к максимальной скорости чтения, поддерживаемой SSD?

Подробнее здесь: https://stackoverflow.com/questions/791 ... g-liburing
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»