Re: количество и размер бакетов
Maxim Dounin
mdounin на mdounin.ru
Чт Янв 16 12:24:41 UTC 2020
Hello!
On Thu, Jan 16, 2020 at 03:00:31PM +0300, Михаил Монашёв wrote:
> > То есть если мы не смогли построить хэш в рамках заданных
> > ограничений на максимальное количество бакетов (max size) и размер
> > одного бакета (bucket size), то мы построим хэш с максимально
> > разрешённым количеством бакетов, игнорируя ограничене на размер
> > одного бакета.
>
> Понятно, т.е. эти настройки фактически про экономию оперативки...
Нет. Эти настройки - про скорость работы. В идеале - один бакет
должен помещаться в cache line процессора, а бакетов - должно быть
минимальное количество, чтобы их адресация также не занимала
больших объёмов памяти и легко влезала в кэш процессора. Про это
есть статья тут:
http://nginx.org/ru/docs/hash.html
> А где описано максимально разрешённое количество?
Размер одного бакета ограничен значением 64k, так как для
отслеживания размеров бакета в процессе построения хеша
используется тип short. Ограничение на максимального количество
бакетов можно поставить любое.
> Это оно http://hg.nginx.org/nginx/file/tip/src/core/ngx_hash.h#l68 ?
> #define NGX_HASH_LARGE_ASIZE 16384
> #define NGX_HASH_LARGE_HSIZE 10007
Нет, это константы, используемые при выделении различных
внутренних структур для хэшей большого размера. Они ни коим
образом ничего не ограничивают.
--
Maxim Dounin
http://mdounin.ru/
Подробная информация о списке рассылки nginx-ru