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