Здравствуйте, rip_someday, Вы писали:
_>Нужно:
_>проанализировать подходы к эффективной запись в лог-файлы
_>в том числе с использованием асинхронной записи.
_>Лично мне кажется, что замена текущей (весьма медленной и корявой) имплементации "fopen-fwrite-fclose на каждую строку"
_>на имплементацию с постоянно открытым файлом, буффером в ~64Кб и периодическим сбросом на диск вполне будет достаточно
_>(по крайней мере судя по замерам — в 30-40 раз быстрее)
Адназначна ДА! Делать окрытие файлов для записи строки в лог это УЖОС! Конечно же файлы нада держать вседа открытыми! Правда в случае fopen/fwrite/fclose делать свой буфер не есь хорошо... он уже там есть (и его размером мона поиграца еси я все прально помню из info по libc)! Собственный буфер имеет смысл при low level I/O -- open/write/close... и лучше его сделать побольше!

-- порядка 1.5М (зависит конечно от скорости заполнения буфера и того насколько страшно потерять нефлашеный лог в случае непредвиденных обстоятельств

-- но основной смысл в том что писать нада риальна МНОГО -- контроллеры винчей порой имеют кэш 8 и более М -- нет повода стеснять себя килобайтами...
_>Но для очистки совести и успокоения начальства, надо протеститровать и асинхронную работу.
давным давно (када дизайнилась одна мега прога тоже пишущая на диск гигабайтами всяких данных) я почитал про это и решил забить -- точной причины не вспомню... но тяжелый осадок от прочтения остался

-- толи там недоделано чивота, толи черезчур сложно... не помню
НО есть разхумееца другой выход!

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

-- а имена syslog демон

означеная мегапрога генерила порядка 1Г (или даже больше -- точную цыфру не вспомню -- но РИАЛЬНА ДОФИГА) зипаных логов в день -- не все сислоги такое выдерживают.. но есь один который более менее работал в подобных условиях

-- это был syslogng
твоя задача используя функцию syslog(3) писать все что тебе там хочеца в ОДИН источник -- пусь syslogовские фильтры позднее потом разбираются чо куда распихивать и как ротейтить... -- возможно даже передавать это куданить на специально выделенный сервер (как вот было у нас в кластере -- ибо спамить хотели многие демоны а лазить по куче тачек грепать ихние логи абломно)
для упрощения работы мона сделать iostreamный syslog класс -- буишь стрелочками фигачить себе в syslog и не парица
_>буду благодарен если в меня бросят ссылкой с более или менее подробной информацией по эьтому вопросу.