Можно ли написать файл, который не имеет кратного размера страницы с Libaio?Linux

Ответить
Anonymous
 Можно ли написать файл, который не имеет кратного размера страницы с Libaio?

Сообщение Anonymous »

Я занимаюсь большим вводом/выводом на куче SSD и обнаружил, что могу получить необходимую производительность, используя Async Read/Write с Libaio (io_uring мне не доступен). Проблема в том, что мне иногда нужно делать записи, которые не являются кратными размера страницы, а также добавляют к файлам, которые уже не растут размером блока. < /P>
Есть ли хорошая стратегия здесь? Вот некоторые вещи, о которых я думал, которые не звучат великолепно. Старые и новые данные. Затем в конце я смог подать последний блок, а затем усечь файл до желаемого размера, когда закончу. Я немного неохотно делаю это, так как ошибка в моем коде испортит конец существующего файла. тот же файл? Я мог бы написать первый неполный блок и последний неполный блок с не O_Direct FD и сделать большую среднюю с асинхронным IO. Тогда fsync? Я не уверен, что это хорошая идея. < /P>
Есть лучшие варианты? -Поджание размера данных с использованием нативного AIO:
https://wandbox.org/permlink/rz0zyuycy0xfpao0
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

template class ScopeExit {
public:
explicit ScopeExit(FuncT&& fn) : f(std::forward(fn)) {}

~ScopeExit() { f(); }

ScopeExit(const ScopeExit&) = delete;
ScopeExit& operator=(const ScopeExit&) = delete;
ScopeExit(ScopeExit&&) = delete;
ScopeExit& operator=(ScopeExit&&) = delete;

private:
FuncT f;
};
template ScopeExit(F&&) -> ScopeExit;

template long checked_syscall(long syscall_number, Args... args) {
long ret = syscall(syscall_number, args...);
if (ret < 0) {
auto error = errno;
std::cerr

Подробнее здесь: https://stackoverflow.com/questions/794 ... ith-libaio
Ответить

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

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

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

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

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