Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: TMPFS and nginx
On Sun, Oct 10, 2010 at 12:45:15PM +0800, Alexander Petrovsky wrote:
> >
> > Что касается размещения кэша в md/tmpfs - это имеет смысл, только если
> > в кэш делается много записей (а не чтений). В противном случае это
> > просто разбазаривание памяти.
>
>
> Игорь, объясните пожалуйста, почему при преобладании чтения из tmpfs это
> разбазаривание памяти? Правильно ли я понимаю, что после первого обращения к
> файлу хранящегося на диске, он так же кэшируется в память средствами FreeBSD
> и попадает в active bucket? Выходит что tmpfs дает профит, только при первом
> обращении к файлу, при дальнейших обращениях к файлу, скорость его получения
> примерно одинакова, правильно ли я понимаю?
Самым оптимальным методом с точки зрения расхода памяти является sendfile:
после того, как страницы файла прочитаны в vnode cache, их единственная
копия используется для отдачи всем клентам. Чтение без использования
sendfile'а - read(), aio_read() - как правило, читает файл в vnode cache
(есть исключения), копирует данные в пространство процесса, потом этот
процесс копирует данные в mbufs/clusters в ядро для передачи клиенту.
Например, есть популярный 12K файл (три 4К страницы), его запрашивают
одновременно 1000 клиентов. В какой момент времени будет какое-то количство
копий этого файла в памяти пользовательского процесса, какое-то количество
в буферах TCP/IP стэка (mbufs/clusters), какое-то и там, и там. То есть,
вместо единственной копии 12К, мы имеем минимум 12К * 1000, 12M.
Текущее состояние tmpfs/md во FreeBSD:
tmpfs:
*) read()/aio_read() читает сразу из tmpfs без копирования в vnode cache.
*) sendfile копирует битые данные в vnode cache:
http://www.freebsd.org/cgi/query-pr.cgi?pr=127213
исправлено в 8.1-STABLE в конце сентября
*) данные, скопированные sendfile'ом в vnode cache, не кэшировались там:
http://www.freebsd.org/cgi/query-pr.cgi?pr=141305
исправлено в 8.1-STABLE в конце сентября
md:
read()/aio_rea()/sendfile() копируют данные в vnode cache, удваивая
объём памяти для активно используемых данных.
--
Игорь Сысоев
http://sysoev.ru
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru
|