VEOS:VEプログラムの実行方法 Date:2023/06 この文書は VEOS version 3.1.1 以降についての情報を記載しています。 はじめに、対象のVH(VEが接続されるLinux/x86マシン)にログインしてください。 - 対象のVHで何ノードのVEを使用でき、それぞれCPUコアをいくつ使用できるか $ unset VE_NODE_NUMBER $ /opt/nec/ve/bin/ve-uptime | grep Node VE Node: 1 VE Node: 0 ^この番号はVEノード番号です。 この場合、2ノード(#0,1)使用可能です。 $ /opt/nec/ve/bin/ve-nproc VE Node: 1 8 VE Node: 0 8 この場合、それぞれのVEノードで8コアを使用可能です。 (注意) 実行するVEプログラムのプロセス/スレッド数がVEのCPUコア数以下の時に VE性能を最大限に引き出せます。これはVEプログラム実行中にコンテキスト スイッチが発生しないからです。 - VEプログラムの作り方 $ vi hello.c $ /opt/nec/ve/bin/ncc hello.c -o hello - VEOS 動作モードの確認 VEOS は Normal モードと NUMA モード、2つの動作モードをサポートしています。 /opt/nec/ve/bin/venumainfo コマンドでモードをチェックすることができます。 $ /opt/nec/ve/bin/venumainfo Normal モードの場合、venumainfo は "available: 1 nodes(0)" を表示し、 VE の情報を "node 0" として表示します。 NUMA モードの場合、venumainfo は "available: 2 nodes(0-1)" を表示し、 "node 0" (NUMA ノード 0) と "node 1" (NUMA ノード 1) の情報を表示します。 - VEプログラムの実行方法 VEノード#0でプログラムを実行する場合: $ /opt/nec/ve/bin/ve_exec -N 0 ./hello VEノード#1でプログラムを実行する場合: $ /opt/nec/ve/bin/ve_exec -N 1 ./hello あるいは、VEノード番号を意味する環境変数を設定すれば、-Nオプションを指定する 必要ありません。例えば: $ export VE_NODE_NUMBER=1 $ /opt/nec/ve/bin/ve_exec ./hello binfmt の設定がインストール時に行われているため、VEプログラムをve_execなしに 実行することも可能です。複数のVEが搭載されている場合、VEプログラムを実行する VEノードを環境変数(VE_NODE_NUMBER)で指定します。 $ export VE_NODE_NUMBER=1 $ ./hello 動的リンカが、動的リンクライブラリ(共有ライブラリ)を検索するパスを変更したい 場合、VE の環境変数 VE_LD_LIBRARY_PATH を事前に設定してください。 /path/to/usr/lib を検索させたい場合は、以下の様に指定します。 $ export VE_LD_LIBRARY_PATH=/path/to/usr/lib $ /opt/nec/ve/bin/ve_exec ./hello その他のオプション・環境変数については、「ve_execオプション」 「環境変数」の節を参照してください。 - VEプログラムの実行方法 (NUMA モード) VEOS が NUMA モードで動作している場合、VE を NUMA の様に利用することが できます。 プログラムを NUMA オプションなしに実行すると、VEOS は負荷の低い NUMA ノードにそのプログラムのプロセスを生成します。プログラムがメモリ割り当てを 要求した場合は、プログラムが動作しているローカル NUMA ノードに属するメモリ (ローカルメモリ) が最初に割り当てられます。ローカルメモリが一杯の場合、 反対側の NUMA ノードに属するメモリ (リモートメモリ) が割り当てられます。 $ /opt/nec/ve/bin/ve_exec ./hello 使用する NUMA ノードやメモリポリシを指定するオプションを使う事ができます。 $ /opt/nec/ve/bin/ve_exec --cpunodebind=0 --localmembind ./hello また、オプション指定のために NUMA 用の環境変数 VE_NUMA_OPT も利用できます。 $ export VE_NUMA_OPT="--cpunodebind=0 --localmembind" $ /opt/nec/ve/bin/ve_exec ./hello (注意) デフォルトでは、VEOS はまずローカルメモリを割り当て、もしローカルメモリが 一杯の場合はリモートメモリを割り当てます。VEOS はこのポリシを MPOL_DEFAULT と定義します。'--localmembind' が指定された場合は、VEOS はローカルメモリ のみを割り当てます。VEOS はこのポリシを MPOL_BIND と定義します。 オプション・環境変数の詳細は、「ve_execオプション」「環境変数」の節を 参照してください。 - 既定のライブラリ検索パスの追加方法 規定値として検索パスを追加する場合は、"/etc/opt/nec/ve/ld.so.conf.d"ディレク トリに設定ファイルを追加した後、下記コマンドを実行してください。 $ sudo /opt/nec/ve/sbin/ve-ldconfig 設定ファイルは末尾が".conf"の任意のファイル名とし、検索パスを記入します。 - 高速I/Oを有効にする方法 高速I/Oは、VEとVH間で効率的にデータを転送することで、I/O性能を向上す るための機能です。 以下のread/write系のシステムコールのスループットとレイテンシが改善し ます。 read write pread pwrite readv writev preadv pwritev システム管理者は、「SX-Aurora TSUBASA インストールガイド」の指示に従 い、カーネルパラメータ"vm.nr_hugepages"を使用して、高速I/O用に Huge Pages を予約する必要があります。 高速I/Oはデフォルトで有効になっています。 $ ./hello 無効にする場合は、環境変数VE_ACC_IOを0に設定してください。 $ export VE_ACC_IO=0 $ ./hello 次の点に注意をお願いします。 * 高速I/O有効時、デフォルトで1つのスレッドごとに、8MB のHugePagesを 使います。 * 高速I/Oは、4MB単位でデータを転送します。そのため、サイズが4MBを超 える場合、read/write系システムコールはアトミックではなくなります。 環境変数 VE_ACC_IO_VERBOSE を 1 に設定して、VEプロセス終了時に高速I/O の有効/無効を標準エラーに出力します。 $ export VE_ACC_IO=0 $ export VE_ACC_IO_VERBOSE=1 $ ./a.out Accelerated IO is disabled $ export -n VE_ACC_IO $ export VE_ACC_IO_VERBOSE=1 $ ./a.out Accelerated IO is enabled - VEプロセスの資源制限方法 環境変数VE_LIMIT_OPTを設定して、VEプロセスの資源制限を行ってください。 $ export VE_LIMIT_OPT="-c 10240 --softm 1234 --hardm 2345 -t 10" 環境変数VE_LIMIT_OPTによってサポートされるリソースは以下の通りです。 -v : virtual memory RLIMIT_AS -c : core file size RLIMIT_CORE -t : cpu time RLIMIT_CPU -d : data seg size RLIMIT_DATA -m : max memory size RLIMIT_RSS -i : pending signals RLIMIT_SIGPENDING -s : stack size RLIMIT_STACK 上記のオプションによりVEプロセスに対しソフトリミットとハードリミットの 両方で制限をかけることが出来ます。以下のロングオプションを 環境変数VE_LIMIT_OPTに指定することで、各資源に対しソフトリミットと ハードリミットを別々に設定することもできます。 --softv: RLIMIT_AS soft limit --hardv: RLIMIT_AS hard limit --softc: RLIMIT_CORE soft limit --hardc: RLIMIT_CORE hard limit --softt: RLIMIT_CPU soft limit --hardt: RLIMIT_CPU hard limit --softd: RLIMIT_DATA soft limit --hardd: RLIMIT_DATA hard limit --softm: RLIMIT_RSS soft limit --hardm: RLIMIT_RSS hard limit --softi: RLIMIT_SIGPENDING soft limit --hardi: RLIMIT_SIGPENDING hard limit --softs: RLIMIT_STACK soft limit --hards: RLIMIT_STACK hard limit 幾つかの上記項目(ソフトリミットとハードリミットのいずれか、もしくは両方) が環境変数によって設定されていない場合、制限は’ulimit’の値が引き継がれます。 VE_LIMIT_OPTによってサポートされない資源制限は、VHのulimitから引き継がれます。 もしスタックのサイズがVE_STACK_LIMITとVE_LIMIT_OPTの両方によって 定義されていたら、VE_LIMIT_OPTの'-s'によって指定された値が優先され、 VEプロセスに適用されます。 これらの資源制限はVEプロセスにのみ適用可能であり、対応する代理プロセスの 制限はVHのulimitから引き継がれます。 - VEプロセスのリソース制限を確認する方法 ve_execのコマンドライン引数として"--show-limit"を指定すれば、 アウトプットの3列目と4列目にそれぞれVE_LIMIT_OPTがサポートしている 全ての資源に対して適用されているソフトリミットとハードリミットが表示されます。 $ /opt/nec/ve/bin/ve_exec --show-limit core file size (blocks, -c) 10240 10240 data seg size (kbytes, -d) unlimited unlimited pending signals (-i) 79349 79349 max memory size (kbytes, -m) 1234 2345 stack size (kbytes, -s) unlimited unlimited cpu time (seconds, -t) 10 10 virtual memory (kbytes, -v) unlimited unlimited - VEOS のタイムスライスとタイマーインターバルの変更方法 VEOS は VEOS スケジューラのタイムスライスとタイマーインターバルの表示と更新を サポートしています。/opt/nec/ve/bin/veosctl コマンドを使用することで、VEOS ス ケジューラのタイムスライスとタイマーインターバルの表示と動的な更新が可能です。 /opt/nec/ve/bin/veosctl コマンドの使い方は以下の通りです。 $ /opt/nec/ve/bin/veosctl [-s|--show] [-h|--help] [-V|--version] $ /opt/nec/ve/bin/veosctl [-t|--timer-interval ] [-T|--time-slice ] /opt/nec/ve/bin/veosctl コマンドは次のオプションを受け付けます。 -T value, --time-slice=value VEOS スケジューラのタイムスライスを 'value' ミリ秒に更新。 特権ユーザのみ実行可能。 -t value, --timer-interval=value VEOS スケジューラのタイマーインターバルを 'value' ミリ秒に更新。 特権ユーザのみ実行可能。 -s, --show VEOS スケジューラのタイムスライスと タイマーインターバルをミリ秒単位で表示。 -V, --version バージョン情報を表示し終了。 -h, --help ヘルプを表示し終了。 /opt/nec/ve/bin/veosctl コマンドは VEOS スケジューラのタイムスライスと タイマーインターバルを VEOS の再起動なしに直ちに更新できます。VEOS の 再起動後、/opt/nec/ve/bin/veosctl コマンドによる変更は失われます。 VEOS スケジューラのタイムスライスとタイマーインターバルのデフォルト値を 更新する場合、/etc/opt/nec/ve/veos/ve-os-launcher.d/veos_timer.options を 変更し VEOS を再起動してください。 /etc/opt/nec/ve/veos/ve-os-launcher.d/veos_timer.options の更新はすべての VEOS に影響します。それぞれの VEOS のスケジューラのタイムスライスとタイマー インターバルのデフォルト値を変更する方法は以下の通りです。 1. /etc/opt/nec/ve/veos/ve-os-launcher.d/ ディレクトリを 作成してください。 は VE ノード番号です。 2. /etc/opt/nec/ve/veos/ve-os-launcher.d/veos_timer.options を /etc/opt/nec/ve/veos/ve-os-launcher.d/ ディレクトリに コピーしてください。 3. /etc/opt/nec/ve/veos/ve-os-launcher.d//veos_timer.options を更新してください。 4. の VE ノードに対応する VEOS を再起動してください。 タイムスライスとタイマーインターバルの変更はユーザプログラムの性能に影響を 与える可能性があります。変更は注意して行ってください。 - ve_exec オプション ve_exec コマンドは次のオプションを受け付けます。 -V, --version バージョン情報表示 -h, --help ヘルプ表示 -N node, --node= 実行 VE ノード指定 -c core, --core= VEプログラムをどの VE コアで動かすかを コア番号で指定 '-c' と '--cpunodebind' の両方を同時に 指定することは不可 -- ve_exec オプションの終了 (VEバイナリ名が '-' で始まる場合に必要) --show-limit 環境変数VE_LIMIT_OPTによってサポートされる、 VEプロセスの資源に対して適用されている ソフトリミットとハードリミットを表示する NUMA mode のみ: --cpunodebind= VE プログラムを実行する NUMA ノード番号 を指定する --localmembind ローカルメモリのみ割り当てる (MPOL_BIND) - 環境変数 以下の環境変数によって、プログラム実行の制御が可能です。 * VE_NODE_NUMBER プログラムが実行される VEノード番号を指定します。 VE_NODE_NUMBER を設定せず、ve_exec コマンドの -N オプションも指定せず に、VEプログラムを実行した場合、VEプログラムは VEノード#0で実行されます。 * VE_LD_LIBRARY_PATH プログラム実行時に検索するライブラリパスを指定します。VE_LD_LIBRARY_PATH には、コロンで区切った複数のディレクトリを指定できます。 * VE_LD_PRELOAD この環境変数は動的リンカにプリロードする共有ライブラリのパスを設定します。 実行ファイルにロードされるどの共有ライブラリよりも先に、ユーザが指定する ライブラリをロードする事が可能です。 * VE_LINKER_VERSION この環境変数は VE10 用または VE30 用の動的リンカを指定します。ユーザが VE30 上でこれに "VE3" をセットした場合、VE ELF ローダは VE30 用の ld.so を 仕様します。変数がセットされていない場合、VE ELF ローダはプログラムヘッダ の INTERP にしたがって動的リンカをロードします。例:VE30 プログラムは VE30 の Glibc の動的リンカを使い、VE10 プログラムは VE10 の Glibc の動的 リンカを使います。 * VE_ACC_IO この環境変数はデフォルトで1に設定されています。 この環境変数を1または1より大きい値に設定すると、高速I/Oが有効になり、 8MBの HugePagesメモリを使用します。デフォルトで高速I/Oは有効です。 この環境変数を0に設定すると、高速I/Oが無効になります。 詳細は、この文書の「高速I/Oを有効にする方法」を参照してください。 * VE_ATOMIC_IO この環境変数を1に設定すると、アトミックI/Oが有効になります。VEプログラムが read/write系システムコールやsend/recv系システムコールを呼び出すと、VH側で バッファが確保されます。アトミックI/Oが有効の場合、このバッファのサイズは、 要求されたサイズと一致し、最大で2GBとなります。 アトミックI/Oは以下のシステムコールに影響があります。 read write pread pwrite readv writev preadv pwritev send recv sendto recvfrom もし、アトミックI/Oが無効の場合、バッファサイズは64MB固定です。要求されたサ イズが64MBを超える場合、64MBごとにデータが転送されます。この場合、 read/write系システムコールやsend/recv系のシステムコールは、アトミックではな くなります。 * VE_NUMA_OPT これは NUMA オプション "--cpunodebind" と "--localmembind" を指定します。 VE_NUMA_OPT とコマンドライン引き数の両方で NUMA オプションが指定されている 場合、VEOS はコマンドライン引き数で指定された値を使用します。 * VE_LIMIT_OPT この環境変数はVEプロセスの資源制限のために用いられます。 ハードリミット、ソフトリミットの両方を設定可能です。 詳しくは"VEプロセスの資源制限方法"を参照してください。 * VE_CORE_LIMIT この環境変数はVE プログラム実行中の VE コアセットを指定します。 例.VE_CORE_LIMIT=0-1,3,5-7 (有効なVEコアは 0,1,3,5,6 or 7) * VE_SIGPROCMASK この環境変数はVEプログラム起動時にシグナルマスクを設定するために用いられます。 この環境変数の値はブロックされるシグナルを表すビットマスクです。指定可能な シグナル番号は1(SIGHUP)から31(SIGSYS)で、10進数または16進数で指定できます。 10進数で12(SIGUSR2)を指定する場合: $ export VE_SIGPROCMASK=4096 16進数で12(SIGUSR2)を指定する場合: $ export VE_SIGPROCMASK=0x1000 複数のシグナル番号を指定する場合は、各シグナルの設定値の合計である必要があります。 例えば、10(SIGUSR1)と12(SIGUSR2)を指定したい場合は以下のように指定します。 10進数で10(SIGUSR1)と12(SIGUSR2)を指定する場合: $ export VE_SIGPROCMASK=5120 16進数で10(SIGUSR1)と12(SIGUSR2)を指定する場合: $ export VE_SIGPROCMASK=0x1400 - VEOSコマンドの実行方法 例えば、VEノード#0に対するpsコマンドを実行する場合: $ export VE_NODE_NUMBER=0 $ /opt/nec/ve/bin/ve-ps VEノード#1に対するpsコマンドを実行する場合: $ export VE_NODE_NUMBER=1 $ /opt/nec/ve/bin/ve-ps NQSV ジョブスケジューラが実行するジョブスクリプトからコマンドが実行された場合 いくつかのコマンドは NQSV ジョブスケジューラが確保した VE ノードに対して 実行されます。詳細は VEOSドキュメント 'Difference Points for Commands' を 参照してください。 以下は NQSV ジョブスケジューラが確保した VE ノードに対して実行されるコマンド のリストです。 ve-free ve-iostat ve-ipcrm ve-ipcs ve-lastcomm ve-lscpu ve-lslocks ve-mpstat ve-nproc ve-pidstat ve-pmap ve-prtstat ve-ps ve-sadf ve-sar ve-uptime veda-smi venumainfo veosctl ve-vmstat ve-w VEOSは/opt/nec/ve/bin/配下にある以下のコマンドをサポートします: ve-aclocal ve-aclocal-1.16 ve-autoconf ve-autoheader ve-autom4te ve-automake ve-automake-1.16 ve-autoreconf ve-autoscan ve-autoupdate ve-free ve-gdb ve-ifnames ve-iostat ve-ipcs ve-ipcrm ve-lastcomm ve-ldd ve-libtool ve-libtoolize ve-lscpu ve-lslocks ve-mpstat ve-pidstat ve-pmap ve-prlimit ve-prtstat ve-ps ve-sadf ve-sar ve-strace ve-strace-log-merge ve-taskset ve-time ve-tload ve-top ve-uptime ve-libc-check ve_exec ve_validate_binary venumainfo veosctl veswap ve-vmstat ve-w VEOSは/opt/nec/ve/sbin/配下にある以下のコマンドをサポートします: ve-accton ve-convert-acct ve-dump-acct ve-ldconfig ve-sa ve-set-hugepages - VEプログラムのデバッグ方法 GDBを使用可能です: $ export VE_NODE_NUMBER=0 $ /opt/nec/ve/bin/ve-gdb ./hello (gdb) run - 実行ファイルや共有ライブラリの検査 実行ファイルや共有ライブラリをロードして実行するためには、テキストセクション とデータセクションの間に1024バイト以上の隙間が必要です。隙間が1024バイト未満 の場合は、ロードに失敗します。 この隙間が1024バイト以上であることを、次のコマンドを実行して検査します。 $ /opt/nec/ve/bin/ve_validate_binary オプションを指定しなければ、このコマンドはカレントディレクトリの実行ファイル と共有ライブラリを検索します。次のオプションが利用可能です。 -f, --file 検査するファイルを指定します。 -d, --directory 実行ファイルや共有ライブラリを検索するディレクトリを指定し ます。 検査した全ての実行ファイルと共有ライブラリの隙間が1024バイト以上の場合は、  このコマンドは次のメッセージを表示します。 ***ALL VE BINARY/SHARED LIBRARIES ARE VALIDATED SUCCESSFULLY!!*** ある実行ファイルまたは共有ライブラリの隙間が1024バイト未満の場合は、このコ マンドは次のメッセージを表示します。 DATA/TEXT gap is less このメッセージが表示された場合は、実行ファイルまたは共有ライブラリを 再リンクしてください。 - ビルドに利用したCライブラリの見分け方 glibcを用いてコンパイルされたバイナリは、musl-libcを用いてコンパイルされたバ イナリと互換性がありません。バイナリにリンクされたCライブラリを区別したい場合 には、以下のように"ve-libc-check"スクリプトを実行して下さい。このスクリプト は、全てのVEバイナリ("a.out", ".o", ".a", ".so")に対して利用することが可能 です。 $ /opt/nec/ve/bin/ve-libc-check ./a.out This is compiled with musl-libc: /home/userxxx/a.out 上記のようなメッセージが表示される場合、"a.out"はmusl-libcを用いてビルドされ ています。何もメッセージが表示されない場合はmusl-libcを用いていません。 (注意) * musl-libcは2019年3月末に廃止されました。SX-Aurora TSUBASA ソフトウェアは、 今後 musl-libc をサポートしません。 * ".s"ファイルから生成されたオブジェクトファイルを"ve-libc-check"で確認するこ とはできません。".s"ファイルを用いている場合には、musl-libcでコンパイルした バイナリとglibcでコンパイルしたバイナリを混在させないよう、ご注意をお願いい たします。 * glibcでコンパイル・リンクしたVEプログラムが、musl-libcでビルドしたライブラ リを動的にリンクあるいはロードする場合には、"ve-libc-check"で確認することは できません。ご利用のライブラリをglibcを用いて再作成して頂くようお願いいたし ます。 - HugePages 自動設定ツール SX-Aurora TSUBASA のコンポーネントは HugePages を利用します。HugePages 自動 設定ツールは要求される HugePages 数を自動的にセットします。必要な HugePages については "SX-Aurora TSUBASA インストレーションガイド" を参照してください。 特権ユーザが HugePages とオーバーコミット HugePages を設定するために、この ツールを実行可能です。 Usage: /opt/nec/ve/sbin/ve-set-hugepages [-f filepath] [-a pages] [-o pages] [-m] [-s] [-vh] -a 算出した HugePages 数に を足す -f 設定ファイルのパスを指定 ユーザがファイルを指定した場合、デフォルトの設定ファイルは 読み込まれません。 -m mimbind ポリシーのNQSV ソケットスケジューリング用動作を指定 -o オーバーコミット HugePages に を足す -s 現在値を表示 -v 詳細ログモード -h ヘルプ表示 * 設定ファイル このツールは設定ファイルからオプションを読み込みます。デフォルトのパスは /etc/opt/nec/ve/veos/ve-hugepages.conf です。もしくは、ユーザは '-f' オプションによってファイルを指定できます。上記の '-f' オプションを参照し てください。ユーザは以下のオプションを使用できます。 SKIP_SETTING SKIP_SETTING に 'YES' をセットしたとき、HugePages 自動設定ツールは無効となります。 MEMBIND このノードが membind ポリシーのソケットスケジューリング が設定された NQSV のキューにバインドされている場合、 MEMBIND を 'YES' にセットして下さい。 ADDITIONAL_HUGE_PAGES= 算出された HugePages と ADDITIONAL_HUGE_PAGES の値の 合計が HugePages にセットされます。 OVERCOMMIT_HUGE_PAGES= この値が指定された時、余剰の(オーバーコミット) HugePages にこの値をセットします。 * 注意 HugePages 設定は VH 起動時に自動的に行われます。systemd-sysctl コマンドに よる設定とは HugePages に関して排他となりますので、/etc/sysctl.confや、 /etc/sysctl.d 配下等で HugePages、HugePages オーバーコミットの設定を行わ ないでください。 systemd-sysctl.service (sysctl コマンド)の設定ファイルに HugePages(nr_hugepages)、HugePages のオーバーコミット設定 (nr_overcommit_hugepages) が有る場合、systemd-sysctl.service の値が設定 される場合があります。 systemd-sysctl.service の設定ファイルについては Linux の manpage sysctl.d(5) を参照してください。 - プロセスアカウンティングデータのバージョン変換 VEOS のバージョンにより、サポートするプロセスアカウンティングのデータ構造体 バージョンが異なります。 ve-lastcomm や ve-dump-acct コマンドを使う際、ユーザ はインストールされている VEOS に適したデータ構造体を含むデータファイルを使う 必要があります。 * VEOS v2.14.1 まで バージョン 14 * VEOS v3.0.2 以降 VE10/VE20: バージョン 15, VE30: バージョン 16 VEOS v2.x から v3.x に更新した場合、psacct-ve インストール中にデータファイル を自動変換します。ユーザは手動で /opt/nec/ve/sbin/ve-convert-acct コマンドで データファイルのバージョンを変更することも可能です。 Usage: /opt/nec/ve/sbin/ve-convert-acct -t -t 変換後のデータ構造体のバージョンを指定 変換対象のデータファイルを指定 - VE30上でVE10用バイナリを実行する場合の設定 VE10用バイナリをVE30上で実行する際、内部で使用するデータを一時ファイルに 保存します。一時ファイルはデフォルトでは/var/opt/nec/ve/veos配下に作成され、 プロセスの終了時や共有ライブラリのアンロード時に削除されます。 この一時ファイルは一定の条件下で再利用することが可能です。繰り返し同じ バイナリを実行する場合、一時ファイルを再利用して作成処理を省略することで、 プロセス起動時のオーバーヘッドを削減できる可能性があります。 * 一時ファイル保存数の設定 VE10用バイナリ実行時の一時ファイル保存数の設定を変更する場合は /etc/opt/nec/ve/veos/ve-os-launcher.d/vemodcode.optionsを編集してください。 VEごとに固有の値を設定する場合は、NをVEノード番号として、 /opt/nec/ve/veos/ve-os-launcher.d/Nディレクトリを作成し、その配下に vemodcode.optionsを作成します。vemodcode.optionsの設定後、反映のために systemctl restart 've-os-launcher@*' を実行し、VEOSを再起動してください。 vemodcode.optionsファイルの設定内容は以下の通りです。 - VEごとの一時ファイル保存数の設定 デフォルトでは0となっており、一時ファイルは使用後すぐに削除されます。 指定数を超えた分の一時ファイルはVEOSにより自動的に削除されます。 ve-os-launcher@*=--ve-modcode-file-max= - ユーザーごとの一時ファイル保存数の設定 ユーザーごとの上限を設けることで、一部のユーザーに偏ることなく 一時ファイルが保存されるように設定できます ve-os-launcher@*=--ve-modcode-usr-file-max= (注意) 指定した値が--ve-modcode-file-maxより大きい場合や、全ユーザの 一時ファイルの合計数が--ve-modcode-file-maxの値を超えた場合は --ve-modcode-file-maxの設定が優先され、設定数に満たない場合でも 一時ファイルが削除されます。 * 一時ファイルの保存先の変更 実行するVE10用バイナリのサイズに比例して、一時ファイルのサイズも大きく なります。一時ファイルの保存先(デフォルトでは/var/opt/nec/ve/veos)に 余裕がない場合は、以下の手順で容量に余裕のある保存先に変更してください。 1.以下のコマンドでVEOSを停止してください。 systemctl stop 've-os-launcher@*' 2.それまで使用していた保存先ディレクトリは不要になりますので削除して ください。ただし、デフォルトの保存先である /var/opt/nec/ve/veos を 利用していた場合は削除不要です。 3.新しい保存先ディレクトリを作成してください。保存先ディレクトリの パーミッションは0755にしてください。 4. /etc/opt/nec/ve/veos/vemodcode.confで以下のように新しい保存先の ディレクトリを設定してください。 TMP_FILE_DIR= 5. 以下のコマンドでVEOSを起動してください。 systemctl start 've-os-launcher@*' (注意) vemodcode.confで存在しないディレクトリを指定するとVEOSが起動でき なくなります。 また、保存先ディレクトリ配下にVEOSが作成したファイルやディレクトリの アクセス権を変更すると、チェックでエラーとなりプロセスの生成に 失敗します。 - VEOSの問題発生時の情報採取 解析には以下の情報が必要です。 1. RPM パッケージとカーネルのバージョン情報 以下のコマンドを実行してバージョン情報をファイルに保存して採取し てください。 $ rpm -qa --qf '%{VENDOR} %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' \ | grep NEC > nec-version.txt $ uname -r > knl-version.txt 2. ログファイル 以下のログファイルを採取してください。 /var/log/messages* /var/opt/nec/ve/veos/*.log.* /var/opt/nec/ve/log/sa/saDD_* (DD は問題が発生した日) /var/opt/nec/ve/veos/core.* (存在する場合) /var/lib/systemd/coredump/core.veos.* (存在する場合) /var/lib/systemd/coredump/core.ived.* (存在する場合) /var/lib/systemd/coredump/core.vemmd.* (存在する場合) 3. プロセスアカウティングファイル プロセスアカウンティングが有効な場合、問題が発生した日と、その翌日の プロセスアカウンティングファイルを採取してください。 プロセスアカウンティングファイルのパスは以下の通りです。 /var/opt/nec/ve/account/pacct_? 最新のファイル /var/opt/nec/ve/account/pacct_?-YYYYMMDD YYYYMMDD が示す年月日にローテーションされたファイル /var/opt/nec/ve/account/pacct_?-YYYYMMDD.gz YYYYMMDD が示す年月日にローテーションされ、圧縮されたファイル プロセスアカウンティングファイルのローテーションが3時ごろに行わ れるため、プロセスの情報が翌日のファイルに記録される可能性がある ことに注意してください。 もし、VEプログラムがフリーズするような問題の場合は、次の情報も必要です。 情報を採取するためには、gdb パッケージがインストールされている必要が あります。 4. VEOS と ve_exec のスタックトレース root権限で次のコマンドを実行して、VEOS と ve_exec のスタックトレース を取得してください。生成された pstack-* ファイルを採取してください。 # for i in `seq 3`; do \ pgrep veos | while read pid; do pstack $pid > pstack-veos.$pid.$i; done; \ pgrep ve_exec | while read pid; do pstack $pid > pstack-ve_exec.$pid.$i; done; \ sleep 10; done - VEOS のデバッグログの採取方法 再現可能なVEOSの問題の場合、以下の情報も解析に役立ちます。 情報採取のレベルをデバッグに変更願います。 $ sudo cp /etc/opt/nec/ve/veos/log4crc /etc/opt/nec/ve/veos/log4crc.org $ sudo sed -i -e 's/INFO/DEBUG/g' -e 's/CRIT/DEBUG/g' -e 's/layout="ve"/layout="ve_debug"/g' /etc/opt/nec/ve/veos/log4crc 設定を反映するために、VEOSをリブートしてください。 $ sudo systemctl restart 've-os-launcher@*' 情報採取のために、以下の環境変数を設定願います。 $ export LOG4C_RCPATH=/etc/opt/nec/ve/veos 次に、問題を再現させてください。この時、ve_execのログファイルがカレントディ レクトリに作成されます。 ./ve_exec.log.* なお、以下の情報も忘れずにお願いします。 /var/log/messages* /var/opt/nec/ve/veos/*.log.* /var/opt/nec/ve/veos/core.* (存在する場合) /var/lib/systemd/coredump/core.veos.* (存在する場合) /var/lib/systemd/coredump/core.ived.* (存在する場合) /var/lib/systemd/coredump/core.vemmd.* (存在する場合) 最後に、ログレベルを元に戻して、VEOSをリブートしてください。 $ sudo cp /etc/opt/nec/ve/veos/log4crc.org /etc/opt/nec/ve/veos/log4crc $ sudo systemctl restart 've-os-launcher@*' $ unset LOG4C_RCPATH