view xml/en/docs/hash.xml @ 2634:0722b485010c

Improved wording in the thread_pool directive description.
author Maxim Dounin <mdounin@mdounin.ru>
date Tue, 08 Dec 2020 16:01:39 +0300
parents ac131944d349
children
line wrap: on
line source

<!--
  Copyright (C) Igor Sysoev
  Copyright (C) Nginx, Inc.
  -->

<!DOCTYPE article SYSTEM "../../../dtd/article.dtd">

<article name="Setting up hashes"
         link="/en/docs/hash.html"
         lang="en"
         rev="1">

<section>

<para>
To quickly process static sets of data such as server names,
<link doc="http/ngx_http_map_module.xml" id="map"/> directive’s values,
MIME types, names of request header strings,
nginx uses hash tables.
During the start and each re-configuration nginx selects the
minimum possible sizes of hash tables such that the bucket size
that stores keys with identical hash values does not exceed the
configured parameter (hash bucket size).
The size of a table is expressed in buckets.
The adjustment is continued until the table size exceeds the
hash max size parameter.
Most hashes have the corresponding directives that allow changing
these parameters, for example, for the server names hash they are
<link doc="http/ngx_http_core_module.xml" id="server_names_hash_max_size"/>
and <link doc="http/ngx_http_core_module.xml" id="server_names_hash_bucket_size"/>.
</para>

<para>
The hash bucket size parameter is aligned to the size that is a
multiple of the processor’s cache line size.  This speeds up
key search in a hash on modern processors by reducing the number
of memory accesses.
If hash bucket size is equal to one processor’s cache line size
then the number of memory accesses during the key search will be
two in the worst case&mdash;first to compute the bucket address,
and second during the key search inside the bucket.
Therefore, if nginx emits the message requesting to increase
either hash max size or hash bucket size then the first parameter
should first be increased.
</para>

</section>

</article>