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