Setting sysctl values
=====================

デフォルトでは、TPAはターゲットインスタンスにさまざまなsysctl値を設定し、それらを\ ``/etc/sysctl.conf``
に含めて、リブート後も持続するようにします。

オプションで\ ``sysctl_values`` に独自の値を指定できます。

.. code:: yaml

   cluster_vars:
     sysctl_values:
       kernel.core_pattern: core.%e.%p.%t
       vm.dirty_bytes: 4294967296
       vm.zone_reclaim_mode: 0

指定した値は、その変数のTPAのデフォルト値がある場合より優先されます。設定は最初に\ ``sysctl.conf``
行ごとに追加され、最後に\ ``sysctl -p`` でロードされます。

Dockerおよびlxdインスタンスはsysctlの設定をサポートしていないため、TPAはこれらのプラットフォームでこの手順を完全にスキップします。

Hugepages
---------

デフォルトでは、TPAはPostgresが\ ``shared_buffers``
に使用するアーキテクチャのデフォルトサイズx86_64で2MBのhugeページを予約します。これは、
``hugepages=N`` をカーネルコマンドラインに追加し、
``vm.nr_hugepages = N`` から\ ``/etc/sysctl.conf``
に書き込むことにより実行されます。

Postgresでより大きなヒュージページサイズ通常x86_64で1GBを使用したい場合は、
``huge_page_size`` をPostgresスタイルのメモリ文字列に設定します。

.. code:: yaml

   instances:
     - Name: primary
       vars:
         huge_page_size: 1GB

``huge_page_size`` が設定されている場合、TPAは次のことを行います。

- カーネルコマンドラインでそのサイズのページを予約します。例\ ``hugepagesz=1G hugepages=N``
  ;

- ``/etc/sysctl.conf`` から\ ``vm.nr_hugepages``
  を省略しますそのsysctlはアーキテクチャのデフォルトサイズのプールにのみ適用され、他のサイズにはサイレントに無効です。そして

- Postgresが選択したプールからのページを使用するように、
  ``postgresql.conf`` で\ ``huge_page_size`` GUCを設定します。

``cluster_vars``
ではなく、個々のPostgresインスタンスで\ ``huge_page_size``
を設定するのがほとんどの場合、正しいです。カーネルコマンドラインで行われた予約は、ブート時に通常のメモリから取得されるため、同じクラスター内のBarmanサーバーまたは他の非PostgresインスタンスはPostgresノードと同じ割り当てが必要です。

デフォルトでは、TPAは\ ``shared_buffers``
プラス合計RAMの3%を巨大ページサイズで割ったものとして、予約する巨大ページ数を計算します。
``nr_hugepages``
を直接設定することにより、この計算をオーバーライドできます。

.. code:: yaml

   instances:
     - Name: primary
       vars:
         huge_page_size: 1GB
         nr_hugepages: 16

..  Note::
   下位互換性のため、 `nr_hugepages` が明示的に設定されていない場合、既存の`sysctl_values['vm.nr_hugepages']` がページ数として受け入れられます。

.. ::
   .. ::
   すでにデプロイされたインスタンスのカーネルコマンドラインの更新は、TPAのスコープ外であることに注意してください。最初のデプロイ後に`huge_page_size` または`nr_hugepages` を変更しても、既存のGRUB構成は上書きされません。手動で編集し、リブートして変更を適用します。

.. ::
   ## 透明なhugepage

デフォルトでは、TPAはカーネルコマンドラインでtransparent_hugepageを「never」に設定し、スクリプト\ ``/etc/tpa/rc.local``
をインストールして、\ ``sys``
ファイルシステムを介してブート時に設定します。別の設定を使用するには、インスタンス\ ``vars``
または\ ``cluster_vars`` で\ ``transparent_hugepage`` を\ ``always``
または\ ``madvise`` に設定して、すべてのインスタンスを制御します。
