Re[2]: Проблемы с загрузкой кэша

Михаил Монашёв postmaster на softsearch.ru
Чт Дек 24 00:50:58 MSK 2009


Здравствуйте, Игорь.

>> >>> Вопрос, почему они так долго считываются? Или cache loader
>> >>> ещё и в сами файлы заглядывает?  
>> >>>       
>> > GK> Наверное должен заглянуть :-(  так как там можно узнат время жизни
>> > GK> объэкта и его актуальность.
>> >
>> > GK> Было бы здорово если бы эту инфу nginx сохранял в метаданных файла ,
>> > GK> например во времени узменения файла указывать время в будущем до
>> > GK> которого этот объект живой.
>> >
>> > GK> Хотя возможно я не прав ....
>> >
>> > Посмотрел содержимо закэшированного файла. Там кроме всего ответа
>> > сохраняется ещё много всего, что не сумеешь запихнуть в mtime. 
>> >   
>> Вот цитата (Игорь Сысоев):
>> ---------
>> 
>> Загрузка всего кэша нужна для того, чтобы удалить
>> неиспользуемые данные после рестарта
>> и чтобы поддерживать размер кэша, если задано ограничение.
>> -------
>> 
>> размер кэша -> size
>> неиспользуемые данные -> mtime 
>> 
>> 
>> что ещо нужно этому менеджеру ?

IS> Там  ещё  подгружается  размер  заголовка кэша, но в принципе, эта
IS> информация  не  так  важна.  Наверное, имеет смысл подумать в этом
IS> направлении,  хотя один минус виден сразу: при операции обновления
IS> кэша нужен будет ещё один сисколл - utimes().

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

Например  можно  сделать  так:  храним  atime  запрошенных  файлов   в
шаред-меме  и раз в 5 минут обновляем у запрошенных файлов atime (т.е.
Cache  manager  пишет  в  4096 директории). Если рестартуем, то данные
теряем,  они  не  критичны.  Cache  manager  после каждой такой записи
читает  эти 4096 директорий, сортирует файлы по atime и удаляет файлы,
если  нужно.  Т.е.  оперативка расходуется не на весь кэш, а только на
то, что запрашивалось за последние несколько минут.

Производительность  можно  увеличить,  если  levels  1:1  -  всего 256
директорий.  И  все они будут кэше. Правда вот запись на диск всёравно
будет  и возможно она будет сравнима с количеством файлов, пополняющих
кэш.

Размер  заголовка,  если он реально нужен, можно хранить как разницу в
секундах между mtime и ctime.

P.S.
Хорошо бы ещё доработать LRU так, чтобы он учитывал размер файлов. Ибо
при  прочих  равных  лучше оставить в кэше 10 мелких файлов и выкинуть
один большой, чем наоборот.

--

С уважением,
Михаил Монашёв, SoftSearch.ru
mailto:postmaster at softsearch.ru
ICQ# 166233339
http://michael.mindmix.ru/
Без бэкапа по жизни.




Подробная информация о списке рассылки nginx-ru