12.3.2. systemd サービスユニットを使用した HugeTLB を設定
ユーザー空間の起動時に Huge Translation Lookaside Buffer (HugeTLB) ページを設定するには、systemd サービスユニットを使用します。これにより、カーネルの初期化後、ほとんどのサービスが起動する前にメモリーを予約し、アプリケーションが必要なページにアクセスできるようにします。
前提条件
- システムの root 特権がある。
手順
/usr/lib/systemd/system/ディレクトリーにhugetlb-gigantic-pages.serviceという新しいファイルを作成し、以下の内容を追加します。[Unit] Description=HugeTLB Gigantic Pages Reservation DefaultDependencies=no Before=dev-hugepages.mount ConditionPathExists=/sys/devices/system/node ConditionKernelCommandLine=hugepagesz=1G [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/lib/systemd/hugetlb-reserve-pages.sh [Install] WantedBy=sysinit.target/usr/lib/systemd/ディレクトリーにhugetlb-reserve-pages.shという新しいファイルを作成し、以下の内容を追加します。#!/bin/sh nodes_path=/sys/devices/system/node/ if [ ! -d $nodes_path ]; then echo "ERROR: $nodes_path does not exist" exit 1 fi reserve_pages() { echo $1 > $nodes_path/$2/hugepages/hugepages-1048576kB/nr_hugepages } reserve_pages <number_of_pages> <node><number_of_pages>は、予約する 1 GB ページの数に置き換えます。<node>は、これらのページを予約するノード名に置き換えます。たとえば、node0に 2 つの 1 GB ページを予約し、node1に 1 つの 1 GB ページを予約するには、<number_of_pages>を、node0の場合は2に、node1の場合は1に置き換えます。実行可能なスクリプトを作成します。
# chmod +x /usr/lib/systemd/hugetlb-reserve-pages.sh起動の早い段階での予約を有効にします。
# systemctl enable hugetlb-gigantic-pages.service注記-
任意のタイミングで
nr_hugepages属性に書き込むことで、実行時に追加の 1 GB のページを予約することを試みることができます。ただし、メモリーの断片化による失敗を防ぐために、起動プロセスの早い段階で 1 GB のページを予約してください。 - 静的 huge page を予約すると、システムが使用できるメモリーの量を効果的に削減し、システムがメモリー容量をすべて使用するのを防止できます。予約済み huge page のプールのサイズが適切に設定されていると、それを使用するアプリケーションにメリットがあります。しかし、予約済み huge page のプールが大きすぎる場合や使用されていない場合、最終的にシステム全体のパフォーマンスに悪影響が発生します。予約済み huge page プールを設定するときは、システムがメモリー全容量を適切に使用できることを確認してください。
-
任意のタイミングで