кеширование статики в RAM

MZ zuborg at advancedhosters.com
Mon Oct 26 20:20:43 MSK 2009


Igor Sysoev wrote:
> On Mon, Oct 26, 2009 at 01:56:52PM +0200, MZ wrote:
> 
>> Igor Sysoev wrote:
>>
>>> Да, во FreeBSD page cache не учитывает популярность страниц, отданных
>>> sendfile()ом или прочитанных с помощью read(). Популярность учитывается
>>> только при обращеннии к mmap()тым страницам. Тем не менее, какое-то
>> Насколько я понял МакКусика, для read() сначала делается что-то типа 
>> того что и для mmap() - страница загружается в память и привязывается к 
>> vnode файла.
>> Разница между read() и mmap() в том что в первом случае нужные данные 
>> после загрузки с винта в память копируются в указанные в read() 
>> анонимные страницы привязанные к процессу, а во втором - загруженная 
>> страница с данными сама биндится в адрессное пространство процесса.
> 
> Да.
> 
>> В обоих случаях при работе с данными идет обращение к странице 
>> привязанной к vnode - для read() чтоб скопировать в адрессное 
>> пространство процесса, который затем зашлет данные в сокет, и для mmap() 
>> - чтоб скопировать уже сразу в сокет.
> 
> При копировании read()ом данных в адресное пространство процесса
> используется дополнительное отображение, по которому не ведётся
> статистика обращений:
> http://lists.freebsd.org/pipermail/freebsd-current/2007-October/078034.html
> http://lists.freebsd.org/pipermail/freebsd-current/2007-October/078058.html


 > The read() from file certainly updates vnode pages' PG_A/PG_REFERENCED,
 > because coping to userland is made by CPU. I think write() does the same.

    No, it does not. The kernel virtual mappings involved in that copy
are "special"; page bits (PG_A, PG_M, etc) from those mapping are not
preserved from the PTEs (at least not on x86).

Если это правда - то мне совершенно непонятно, зачем так сделано, ведь 
это на корню губит смысл существования битов PG_A/PG_REFERENCED.


>> Не в курсе как с zero_copy, будет ли засчитываться обращение ядра к 
>> mmap-нутым страницам или нет.
>>
>> Я все правильно понял, или где-то ошибся ?
> 
> 






More information about the nginx-ru mailing list