VEOS Partial Process Swapping リファレンス Date:2023/6 この文書は VEOS version 3.1.0 以降についての情報を記載しています。 1 はじめに Partial Process Swapping機能(PPS)は停止状態のVEプロセスのメモリの一時解放と 復元機能を提供します。 VE上で実行中の1つ以上のプログラムを一時停止させ、停止しているVEプロセスの メモリの 一部をVH側のメモリまたはファイルに退避(swap out) させることで、VE メモリを解放します。別のプログラムはこの解放されたVEメモリを利用することが 可能になります。新たに実行したプログラム終了後、スワップ領域に退避したメモリ をVEメモリ上に復元(swap in)し、元のプログラムの実行が再開されます。 1.1 用語定義 この章では、この文書で使用する用語を定義します。 1) スワップ領域: VEプロセスのメモリが保存されるVH側のメモリまたはファイル 2) swap out:VEプロセスのメモリの一部をスワップ領域に保存し、VE メモリを解放 することです。 3) swap in:スワップ領域に保存したメモリをVEメモリ上に復元し、プログラムの実行 が再開可能になることです。 4) ステータス:VEプロセスの実行状態を示します。状態は「ps」コマンドと同じ記号 で表示されます。 5) サブステータス:VEプロセスの状態を表示するものです。 swap out/swap in処理の進行状況を示すため、PPSの独自定義です。 各サブステータスの定義は下記の通りです。 a swap out されていない, 従来の停止状態と同等 o swap out 進行中 s swap out 済み i swap in 進行中 6) PPSモード:スワップ領域によって3つのモードを定義します。 memory mode:スワップ領域はVHメモリ file mode:スワップ領域はファイル mix mode:スワップ領域はVHメモリとファイル 2 設定 この章では、Partial process swapping 機能を利用するために必要な設定について説 明します。 2.1 veswap.options の設定 1) veswap.optionsの場所 全VEノードで共通の値を設定する場合、 /etc/opt/nec/ve/veos/ve-os-launcher.d/veswap.options 各VEノードを個別に設定する場合、 /etc/opt/nec/ve/veos/ve-os-launcher.d//veswap.options は VE ノード番号 いずれかの方法で設定することをお勧めします。 2) veswap.optionsの内容 VE ノード当たりのスワップ可能な VE メモリの最大サイズと、スワップファイルの 絶対パス、所有者、グループを指定できます。 file mode 時、VH のホスト名と VE ノード番号がファイルパスに付加されます。 スワップファイルの所有者を指定しない場合、所有者は「root」になります。 スワップファイルのグループを指定しない場合、グループは「root」になります。 スワップファイルの所有者を指定した場合はファイルパスのディレクトリに指定した ユーザの書き込み権が必要です。 [memory mode] ve-os-launcher@*=--ve-swap-mem-max=<サイズ(MB単位)> を設定します。 [file mode] ve-os-launcher@*=--ve-swap-file-path=<スワップファイルの絶対パス> ve-os-launcher@*=--ve-swap-file-max=<サイズ(MB単位)> ve-os-launcher@*=--ve-swap-file-user=<ユーザ名> ve-os-launcher@*=--ve-swap-file-group=<グループ名> を設定します。 [mix mode] ve-os-launcher@*=--ve-swap-mem-max=<サイズ(MB単位)> ve-os-launcher@*=--ve-swap-file-path=<スワップファイルの絶対パス> ve-os-launcher@*=--ve-swap-file-max=<サイズ(MB単位)> ve-os-launcher@*=--ve-swap-file-user=<ユーザ名> ve-os-launcher@*=--ve-swap-file-group=<グループ名> を設定します。 注意:共通の設定/etc/opt/nec/ve/veos/ve-os-launcher.d/veswap.optionsと 個別の設定/etc/opt/nec/ve/veos/ve-os-launcher.d//veswap.options の両方が設定されている場合、個別の設定が優先されます。 - 異なるoptionsを指定した場合は、両方とも有効 例: ------ /etc/opt/nec/ve/veos/ve-os-launcher.d/veswap.options に、 ve-os-launcher@*=--ve-swap-mem-max=<サイズ(MB単位)> /etc/opt/nec/ve/veos/ve-os-launcher.d/N/veswap.options に、 ve-os-launcher@*=--ve-swap-file-path=<スワップファイルの絶対パス> ve-os-launcher@*=--ve-swap-file-max=<サイズ(MB単位)> ve-os-launcher@*=--ve-swap-file-user=<ユーザ名> ve-os-launcher@*=--ve-swap-file-group=<グループ名> ------ 上記の設定が全て有効、mix modeになります。 - 同じoptionsを指定した場合は、個別の設定が有効 例: ------ /etc/opt/nec/ve/veos/ve-os-launcher.d/veswap.options に、 ve-os-launcher@*=--ve-swap-mem-max=<サイズ1(MB単位)> /etc/opt/nec/ve/veos/ve-os-launcher.d/N/veswap.options に、 ve-os-launcher@*=--ve-swap-mem-max=<サイズ2(MB単位)> ------ 個別の設定が有効、値はサイズ2(MB単位)です。 2.2 VH の HugePages の設定 VEOS が起動する時、VEOS は以下の通りに HugePages を確保します。 memory mode: 設定ファイルで指定したメモリサイズ file mode : 64MB mix mode : 設定ファイルで指定したメモリサイズ + 64MB 「2.1 veswap.options」を設定した後に、 以下のコマンドで必要なHugePagesを自動的に設定します。 ------ $ sudo /opt/nec/ve/sbin/ve-set-hugepages ------ VH の HugePagesの設定についての詳細は、「SX-Aurora TSUBASA インストレーション ガイド」をご参照ください。 2.3 設定の反映 以下のコマンドでVEOSを再起動して、「2.1 veswap.options の設定」を反映します。 ------ $ sudo systemctl restart 've-os-launcher@*' ------ 又は、 ------ $ sudo systemctl restart ve-os-launcher@ ------ * は VE ノード番号 2.4 設定の確認 VEOSを再起動できましたら、以下のコマンドでveswap.options の設定が確認できます。 ------ $ ps -C veos -o flag,pid,cmd | grep '^4' ------ 表示例: ------ $ ps -C veos -o flag,pid,cmd | grep '^4' 4 810086 /opt/nec/ve/veos/sbin/veos -s /var/opt/nec/ve/veos/veos0.sock -d /dev /veslot0 --ve-swap-mem-max=10240 --ve-swap-file-path=/opt/nec/ve/veos/swap-file --ve-swap-file-max=64 -i /var/opt/nec/ve/veos/ived.sock 4 812439 /opt/nec/ve/veos/sbin/veos -s /var/opt/nec/ve/veos/veos2.sock -d /dev /veslot2 --ve-swap-mem-max=10240 --ve-swap-file-path=/opt/nec/ve/veos/swap-file --ve-swap-file-max=64 -i /var/opt/nec/ve/veos/ived.sock 4 812769 /opt/nec/ve/veos/sbin/veos -s /var/opt/nec/ve/veos/veos3.sock -d /dev /veslot3 --ve-swap-mem-max=10240 --ve-swap-file-path=/opt/nec/ve/veos/swap-file --ve-swap-file-max=64 -i /var/opt/nec/ve/veos/ived.sock 4 814029 /opt/nec/ve/veos/sbin/veos -s /var/opt/nec/ve/veos/veos1.sock -d /dev /veslot1 --ve-swap-mem-max=10240 --ve-swap-file-path=/opt/nec/ve/veos/swap-file --ve-swap-file-max=64 -i /var/opt/nec/ve/veos/ived.sock ------ optionsは重複になっている場合、個別の設定(後発)が有効です。 例: ------ 4 810086 /opt/nec/ve/veos/sbin/veos -s /var/opt/nec/ve/veos/veos0.sock -d /dev /veslot0 --ve-swap-mem-max=10240 --ve-swap-file-path=/opt/nec/ve/veos/swap-file --ve-swap-file-max=64 --ve-swap-mem-max=20480 -i /var/opt/nec/ve/veos/ived.sock ------ 個別の設定(後発)の--ve-swap-mem-maxが有効、値は20480MBです。 3.1 構文 /opt/nec/ve/bin/veswap [-o|-i|-m|-n] pid ... [-H] /opt/nec/ve/bin/veswap [-f] size [-o] pid ... [-H] /opt/nec/ve/bin/veswap -s [-H] /opt/nec/ve/bin/veswap -h /opt/nec/ve/bin/veswap -v 3.2 説明 1) オプション無し 指定されたVEプロセスのステータス(S)とサブステータス(SUB-S)を表示します。 表示例: ------ $ /opt/nec/ve/bin/veswap 1001 1002 1003 1004 1005 1006 1007 1008 1009 S SUB-S PID R - 1001 T o 1002 T s 1003 T i 1004 T a 1005 Z o 1006 Z s 1007 Z i 1008 Z a 1009 ------ 2) オプションの詳細 -o 指定されたVEプロセスのVEメモリをスワップ領域に swap out します。 以下のどちらかの状態であるVEプロセスのVEメモリが swap out できます。 -ステータスが「T」かつサブステータスが「a」 -ステータスが「Z」かつサブステータスが「a」 -f 割り込みVEプロセスを実行する際に必要なVEメモリサイズ を指定します。単位はKBです。 VEOSはfree VEメモリのサイズが指定されたサイズ以上になると swap outを停止します。 VEOSのメモリ管理の仕組みにより実際のVE freeメモリサイズは指定 値より大きくなる場合があります。 -i 指定されたVEプロセスのVEメモリをスワップ領域から復元 swap in します。 以下のどちらかの状態であるVEプロセスのVEメモリが swap in できます。 -ステータスが「T」かつサブステータスが「s」 -ステータスが「Z」かつサブステータスが「s」 -ステータスが「T」かつサブステータスが「o」 -ステータスが「Z」かつサブステータスが「o」 -m 指定されたVEプロセスのVEメモリサイズ情報を表示します。 swap out 可能なVEメモリのサイズ(SWAPPABLE)と swap out されたVEメモリのサイズ(SWAPPED)を表示します。 サイズはキロバイト(KB)で表示されます。 -n swap out できないVEメモリのサイズ(NON-SWAPPABLE)を表示します。 サイズはキロバイト(KB)で表示されます。 -s swap out されたVEメモリのサイズをVEノードごとに表示します。 サイズはキロバイト(KB)で表示されます。 -H ヘッダーを非表示にします。 -h, --help ヘルプを表示して終了します。 -V, --version バージョンを表示して終了します。 3) パラメータの詳細 pid VEプロセスのIDを指定します。 4 使用例 この章では、実行中のVEプログラムAのプロセス(VEプロセスA)のVEメモリを swap out し、VEプログラムBを実行する例を示します。 使用例の「pid-A」はVEプログラムAのプロセス(VEプロセスA)のIDとします。 「size-B」はVEプログラムBを実行する際に必要なVEメモリサイズとします。 ----- 1)「SIGSTOP」でVEプロセスAを停止します。 $ kill -s SIGSTOP pid-A 2) VEプロセスAが以下のどちらかの状態であることを確認します。 -ステータス(S)が「T」かつサブステータス(SUB-S)が「a」 -ステータス(S)が「Z」かつサブステータス(SUB-S)が「a」 $ /opt/nec/ve/bin/veswap pid-A S SUB-S PID T a pid-A 3) VEプロセスAが以下のどちらかの状態になった後にVEメモリを swap out します。 -ステータス(S)が「T」かつサブステータス(SUB-S)が「a」 -ステータス(S)が「Z」かつサブステータス(SUB-S)が「a」 $ /opt/nec/ve/bin/veswap -o pid-A 又は、 $ /opt/nec/ve/bin/veswap -f size-B -o pid-A 「-f」オプションを使う場合、VEOSはfree VEメモリのサイズが指定されたサイズ以 上になるとswap outを停止します。すなわち、ve-free コマンドで表示されるfree VEメモリサイズが -f で指定した値(size-B(KB))になるまでswap outが行われます。 VEOSのメモリ管理の仕組みにより実際のVE freeメモリサイズはsize-B(KB)より大き くなる場合があります。 4) VEプロセスAが以下のどちらかの状態であることを確認します。 -ステータス(S)が「T」かつサブステータス(SUB-S)が「s」 -ステータス(S)が「Z」かつサブステータス(SUB-S)が「s」 $ /opt/nec/ve/bin/veswap pid-A S SUB-S PID T s pid-A 5) VEプロセスAが以下のどちらかの状態になった後、空きVEメモリサイズを確認します。 -ステータス(S)が「T」かつサブステータス(SUB-S)が「s」 -ステータス(S)が「Z」かつサブステータス(SUB-S)が「s」 補足:VEプログラムを実行するための空きVEメモリサイズが十分でない場合は、よ り多くのメモリを解放してください。 $ /opt/nec/ve/bin/ve-free 6) 普通のVEプログラムの実行と同じ起動方法でVEプログラムBを実行します。 7) VEプログラムBの完了を待ちます。 8) 退避したVEプロセスAのVEメモリを swap in します。 $ /opt/nec/ve/bin/veswap -i pid-A 9) VEプロセスAが以下のどちらかの状態であることを確認します。 -ステータス(S)が「T」かつサブステータス(SUB-S)が「a」 -ステータス(S)が「Z」かつサブステータス(SUB-S)が「a」 このステータス(S)とサブステータス(SUB-S)になると、 swap out したVEメモリが swap in され、VEプロセスAはVEメモリを swap out する前の状態に戻ったを示 します。 $ /opt/nec/ve/bin/veswap pid-A S SUB-S PID T a pid-A 10)「SIGCONT」でVEプロセスAを再開します。 $ kill -s SIGCONT pid-A ----- 5 注意事項 1) VEメモリ swap in 処理においてVEメモリ不足により処理を継続できなくなった場 合、VEメモリが解放されるまで swap in 処理は待ち状態になります。その結果、 swap in 処理に想定以上の時間がかかってしまう可能性があります。 別のVEプロセスを swap out することなどでより多くのVEメモリを解放できます。 VEメモリを解放すると、swap in 処理が再開します。