ハッシュの設定

サーバー名、mapディレクティブの値、MIMEタイプ、リクエストヘッダー文字列の名称など、静的なデータセットを迅速に処理するために、nginxではハッシュテーブルが使用されます。 起動時および再構成のたびに、nginxはバケットサイズ(ハッシュ値が同じキーを格納)が構成パラメータ(ハッシュバケットサイズ)を超えないように、可能な限り最小のハッシュテーブルのサイズを選択します。 テーブルのサイズはバケットで表されます。 調整はテーブルサイズがハッシュの最大サイズパラメータを超えるまで続行されます。 ほとんどのハッシュにはこれらのパラメータを変更できる対応するディレクティブがあり、例えば、サーバー名のハッシュの場合、server_names_hash_max_sizeserver_names_hash_bucket_sizeです。

ハッシュバケットサイズの構成パラメータは、プロセッサのキャッシュラインサイズの倍数であるサイズに合わせます。 これにより、最新のプロセッサ上でハッシュ内のキー検索の速度が向上し、メモリアクセスの回数が削減されます。 ハッシュバケットのサイズがプロセッサ1つのキャッシュラインのサイズと同じであれば、キーの検索中にメモリアクセスの回数は最悪の場合、2回(最初にバケットのアドレスを計算し、次にバケット内でキーを検索する)だけになります。 したがって、nginxがハッシュの最大サイズまたはハッシュのバケットサイズを増加するよう要求するメッセージを発行する場合、最初に先頭のパラメータが増加される必要があります。