aio_write на linux с rtkaio иногда длинный - PullRequest
3 голосов
/ 19 ноября 2009

Я использую async io на linux с библиотекой rtkaio. В моих тестах все работает отлично, но в моем реальном приложении я вижу, что aio_write, который должен возвращаться очень быстро, очень медленный. Для записи 128 КБ в заполненный файл O_DIRECT может потребоваться более 100 миллионов. И мой тест, и приложение используют один и тот же размер ввода-вывода, я проверяю в одной файловой системе (GFS).

Я добавил подсчет и вижу, что около 50% асинхронных операций являются короткими (короче 2 мили) и 50% длинными (длиннее 2 мили).

Я также проверил, что тест и приложение используют одну и ту же библиотеку rtkaio.

Я довольно растерян, у кого-нибудь есть идеи, где мне искать?

Другой мой связанный вопрос: / proc / sys / fs / aio-nr никогда не превышает 1024 (AIO в Linux)

Ответы [ 2 ]

1 голос
/ 19 ноября 2009

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

Полагаю, вам следует начать с попытки определить, является ли медленная реальная запись или же вызов асинхронного обработчика обратного вызова занимает много времени. Вы можете попробовать заменить вызовы на aio_write обычными синхронными вызовами с записью. Кроме того, размеры записи, которые вы упоминаете, кажутся довольно маленькими, так почему вы используете O_DIRECT? Я думаю, что O_DIRECT уменьшит производительность, если будет много мелких записей.

0 голосов
/ 20 ноября 2009

Вы открываете файл с open()?

Убедитесь, что вы открываете файл с помощью O_NONBLOCK, и вы открываете с помощью O_WRONLY.

...