Могут ли функции чтения и записи векторов libaio использоваться на прямом устройстве?

Документация libaio по использованию с прямыми устройствами говорит, что смещения чтения и записи должны быть выровнены по секторам, например кратно 512 байтов для типичного SSD / HDD. Некоторая информация, доступная в Интернете, также говорит о том, что буферы пространства пользователя, используемые в качестве источника и места назначения, также должны быть выровнены.

Каковы ограничения выравнивания для функций чтения и записи вектора при использовании прямого устройства? Я предполагаю, что дисковая сторона операции по-прежнему должна быть выровнена по секторам (в конце концов, речь идет о блочном устройстве под крышками). Могут ли мои списки рассеивания собирать небольшие куски вокруг неприсоединившихся целей в пространстве пользователя?

Я работаю над Debian Jessie и проверил поддержку векторного ввода / вывода в libaio.

1

Решение

Краткий ответ, созданный путем написания некоторого тестового кода, — нет. Как сторона диска, так и сторона памяти переносов должны быть выровнены по секторам. Код ошибки, возвращаемый в событии для операций, не выровненных по секторам, равен -22 (неизвестная ошибка).

Было бы интересно, если бы это сработало. Базовое оборудование (SSD и AHCI-совместимый контроллер) способны выполнять DMA с любого четного адреса.

0

Другие решения