Setting sysctl values

目次

Setting sysctl values#

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

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

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スタイルのメモリ文字列に設定します。

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 を直接設定することにより、この計算をオーバーライドできます。

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

注釈

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

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