Ассинхронный вывод в лог
От: rip_someday Украина  
Дата: 18.04.06 13:18
Оценка:
В общем стоит передо мной такая задача

Дано:

однопоточный программный продукт весьма активной сетевой работой
работает через обертку вокруг epoll
программа ресурсоемкая и в то же время в больших объемах пишет лог файлы в формате CSV (несколько штук)
то есть размер буффера для единичной операции записи — строка 200-250 байт
таргет платформа — linux Fedora Core 4

Нужно:

проанализировать подходы к эффективной запись в лог-файлы
в том числе с использованием асинхронной записи.
Лично мне кажется, что замена текущей (весьма медленной и корявой) имплементации "fopen-fwrite-fclose на каждую строку"
на имплементацию с постоянно открытым файлом, буффером в ~64Кб и периодическим сбросом на диск вполне будет достаточно
(по крайней мере судя по замерам — в 30-40 раз быстрее)
Но для очистки совести и успокоения начальства, надо протеститровать и асинхронную работу.

Собственно возникают вопросы:
1. каким образом это можно (нужно) организовать?
2. нашел упоминание о поддержке aio на уровне ядра в ядрах 2.6.х, но к сожалению не нашел вразумительной информации об этом. Работает ли это вообще? какие есть подводные камни?
3. можно ли это сделать как-то иначе?

буду благодарен если в меня бросят ссылкой с более или менее подробной информацией по эьтому вопросу.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.