Date:2024/02 この文書は VEOS version 3.3 以降についての情報を記載しています。 - ご注意 (1)本書の内容の一部または全部を無断転載することは禁じられています。 (2)本書の内容に関しては将来予告なしに変更することがあります。 (3)本書の内容については万全を期して作成しましたが、万一ご不審な点や誤り、 記載漏れなどお気づきのことがありましたら、NEC営業担当へご連絡ください。 (4)NECでは、本SWの利用を理由とする損失、逸失利益などの請求に関しましては、 (3)に関わらずいかなる責任も負いかねますので、あらかじめご了承ください。 (5)本SWは医療機器、原子力設備や機器、航空宇宙機器、輸送設備や機器など、人命に 関わる設備や機器としての使用またはこれらに組み込んでの使用は意図されており ません。これら設備や機器、制御システムなどに本SWが使用され、本SWの問題 により、人身事故、財産損害などが生じても、NECはいかなる責任も負いかね ます。 - VEOS とは VEOSは、ベクトルエンジン上で動作するプログラムに対してOS機能を提供する、 Linux/ベクトルホスト上で動作するソフトウェアです。 - サポートされるプラットフォームとオペレーティングシステム オペレーティングシステム プラットフォーム RHEL7.9 x86_64 RHEL8.6 x86_64 RHEL8.8 x86_64 VE30はRHEL8.6以降で利用可能です。 - バージョン間の互換性に関する注意 - VEOS 3.0.2以降と NQSV を連携させる場合、NQSV R1.13-143以降が必要です。VEOS 3.0.2でプロセスアカウンティングのデータ構造が変更されたため、NQSV R1.13-143より前のNQSVはプロセスアカウント情報の取得に失敗します。 - VEOS 3.0.2 以降で高速 I/Oを使用するには、veos-3.0.2 以降、 libsysve-ve3-3.0.2 以降、libsysve-ve1-3.0.2 以降が必要です。一部のパッケー ジが古い場合、高速 I/O は無効になります。 NEC コンパイラ 5.0.0 以降をインストールすると、依存関係によって、 libsysve-ve3-3.0.2 以降、libsysve-ve1-3.0.2 以降がインストールされます。 この場合、veos は更新されません。高速I/Oを有効にするためには、手動で veos-3.0.2 以降に更新してください。 - VEOSはLinuxのサスペンド、レジュームをサポートしません。VEが接続される Linux/x86マシンに対して、サスペンド、レジュームを実行しないでください。  実行した時、最悪の場合、カーネルパニック等でLinuxがダウンします。これは  大事なデータロスを引き起こします。 - VEOSはQEMU等の仮想マシン上で動作するLinuxをサポートしません。VEOSは物理 マシン上で直接動作するLinux上でのみ正しく動作します。 - VEOS の一部であるve_exec は 1TB 以上のVHの仮想アドレス空間を使用します。 Linux の "overcommit" 機能を有効にするため、カーネルパラメータ vm.overcommit_memory の値が "2" 以外である必要があります。 - VEOSがOS機能を安定して提供できるようにするため、VEOSが動作するLinux/x86 マシンには過剰な負荷をかけないでください。過剰な負荷によりVEOSの動作が 阻害された場合、レスポンスの悪化等、意図しない性能上の影響が出る可能性が あります。 - ベストパフォーマンスを達成するためには、VE上で実行されるVEプロセスの スレッド数が、利用可能なVEコア数以下である必要があります。 - IPv6 サポートを無効にした docker コンテナ内でプログラムが VE 用 glibc の getaddrinfo() を呼び出した場合、getaddrinfo() は失敗します。 docker 環境 の IPv6 サポートを有効にしてください。 - MPIPROGINF/PROGINF や、 "ps" や "veswap" などのコマンドは、VE メモリ の使用量や、スワップアウト不可能なVE メモリの使用量を VEOS から取得し て表示します。getrusage() 関数も VE メモリの使用量を VEOS から取得し ます。MPI API で転送するために固定された VE メモリは、VE プロセスの仮 想アドレス空間からアンマップされても、これらの値に計上されます。しか し、以下の種類のメモリは、VE プロセスの仮想アドレス空間からアンマップ されると、これらの値に計上されないという制限事項があります。 プライベートなファイルバックドメモリ (MAP_PRIVATE が指定された mmap()) 共有されているファイルバックドメモリ (MAP_SHARED が指定された mmap()) 共有されている無名メモリ (MAP_SHARED と MAP_ANONYMOUS が指定された mmap()) System V 共有メモリ (shmat()) POSIX 共有メモリ (shm_open()) - VEO の実装が AVEO に変更されました。これは、従来の VEO の実装より高速 で低遅延で、VEO を置き換えることができます。複数 VE をサポートし、VE 側と VH 側を同時にデバッグすることが可能で、拡張された API の利用がで きます。 既存のプログラムのメイクファイルを変更する必要はなく、AVEO のパッケー ジをインストールし、プログラムを AVEO に再リンクすることで、以前の VEO 実装から AVEO に移行できます。 VEO の移行とAVEO のインストールについては、VEOS ドキュメント"The Tutorial and API Reference of Alternative VE Offloading" を参照して ください。 従来の VEO のサポートは2021年3月末で終了しました。 - ベクトルホストのオペレーティングシステムが RHEL8.x かつ VE がパーティショニ ングモード (NUMA モード)の場合、以下の関数が稀に期待通り動作しない場合があり ます。 - vfork() システムコール - POSIX_SPAWN_USEVFORK フラグを指定した posix_spawn() 関数 この問題が発生した場合、VE あたりの最大プロセス数に達するまで子プロセスが作成 され続け、同一 VE ノード上の VE プログラムがハングアップする可能性があります。 この場合、vfork() を実行した VE プロセスとすべての子プロセスを SIGKILL シグナ ルで強制終了してください。この問題を避けるためにはこれらの関数の代わりに fork() を利用してください。これらの代わりにfork() を利用した場合子プロセスが 動作するまでの時間が増加し、子プロセスのメモリ使用量が増大します。 この問題は、将来のリリースで修正される予定です。 - ベクトルホストのオペレーティングシステムが RHEL8.4 の場合、セキュリティ 問題を修正するために、Linuxカーネルの動作が変更されています(CVE-2020-29374)。 実行するVEプログラムのファイルサイズがとても大きい場合、この変更によって、 過去のバージョンと比較して、VEプログラムのロードに時間がかかり、メモリを消費 します。なお、RHEL8.5 以降では上記の現象は発生しません。 - ベクトルホストのオペレーティングシステムが RHEL8.5 以降の場合、Linuxカーネル の動作が変更された影響により、ユーザプログラムの read/write 等の I/O の性能が 低下する場合があります。回避するには VE プログラム実行時に、高速 I/O を有効に してください。高速 I/O の利用方法については、VEOS ドキュメント「VEプログラム の実行方法」を参照してください。 - "ve_exec" プロセスは、約32TBと数百メガバイトの仮想メモリを使用します。 NQSVの"-l vmemsz_prc"オプション、"-l vmemsz_job"オプションあるいは "--vmemsz-lhost"オプションを使って仮想メモリのサイズを制限している場合は、 "ve_exec" プロセスが32TBと数百メガバイトの仮想メモリを使えるよう、仮想メモ リサイズを更新してください。但し、キューに設定されている既定値は UNLIMITED ですので、規定値をお使いの場合は、設定変更は不要です。 なお、NQSVの各オプションについては "NQSV 利用の手引 リファレンス編"の qsub、 qrsh、qlogin、qalterの各コマンドの記述を参照してください。 また、/etc/secure/limits.conf を使って仮想メモリのサイズを制限している場合 も、32TBと数百メガバイトの仮想メモリを使えるよう、仮想メモリサイズを更新し てください。 - 実行可能ファイルのコンストラクタの実行よりも早く子スレッドが生成された場合、 プロセスの性能モニタカウンタ(PMC)値の集計に失敗することがあります。 その場合、 以下が起きる可能性があります。 - Process accounting の PMC 値に N/A が表示される。 - VE30 で PROGINF/MPI 実行性能情報の性能項目の一部が表示されない。 - VE30上でVE10用バイナリを実行すると以下の現象が起きる場合があります。 この現象を回避するには、最新のコンパイラで-march=ve3オプションをつけて バイナリを再作成してください。 - glibcに含まれるbacktrace_symbols()がシンボル名を表示できない。 - ngprofが性能情報を表示できない。 - __malloc_hook, __memalign_hook, __free_hook, __realloc_hookを利用して 関数をフックした場合、callerとして渡されるアドレスがバイナリやライブラリが ロードされているアドレスと異なる。 - -static -fno-fast-mathオプションを指定して作成されたVE30向けプログラムでは、 4倍精度の浮動小数点剰余演算(fmodl())において除数がゼロの場合、環境変数 VE_FPE_ENABLE="INV"を設定しいてもINV例外が発生しません。 浮動小数点剰余演算を使用してINV例外を発生させたい場合は、単精度または 倍精度の浮動小数点剰余演算を使用してください。 環境変数VE_FPE_ENABLE="DIV"を設定することでゼロ除算例外が発生しますので、 例外発生の代替手段として使用できます。 - VE上でマルチスレッドプログラムを実行し、Partial Process Swappingの swap-out/swap-inを実行し、swap-in後の実行開始(SIGCONT)すると、稀にプログラム が異常終了することがある。 - Alternative VE Offloading(AVEO)を利用するプログラムを実行し、 Partial Process Swappingのswap-out/swap-inを実行し、swap-in後の実行開始 (SIGCONT)すると、veo_proc_create()が失敗することがある。 - VE上で複数のプロセスを実行し、その一部のプロセスのみをPartial Process Swappingのswap-outを実行すると、稀にVEOSが異常終了する。NQSVによる緊急リクエ スト実行の場合はVE上のすべてのプロセスをswap-outするため、本制限事項には抵触 しない。 - 最大プロセス数、最大スレッド数等の諸元については"VEOS概要設計"の "諸元一覧(VE3)","諸元一覧(VE1)"に記載されています。 - VEではアドレスの変換効率を上げて、性能を高めるため、64MBページ単位でメモリが 割り当てられます。簡単なプログラムでも300MB程度のメモリが消費されます。