3.3 この節は VEOS version 3.2.2 から 3.3 の変更を記載しています。 概要 : VEOSのcoreファイルのサイズを小さくしました。 タイプ : 機能拡張 詳細 : VEOSが異常終了した際に出力されるcoreファイルのサイズを小さくしました。 概要 : VE10/VE20用にコンパイルされたバイナリをVE30上で実行する時の性能を 改善しました。 タイプ : 機能拡張 詳細 : VE10/VE20用にコンパイルされたバイナリをVE30上で実行する時に、 ベクトル浮動小数点融合積和演算を多用するプログラムの性能を改善しました。 概要 : マルチスレッドのMPIプログラムを強制終了や異常終了した時にVEOSが クラッシュすることがある問題の修正 タイプ : バグ修正 詳細 : マルチスレッドのMPIプログラムを実行してqdelコマンド等で終了、または 例外発生等で異常終了した時、VEOS がクラッシュする場合がある。 - NEC MPI-2.23.0/3.2.0以降では、以下の条件を全て満たすとき - 環境変数NMPI_SWAP_ON_HOLDを指定、またはVHの /etc/opt/nec/ve/mpi/necmpi.confに"swap_on_hold 1"を指定している - MPI実行に使う全VHの/opt/nec/ve/veos/share/feature_listに "SWAPPABLE_VESHM"がある - MPI実行に使う全VHの/opt/nec/nqsv/share/feature_listに "ENABLE_REDUCING_DMA_VEMEMORY"がある - MPIがNQSVのHYDRAプロセスマネージャで実行した - キューの設定で「NEC MPI Process Manager」が"hydra"になっているか、 またはジョブ投入スクリプト内で"-T necmpi_hydra"を指定した場合 - NEC MPI-2.20.0〜2.22.0/3.1.0では、以下の条件を満たすとき -環境変数NMPI_SWAP_ON_HOLDを指定、またはVH の /etc/opt/nec/ve/mpi/necmpi.conf に swap_on_hold 1を指定している 概要 : long doubleデータ型での浮動小数点0による除算で、浮動小数点例外が発生し ない問題の修正。 タイプ : バグ修正 詳細 : 環境変数「VE_FPE_ENABLE」が「DIV」に設定されている場合でも、 long double型の変数(四倍精度実数型または四倍精度複素数型)の除算時に 除数がゼロでも、ゼロ除算例外が発生しない。 概要 : プログラムが、malloc()でアサーションメッセージ付でアボートする問題を 修正しました。 タイプ : バグ修正 詳細 : VE30の静的リンクされた実行可能ファイルを「VE_LD_LIBRARY_PATH」環境変数 とともに実行すると、malloc()でアサーションメッセージ付きでアボートする ことがある。 概要 : "veda-smi"がVE30のセンサー値を正しく表示しない問題の修正 タイプ : バグ修正 詳細 : "veda-smi"コマンドをVE30を搭載したマシンで実行すると、誤った電流、 電圧、および温度が表示されます。 概要 : ve-vmstatコマンドのCPU時間が正しくならない問題を修正しました。 タイプ : バグ修正 詳細 : オプション「delay」を使用して実行すると、ve-vmstatコマンドが不正な CPU使用時間を表示してしまう。 概要 : 無効なVE_NODE_NUMBERでVEコマンドを実行時してもエラーが表示されない問題 を修正しました。 タイプ : バグ修正 詳細 : 「-1」「xyz」「abc123」などの不正な値をVE_NODE_NUMBERに設定して ve-sa1, ve-free等のVEコマンドを実行しても、エラーが表示されない。 3.2.2 この節は VEOS version 3.2.1 から 3.2.2 の変更を記載しています。 概要 : VEプログラムの終了時にVEOSがクラッシュすることがある問題の修正 タイプ : バグ修正 詳細 : VEOS が性能モニタカウンタ(PMC)の時間ごとのオーバーフロー処理を実行 しているときにVEプログラムが終了すると、VEOS がクラッシュする可能性 がある。 3.2.1 この節は VEOS version 3.1.3 から 3.2.1 の変更を記載しています。 概要 : cmake toolchain fileへの定義追加 タイプ : 機能拡張 詳細 : VE向け定義としてCMAKE_Fortran_COMPILER_IDがcmake toolchain file に追加されました。 特定プロジェクトのためにcmake toolchain fileを更新する詳細な手順は、 VEOSのドキュメント"VE_Cmake_Toolchain_Guide"に記載されています。 概要 : 浮動小数点の除算演算で不正な値になる可能性がある問題の修正 タイプ : バグ修正 詳細 : VE プログラムをオプション"-march=ve3 -static -lm"でリンクすると、 libm の問題により、浮動小数点除算演算で「0.0」などの不正な値や予期 せぬ値になる場合がある。 3.1.3 この節は VEOS version 3.1.1 から 3.1.3 の変更を記載しています。 概要 : ファイルに対して mmap()システムコールを呼び出すプログラムの実行時に、 VEOSがsegmentation faultを起こすことがある問題の修正 タイプ : バグ修正 詳細 : ファイルに対して mmap()システムコールを呼び出すプログラムの実行時に、 VEOS が segmentation faultを起こし、クラッシュすることがある 次の条件をすべて満たす場合に発生することがある - あるプロセスがあるファイルに対して mmap()システムコールを呼び出して いる間に、別のプロセスが同一ファイルに対して munmap()システムコール を呼び出す場合 - mmap()システムコールを呼び出す際に、MAP_SHARED フラグを指定している。 もしくは、MAP_PRIVATE フラグを指定している - MAP_PRIVATE フラグを指定する際は、PROT_READ を指定し、PROT_WRITE は 指定しない 概要 : swap inを実行後に、VEOSが異常終了することがある問題の修正 タイプ : バグ修正 詳細 : Partial process swapping(PPS)機能により以下のプログラムがswap outされ、 その後swap inされた時、VEOSが稀に異常終了することがある。 -DMA転送を使うVEプログラム -MPIプログラム(VEOS 2.14.1以降かつMPI 2.23.0以降) 3.1.1 この節は VEOS version 3.0.2 から 3.1.1 の変更を記載しています。 概要 : "Partial Process Swapping"機能のスワップアウトの性能を向上 タイプ : 機能拡張 詳細 : 次の2つの機能に対応することで"Partial Process Swapping"機能の スワップアウトにかかる時間を削減しました。 - 割り込みVEプロセスを実行する際に必要なVEメモリサイズがNQSVに指 定された場合に、スワップアウトするVEメモリ量を限定する この変更は、R1.14以降のNQSVに適用されます。 - DIMMとNVMe上のファイルに並列してスワップアウトする 概要 : 新しいベクターエンジンの世代 (VE30)での旧世代(VE10)用バイナリの 実行をサポート タイプ : 機能拡張 詳細 : 新しいベクターエンジンの世代 (VE30) での旧世代(VE10)用バイナリの 実行をサポートしました。詳細は「VEOS:VEプログラムの実行方法」を ご確認ください。 概要 : Glibcのacct.h 内のプロセスアカウンティング データを更新 タイプ : 機能拡張 詳細 : acct.hファイルの ve_acct_v15 および ve_acct_v16 構造体の 一部のプロセスアカウンティングのメンバ名を変更しました。 以下は、ve_acct_v15 および ve_acct_v16 構造体の変更点です。 - 「ac_vlcme」は「ac_llvml」に変更されます - 「ac_vlcme2」は「ac_llvme」に変更されます - 「ac_l1lmc」は「ac_l1imc」に変更されます - 「ac_l1lmcc」は「ac_l1imcc」に変更されます ve_acct_v16 構造の変更点は次のとおりです。 - 「ac_llvml」は「ac_llvsml」に変更されます 概要 : swap out実行にhuge pagesが想定の2倍確保される問題の修正 タイプ : バグ修正 詳細 : Partial process swapping(PPS) 有効時に、swap outを実行すると huge pagesが想定の2倍確保される。 その影響として、次の事象が起きることがある。 - 緊急ジョブとして実行したプログラムが実行に失敗する - VHメモリのスワッピングが頻発して動作が遅くなる 概要 : Partial process swapping(PPS) 有効時に、VEOSがsegmentation faultを起 こすことがある問題の修正 タイプ : バグ修正 詳細 : NQSVによる緊急リクエストの実行に必要なVEメモリが大きく、割り込ま れたVEプロセスをPPSを利用してswap outしても、必要なVEメモリが確保 できず、割り込まれたプロセスが強制終了させられた場合、VEOSが segmentation faultを起こすことがある。 概要 : CMAKE_LIBRARY_PATHが間違ったパスで設定されていた問題の修正 タイプ : バグ修正 詳細 : cmake toolchainファイルでは、/etc/opt/nec/ve/default.conf の内容 が"ve3" であっても、CMAKE_LIBRARY_PATHは常に /opt/nec/ve/lib に設定されていました。 /etc/opt/nec/ve/default.conf の内容が"ve3"の場合、 /opt/nec/ve3/libとして設定されるようになります。 概要 : Partial Process Swapping(PPS)のスワップアウトでVEOSがハングアップ することがある問題の修正 タイプ : バグ修正 詳細 : Partial Process Swapping(PPS)のスワップアウトを行った時にVEOSが ハングアップする場合がある。 概要 : シグナルハンドラ処理後プロセスアカウンティングにおいて異常な 性能モニタカウンタ(PMC)データが記録される問題の修正 タイプ : バグ修正 詳細 : シグナルハンドラ実行後に VE プロセスが継続した場合、 プロセスアカウンティングデータに非常に大きな PMC 値が記録される 可能性があります。 たとえば、プロセスアカウンティングファイルの ac_ex と ac_vx が 0x0010000000000000 より大きくなる場合があります。 3.0.2 この節は VEOS version 2.14.1 から 3.0.2 の変更を記載しています。 概要 : 新しいベクターエンジンの世代 (VE30) をサポート タイプ : 機能拡張 詳細 : 新しいベクターエンジンの世代 (VE30) をサポートするために、以下の 更新を行いました。 - システムソフトウェア - VEOS, - VE driver - 等 - プログラミングのためのツール、フレームワーク - glibc v2.31 - autotools, cmake - 等 概要 : VE コマンドに "ve-" プレフィックスを追加 タイプ : 機能拡張 詳細 : VEOS は "ve-" プレフィックス付きのコマンドを提供します。 例えば、"ps" コマンドの名前は "ve-ps" に変更になりました。 "ve-" プレフィックスがついていないコマンドが必要な場合は、 以下の互換性パッケージからマシンの用途にあうパッケージをインス トールしてください。 ve-command-name-compat-devel ve-command-name-compat-runtime ve-command-name-compat-front-end 概要 : Apptainer を VE アプリケーションの実行用にサポート タイプ : 機能拡張 詳細 : ユーザは、 Apptainer を使用して、コンテナ内でVE アプリケーションを 実行できます。イメージをビルドするための Apptainer レシピファイル は github で入手可能です。 https://github.com/veos-sxarr-NEC/singularity 概要 : 仮想マシンでのVEの利用をサポート タイプ : 機能拡張 詳細 : 仮想マシンでのVEの利用をサポートしました VEを利用可能な管理ソフト/仮想化プログラムは、libvirt/qemu-kvmです。 VMゲストにて使用可能なVE数は基本1個です. 詳細については、「仮想マシンでVEを利用する方法」をご確認ください。 概要 : VEハードウェアを特定するための補助ベクトル"AT_HWCAP"の機能拡張 タイプ : 機能拡張 詳細 : glibcやプロファイラのためにVEハードウェアを特定する補助ベクトルである "AT_HWCAP"をサポートします。この情報はglibcやプロファイラが実行中の VEプロセスの場所を特定するために必要です。 概要 : デフォルトで異なるバージョンの glibc-ve ld.so を使用するようにしました。 タイプ : 機能拡張 詳細 : 異なる VE 世代の実行可能ファイルは、どの glibc バージョン ld.so を使用するか決定する必要があります。 VE_LINKER_VERSION 環境変数の値が設定されていない場合、 VE30 の 実行可能ファイルはglibc 2.31 ld.so が使用されます。 同様に、VE10 の実行可能ファイルはglibc 2.21 ld.so が使用されます。 詳細についてVEOSドキュメント"VEプログラムの実行方法" をご参照ください。 概要 : 新しいラッパースクリプトであるve-lddとve-ldconfigの追加 タイプ : 機能拡張 詳細 : ve-ldconfig: 異なるバージョンのglibc-veによって提供される異なる バージョンのldconfigを実行するために必要なldconfigのラッパースクリプト です。 ve-ldd: 環境変数VE_LINKER_VERSIONの値とVE30 lddの有無によって glibc-veから提供される異なるバージョンのlddバイナリを実行するために 必要なlddのラッパースクリプトです。 概要 : 高速I/O機能の更新 タイプ : 機能拡張 詳細 : 高速I/O機能を以下の通り更新しました。 - デフォルトで高速I/Oを有効としました。 - 高速I/Oに必要なHugePagesとVEメモリの使用量を削減しました。 高速 I/O は libsysve-ve3 および libsysve-ve1 のライブラリに実装され ています。高速 I/O の設計の変更により、最新のバージョンには veos-3.0.2 以降が必要です。libsysve-ve3-3.0.2、libsysve-ve1-3.0.2 以 降のバージョンが veos-2.14.1 以前と共にインストールされている場合、 高速 I/O は無効になります。 概要 : VE アーキテクチャ番号を取得するVEO API のサポート タイプ : 機能拡張 詳細 : 指定したVE ノードのVE アーキテクチャ番号を取得するVEO API をサポート しました。詳細は VEOS のドキュメント "The Tutorial and API Reference of Alternative VE Offloading" を参照してください。 概要 : VEO のVH 関数非同期実行のサポート タイプ : 機能拡張 詳細 : VEO API を利用してVH 関数を実行すると非同期に実行できます。詳細は VEOS のドキュメント "The Tutorial and API Reference of Alternative VE Offloading" を参照してください。 概要 : VEO の利用に必要なHugePages 数の削減 タイプ : 機能拡張 詳細 : VEO の利用に必要なデフォルトのHugePages 数を32ページから16ページに削減し ました。必要なHugePages 数は環境変数VE_OMP_NUM_THREADS に依存します。 詳細は VEOS のドキュメント "The Tutorial and API Reference of Alternative VE Offloading" を参照してください。 概要 : VE プロセススケジューリングのためのコアセットを指定する新しい 環境変数VE_CORE_LIMITのサポート タイプ : 機能拡張 詳細 : 環境変数VE_CORE_LIMITを利用して、ユーザはVEプログラムを実行する VEコアを指定することができます。 例.VE_CORE_LIMIT=0-1,3,5-7 (有効なVEコアは 0,1,3,5,6 or 7) 概要 : プロセスアカウンティング機能の拡張 タイプ : 機能拡張 詳細 : 以下の通り、プロセスアカウンティング機能を改善しました。 - ac_corebitmap 情報の追加 - ac_max_nthread の内容を更新しました。この値は「プロセスのライフ サイクルの間、同時に存在していた RUNNNING または WAIT スレッドの 最大数」を提供します。前のバージョンの VEOS では、「プロセスの ライフサイクルの間に実行されたスレッドの数」を表示していました。 - VE30 向け性能モニタカウンタ情報の追加 上記の機能サポートのため、プロセスアカウンティングのデータ構造体の バージョンを変更します。VE10 用データ構造体はバージョン 15、VE30 用 の構造体はバージョン 16 です。NQSV, ve-dump-acct, ve-lastcomm で これらの情報を表示します。VEOS v2.x から v3.0.2 に更新するとき、 既存のデータファイルは psacct-ve インストール中にバージョン 15 に 変換されます。 VEOS 3.0.2以降では、プロセスアカウンティングのデータ構造の変更により、 NQSV R1.13-143以降が必要です。VEOS 3.0.2が以前のバージョンのNQSVとと もにインストールされている場合、NQSVはプロセス・アカウントの取得に失 敗します。 概要 : 性能モニタカウンタ(PMC)レジスタのオーバーフロー処理改善 タイプ : 機能拡張 詳細 : PROGINF 等で使われる性能モニタカウンタのオーバーフロー処理を改善 しました。VEOS は複数回のオーバーフローを処理し、最終的な PMC 値 に加算することができます。これまでは PMC のオーバーフローは1回のみ 処理が可能でした。 概要 : VEプログラムにおけるメモリ確保/開放の性能改善 タイプ : 機能拡張 詳細 : VEプログラムからのmmap(), munmap(), malloc(), free()の応答時間の 改善を行うために、VEタスクからのメモリ確保および開放の要求に関する 処理を更新しました。 概要 : VE ドライバ と V2P ドライバのSRPMからのビルドをサポート タイプ : 機能拡張 詳細 : VEドライバ、V2P ドライバをSRPMからのビルドをサポートしました。 ユーザーは、必要に応じて、SRPMからVE,V2Pをビルドすることが できるようになりました。 概要 : HugePages 自動設定サービスの更新 タイプ : 機能拡張 詳細 : HugePages 自動設定サービス (ve-set-hugepages.service) を以下の通り 更新しました。 - VE アーキテクチャに基づいた HugePages 最低量を要求します - 仮想マシン環境において HugePages の最大サイズを実装メモリの半分に 制限しました 詳細は "SX-Aurora TSUBASA インストレーションガイド" を参照してください。 概要 : VE cmake toolchaingファイルを用いたOSSパッケージのコンパイル中に mpinfortでエラーが発生しないよう改善 タイプ : 機能拡張 詳細 : libnfortや他の不要なライブラリの追加を避けるため、cmake toolchain ファイルのCMAKE_LINKERを'/opt/nec/ve/bin/nld'から'/usr/bin/true'に 置き換えました。 概要 : dlopen() においてセグメンテーションフォールトが起きる問題の修正 タイプ : バグ修正 詳細 : ユーザープログラムが dlopen() を使用して継続的にライブラリをロード すると、あるところでライブラリロード用に既定された領域 (64GB未満) の制限に達し、ライブラリのロードが失敗します。 その結果 dlopen() でセグメンテーションフォールトが起きます。 概要 : プロセスアカウンティングにおいて異常な性能モニタカウンタ(PMC)データが 記録される問題の修正 タイプ : バグ修正 詳細 : 複数の VE プロセスが異常終了し、VEOS が複数のコアファイルを並列に生成 する場合、非常に大きな PMC 値がプロセスアカウンティングデータに記録され る可能性があります。この問題を回避するために、VE ノード毎に二つの VEOS プロセスが起動します。 概要 : VE 'gdb'コマンドがC++例外を捕まえることができない問題を修正 タイプ : バグ修正 詳細 : VE 'gdb'コマンドによってC++例外を捕まえることができません。 概要 : VEO 利用時、VH とVE 間のデータ転送に利用されるバッファ確保に 失敗する問題の修正 タイプ : バグ修正 詳細 : VEO API を利用したVH とVE 間のデータ転送を行うと、VH とVE 側の両方 からバッファの確保のためにバッファの解放を待ち合わせてVEO の処理が タイムアウトする可能性があります。この場合、データ転送に失敗し、 "alloc_payload timed out!"というメッセージが出力されます。 概要 : VEDA_FTRACE の処理が適切に動作するように修正 タイプ : バグ修正 詳細 : ユーザーがVEDA_FTRACEを指定したとき、ftraceの出力ファイルは生成されません。 ftraceの出力ファイルを生成するようにVEDA_FTRACEは修正されました。 概要 : VEDA デバイスコードを NEC の C コンパイラでコンパイルするための修正 タイプ : バグ修正 詳細 : ユーザーが VEDA デバイスコードを NEC の C コンパイラでコンパイル すると失敗します。 概要 : EXSRAR TIMEOUTが報告される問題を修正 タイプ : バグ修正 詳細 : VEOSがVEコアを停止、再開させるような場合に、VEOSとve_execが 同期していない為に、EXSRAR TIMEOUTが報告されることがあります。 2.14.1 この節は VEOS version 2.13 から 2.14.1 の変更を記載しています。 概要 : VE コマンドが NQSV ジョブスケジューラが確保した VE ノードに 対して動作する改善 タイプ : 機能拡張 詳細 : ps や free など、いくつかの VE コマンドは、NQSV ジョブスケジュー ラが確保した VEノードに対して動作するように改善されました。詳 しくはVEOSドキュメント 'Difference Points for Commands' を参照 してください。 概要 : VE間共有メモリのスワップアウトのサポート タイプ : 機能拡張 詳細 : MPIプログラムをスワップアウトしたときにスワップアウトされるメモリ量が 増え、低優先度のジョブが強制終了されるケースが減ります。 MPIでの設定方法、およびサポートモデルの詳細は"NEC MPIユーザーズガイド"を 参照してください。 概要 : VEプログラム起動時にシグナルマスクを設定する 環境変数VE_SIGPROCMASKのサポート タイプ : 機能拡張 詳細 : ユーザーは環境変数 VE_SIGPROCMASK にシグナル番号を指定することで VE プログラムの起動時にシグナルマスクを設定することができます。 詳しくは、VEOS ドキュメント "How to execute VE program" を 参照してください。 概要 : VEDA機能拡張 タイプ : 機能拡張 詳細 : 以下の機能拡張を行いました。 - - バグ修正によるvedaMemsetD2D*系APIのサポート 概要 : VE プロセスが x86 上のプロセスから execve() で実行された場合に シグナルマスクが継承されない問題の修正 タイプ : バグ修正 詳細 : VH プログラムから execve() で VE プログラムが起動された時、シグナル マスクが保存されません。そのため、VH プログラムでブロックされていた シグナルが、VE プログラムではブロックされません。 概要 : ve_set_next_thread_worker()が常にエラーを返却する問題の修正 タイプ : バグ修正 詳細 : ve_set_next_thread_worker()は、正常動作した場合でもエラーを返却します。 概要 : VE プロセスがゾンビになった場合、VEOS が異常終了する場合がある問題 の修正 タイプ : バグ修正 詳細 : マルチスレッドのプロセスからの VH VE SHM のリクエストを VEOS が 処理している間に、そのプロセスのメインスレッドが終了しゾンビに なった場合、VEOS が異常終了する場合があります。 概要 : 'nfds' に 7 より大きい値を指定した場合 poll() システムコールが 失敗する問題の修正 タイプ : バグ修正 詳細 : ファイルディスクリプタ数として 2 番目の引数 'nfds' に 7 より 大きい値を指定した場合、poll() システムコールは失敗し、errno には EINVAL が設定されます 概要 : pselect(), ppoll(), epoll_wait() のシグナルマスクに NULL を指定した 場合に正しく動作しない問題の修正 タイプ : バグ修正 詳細 : pselect(), ppoll(), epoll_wait() のシグナルマスクに NULL を指定した 場合、それらのシステムコール実行中はその VE タスクに対するすべての シグナルがマスクされません。 概要 : プロセスアカウンティングにおいて子プロセス/スレッドについて誤った 性能カウンタ (PMC) 値が採取される問題の修正 タイプ : バグ修正 詳細 : 子プロセス/スレッドのプロセスアカウンティング情報について誤った 性能カウンタ (PMC) 値が採取される場合があります。 - 親プロセスがしばらく処理をした後に fork/vfork を実行した場合、 子プロセスの PMC 値が過大になります。 - プロセスがしばらく処理をした後に pthread_create() を実行した場合、 プロセス自身の PMC 値が過大になります。 - プロセスが "-mno-create-threads-at-startup" を指定して OpenMP または自動並列化機能を使用した場合、プロセス自身の PMC 値が過大に なります。 VE lastcomm, dump-acct コマンドまたは NQSV によってプロセスアカウン ティングを表示したときに顕在化します。 NQSV の表示項目のうち影響がある値は以下の通りです。 VE FPEC, INSTRCT, VEC-INST, VEC-ELMT, VEC-EXE, VE L1 CACHE MISS TIME, VE CPU PORT CONFLICT, VEC ARITH EXEC TIME, VEC LOAD EXEC TIME, VEC-INST LOAD, VE POWER THROTTLING, VE THERMAL THROTTLING, VE MFLOPS, VE MFLOPS(REAL), V. Op. Ratio, FMAE 概要 : VE 'taskset' コマンドが指定された CPU アフィニティマスクを VE プログラムに正しく設定しない問題の修正 タイプ : バグ修正 詳細 : VE 'taskset' コマンドは '-c' オプションで指定された CPU アフィ ニティマスクを VE プログラムに正しく適用しません。結果として OpenMP を使用する VE プログラムがストールする場合があります。 概要 : スレッド作成中に SIGSTOP を受信した VE プロセスが "Partial Process Swapping" によりスワップアウト出来ない場合がある問題の修正 タイプ : バグ修正 詳細 : VE プロセスがスレッド作成中に SIGSTOP を受信した場合、その VE プロセスの内部状態が不正になる場合があります。その場合、当該 VE プロセスに対し swap out を実行すると 'veswap' コマンドが失敗します。 概要 : コンテナの中で VE プログラムを実行すると、"Non Swappable Memory Size Used"が表示されない問題の修正 タイプ : バグ修正 詳細 : ホスト上で VE_PROGINF=YES 環境変数を指定して VE プログラムを実 行すると、"Non Swappable Memory Size Used" が表示されます。し かし、コンテナ(例えばdocker)の中では、VE_PROGINF=YES 環境変数 を指定して実行しても表示されません。 2.13 この節は VEOS version 2.11.1 から 2.13 の変更を記載しています。 概要 : VEDA機能拡張 タイプ : 機能拡張 詳細 : 以下の機能拡張を行いました。 - 新規 device API追加 - 既存API削除 - 新規 runtime API追加 - vedaMemsetD2D* のサポート停止 - vedaLaunchKernelEx()の引数"bool checkResult"が "int64_t* result"へ変更。カーネル関数の戻り値はresultポインタ に格納されます。 - vedaArgsSetHMEMの引数"const void *value"が   "const VEDAhmemptr value"へ変更。 veoffload-vedaをv2.13以降にアップデートした場合、libveda.soを リンクしているプログラムは再コンパイル必要です。 概要 : cmake toolchain file への定義追加 タイプ : 機能拡張 詳細 : cmake toolchain file が更新されました。新たに VE 向け定義として CMAKE_C_COMPILER_ID, CMAKE_CXX_COMPILER_ID, CMAKE_STRIP が追加 されました。 概要 : VH Call Fortran APIのオプション引数のサポート タイプ : 機能拡張 詳細 : オプション引数をもつVHのライブラリ関数の引数を確保するAPIを サポートします。詳細は"The Tutorial and API Reference of VH Call Fortran API"をご確認ください。 概要 : VEOで作られた複数VEプロセスのftrace出力のサポート タイプ : 機能拡張 詳細 : ftraceライブラリをリンクしたプログラムを、VEO経由で複数プロセ スをつくって実行した場合、各プロセスごとに異なる名前の性能情報 ファイルが出力されます。 概要 : メモリ確保と開放をフックするための低レベルな VEO API をサポート タイプ : 機能拡張 詳細 : メモリ確保と開放をフックするための低レベルな VEO API が追加され ました。 これらのAPI は低レベルAPI で、上位層のソフトウェアによって呼び 出されることを想定しています。これらのAPI はユーザプログラムか ら呼び出されることを想定していません。詳細は VEOS のドキュメ ント "The Tutorial and API Reference of Alternative VE Offloading" を参照してください。 概要 : VEO APIがオフロードした処理の結果を待ち合わせる際の動作改善 タイプ : 機能拡張 詳細 : VEO でオフロードした処理の結果を待ち合わせている最中に、 ヘルパープログラムのaveorunが終了した場合、VEO APIが ハングアップします。この動作を改善し、API が失敗を表す結果を 返すようになりました。 概要 : VEDAdeviceptrによるセグメンテーションフォールトが起きる問題の修正 タイプ : バグ修正 詳細 :VEDAdeviceptr型変数をstd::ostreamに渡すとセグメンテーション フォールトが発生することがあります。 概要 : VE 例外が発生した場合に成功を表す値を返すVEO APIがある問題の修正 タイプ : バグ修正 詳細 : 以下のVEO APIを呼び出した際のVE側の処理中に、SIGABRT, SIGFPE, SIGILL, SIGSEGV, または SIGBUS のいずれかのシグナルを受信した 場合、VEO APIは処理が失敗したにも関わらず、成功を表す値を返し ます。 - veo_load_library() - veo_get_sym() - veo_alloc_mem() 概要 : VE libtoolを使用してFortranソースをコンパイルできない問題の修正 タイプ : バグ修正 詳細 : VE libtoolを使用してFortranプログラムをコンパイルすると、 '-rpath'オプションの前に'-Wl'が設定されていないため、 '-rpath'オプションが認識されません。 概要 : nfortコンパイラ用の'-Wl'と'-fPIC'オプションがVE libtoolに 不足している問題を修正 タイプ : バグ修正 詳細 : VE libtoolを使用してFortranプログラムをコンパイルすると、 '-soname'オプションの前に'-Wl'が設定されていないため、 '-soname'オプションが認識されません。 また、コンパイル時に、nfortを使用して動的ライブラリを作成する ための'-fPIC'オプションも欠落していました。 2.11.1 この節は VEOS version 2.10.1 から 2.11.1 の変更を記載しています。 概要 : Mellanox OFED version 5のサポート タイプ : 機能拡張 詳細 : VEOSは Mellanox OFED version 5をつかったデータ転送をサポートしました。 但し、Mellanox OFED version 5 は、RHEL8.4/8.5 の場合のみ使えます。 詳細は "SX-Aurora TSUBASA インストレーションガイド" を参照してください。 Mellanox OFED version 5をサポートするため、VEプロセスのメモリマップを 変更しました。 使用可能な VE の仮想アドレスが 0x6000 0000 0000 - 0x6fff ffff ffff に 制限されました。詳細は「VEOS 概要設計」を参照してください。 また、"ve_exec" プロセスは従来約1TBと数百メガバイトの仮想メモリを利用 していましたが、約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と数百メガバイトの仮想メモリを使えるよう、仮 想メモリサイズを更新してください。 概要 : VEDA のサポート タイプ : 機能拡張 詳細 : 新しい機能である VEDA (VE Driver API) をサポートしました。VEDA は CUDA プログラムを VE に移植するのを容易にし、また以下を提供します。 - SX-Aurora TSUBASA プログラミング用の CUDA Driver とランタイム API に似た API - VE と x86_64 用のプログラムをビルドするための cmake モジュール 詳しくは VEOS ドキュメント "The Tutorial and API Reference of VEDA" を参照してください。 概要 : VE のプロダクト名を表示する新機能のサポート タイプ : 機能拡張 詳細 : VE 'lscpu' コマンドは VE のプロダクト名を 'Model name' として表示 するよう更新されました。新しいlibsysve の API 've_get_ve_product_name'は VE プログラムが動作している VE ノードの プロダクト名を表示します。 概要 : ve-set-hugepages.service によって設定される HugePages の変更 タイプ : 機能拡張 詳細 : ve-set-hugepages.service によって設定される HugePages 数が変わり ました。HugePages 要求数については、"SX-Aurora TSUBASA インスト レーションガイド" を参照してください。 概要 : VEO VESHM, VEO VH-VE SHM, VEO VEDMA API を低レベルAPIとして サポート タイプ : 機能拡張 詳細 : これらのAPI を使用して、同一VH 上のVE 間のデータ転送が可能に なりました。一方で、異なるVH 上のVE 間のデータ転送はサポート していません。これらのAPI は低レベルAPI で、上位層のソフトウェア によって呼び出されることを想定しています。これらのAPI はユーザ プログラムから呼び出されることを想定しておりません。 詳細は VEOS のドキュメント "The Tutorial and API Reference of Alternative VE Offloading" を参照してください。 概要 : 新しい Fortan 向け VH Call API のサポート タイプ : 機能拡張 詳細 : ユーザは libvhcall-fortran の API を使う事により、VH 側で呼び出される 関数・サブルーチンに以下のデータ型を渡すことができます。VEOS の ドキュメント"The Tutorial and API Reference of VH Call Fortran API" を 参照してください。 - INTEGER(kind=8) 型 - INTEGER(kind=8) 型の配列 - CHARACTER 型の配列 概要 : VEOS ログメッセージの改善 タイプ : 機能拡張 詳細 : VEOS は終了時に受信したシグナルとその送信元をログに記録します。 概要 : RHEL8向けlibvhcall-fortranのdebuginfoパッケージの提供 タイプ : 機能拡張 詳細 : VE 'gdb'コマンドはlibvhcall-fortranパッケージが提供する VE用バイナリのデバッグが可能になりました。 概要 : VE プロセスにシグナルを配送している間に VEOS が停止する問題の修正 タイプ : バグ修正 詳細 : VE プロセスにシグナルを配送している間に VEOS が停止し反応しなくなる 場合があります。 概要 : pselect(), ppoll(), epoll_pwait() システムコールで渡されるシグナル マスクが機能しない問題の修正 タイプ : バグ修正 詳細 : pselect(), ppoll(), epoll_pwait() システムコールの前処理中にシグナル が配送された場合、 システムコールの最後の引数 'sigmask'として渡された シグナルマスクが機能しません。 概要 : ロードに関連するエラーメッセージが不十分である問題の修正 タイプ : バグ修正 詳細 : バイナリファイルまたは共有オブジェクトがロード時に何らかの理由で オープン出来なかった場合、そのオブジェクト名はログファイルにも 標準エラー出力にも表示されません。 概要 : VEプログラムで大きなサイズのスタック拡張が失敗する問題の修正 タイプ : バグ修正 詳細 : VEプログラムにおいて大きなサイズのスタック拡張をするとき、VH 側 のメモリ枯渇のためにスタック拡張が失敗し、プログラムが 'Unable to grow stack' エラーで終了します。 概要 : VESHM attachの失敗時にメモリリークが発生する 問題の修正 タイプ : バグ修正 詳細 : VE プロセスがVESHM 領域へのアタッチに失敗した場合、VEOS はVH 側の小さなメモリ領域を解放しません。アタッチするために 指定したVESHM 領域が存在しない場合に失敗します。NEC MPIは VESHM 機能を使用しています。したがって、MPI 通信が失敗する とメモリリークが発生する可能性があります。 概要 : VE 関数の31MB を超えるサイズの引数の転送時にデッドロックが 発生するAVEO 問題の修正 タイプ : バグ修正 詳細 : マルチスレッド化したVEO プログラムで、veo_call_async() またはveo_call_sync() で31MBを超える引数を転送した場合、 タイミングによってはデッドロックが発生します。 概要 : 高速IOによる書き込み失敗時に戻り値とエラー番号が不正の場合が ある問題の修正 タイプ : バグ修正 詳細 : 高速IOで8MBを超えるサイズのデータを書き込んだ場合、エラーが 発生すると、戻り値が0になってエラー番号を設定されない場合が あります。 概要 : VE "gdb"に関する問題の修正 タイプ : バグ修正 詳細 : VE "gdb"に関する以下の問題を修正しました - 引数なしの"map"または"sleep"コマンドを実行すると、gdbはSIGSEGVで 異常終了します。 - "print"コマンドで"long double"型を出力すると、gdbは不正な値を 出力します。 - float型関数に対して"return"コマンドを実行すると、gdbは不正な値を 返します。 - "long double"型の引数を持つ関数を"call"コマンドで呼び出した場合、 値が関数に正しく渡されません。 - "set backtrace exclude-start-thread"実行後、"backtrace"コマンドが "start_thread"と"__clone関数"を出力します。 - "backtrace"コマンドがアドレス0を出力することがあります。 概要 : "ve_sysstat-collect@N" サービスの起動が失敗する問題の修正 タイプ : バグ修正 詳細 : "sysstat-ve" パッケージのインストール後、VEカードが取り除かれた場合 や、VE番号の割り当てが変わった場合、10分に一度、その VE カードに対応す る"ve_sysstat-collect@N" サービスの起動が失敗します。 この問題は RHEL8 上で発生します。RHEL7 上では発生しません。 上の記述において、N は VE ノード番号です。 2.10.1 この節は VEOS version 2.9.1 から 2.10.1 の変更を記載しています。 概要 : aveorun の FTRACE 機能のサポート タイプ : 機能拡張 詳細 : ユーザプログラムの性能情報に加えて、ヘルパプログラムのaveorun 自身の 性能情報を取得できるようになりました。性能情報を取得するには、環境 変数VEORUN_BIN に/opt/nec/ve/veos/libexec/aveorun-ftrace を設定して、 VEO を使うプログラムを実行してください。ftrace のランタイムライブラリ によってftrace.out ファイルが生成されます。 概要 : AVEO のtraceback のサポート タイプ : 機能拡張 詳細 : VE プログラムのトレースバック情報を取得できるようになりました。 トレースバック情報を取得するために、VE プログラムを "-traceback" つきでコンパイルして、環境変数 VE_TRACEBACK に VERBOSE を指定して、VEO プログラムを実行してください。 詳細は VEOS のドキュメント "The Tutorial and API Reference of Alternative VE Offloading" を参照してください。 概要 : "mallinfo" API を拡張した新しい API "mallinfo2" をサポート タイプ : 機能強化 詳細 : malloc の情報を "mallinfo" で回収した場合、その情報は int 型の変数に 格納されるため、オーバーフローが起きる場合があります。 "mallinfo2" は オーバーフローを避けるため、malloc の情報を size_t 型 の変数に格納します。 概要 : VE プログラムに指定可能な環境変数の最大値の制限を削除 タイプ : 機能拡張 詳細 : VE プログラムに指定可能な環境変数の最大値の制限が削除されました。 ユーザは、VH プログラムに指定可能な環境変数と同程度の環境変数を VE プログラムに対して指定できます。 概要 : VE AIO の性能改善 タイプ : 機能拡張 詳細 : 並列で I/O を処理することで、VE AIO の性能を改善しました。 I/O サイズが 16MB 以上の場合、ve_aio_read() の性能が最大 2.5 倍、 ve_aio_write() の性能が最大 2 倍に改善されます。この改善によって、 VE AIO はデフォルトではアトミックではなくなったことに注意してください。 従来通り VE AIO をアトミックな I/O として利用することも可能ですが、 その場合は性能は改善されません。詳しくは VEOS のドキュメント "The Tutorial and API Reference of libsysve" を参照してください。 概要 : RHEL8向けVEバイナリのdebuginfoパッケージの提供 タイプ : 機能強化 詳細 : VE 'gdb'コマンドは以下のパッケージが提供するVE用バイナリのデバッグが 可能になりました。 - glibc-ve - libsysve - veoffload-aveorun 概要 : MPIでデータ転送が行われた領域のスワップアウトの改善 タイプ : 機能拡張 詳細 : MPIでデータ転送が行われた領域は"Partial Process Swapping"によりスワップアウトで きませんでした。その一部をスワップアウトできるようにしました。 MPIでの設定方法、およびサポートモデルの詳細は"NEC MPIユーザーズガイド"を 参照してください。 概要 : VE プロセスアカウントファイルが破損する場合がある問題の修正 タイプ : バグ修正 詳細 : VE プログラムの実行中に VE プロセスアカウントが OFF から ON になった 場合、VE プロセスアカウントファイルの中に不正なレコードが記録される 可能性があります。この結果、そのプロセスアカウントファイルが破損します。 概要 : VE メモリがリークしてしまう場合がある問題の修正 タイプ : バグ修正 詳細 : clone() システムコールによって VE タスクを生成中に、その VE タスクを 異常終了させた場合、そのタスクが使用していた VE メモリがリークする 場合があります。 概要 : VE 'ps' コマンドが VEOS のセグメンテーションフォールトを引き起こす 場合がある問題の修正 タイプ : バグ修正 詳細 : VE プロセスの終了と同時に VE 'ps' コマンドが実行された場合、VEOS が セグメンテーションフォールトを引き起こす場合があります。 概要 : 代理プロセス内で少量の VH メモリがリークする問題の修正 タイプ : バグ修正 詳細 : shmat() システムコールに無効なセグメント ID を指定し EINVAL で失敗 した場合、少量の VH メモリが代理プロセス内でリークします。 概要 : AVEO のスレッドセーフの問題の修正 タイプ : バグ修正 詳細 : マルチスレッド化したVEO プログラムで、以下のVEO API を実行すると 意図しない動作をする可能性があります。意図しないコンテキストや プロセスを破棄したり、参照して異常終了する可能性があります。 - veo_context_close() - veo_context_open() - veo_free_hmem() - veo_get_context() - veo_hmemcpy() - veo_num_contexts() - veo_proc_destroy() 概要 : AVEO でVE メモリがリークする問題の修正 タイプ : バグ修正 詳細 : veo_context_open() で作成したVE スレッドをveo_context_close() で クローズすると、メモリリークが発生します。ただし、VEO プロセスが 終了した場合やVE プロセスがveo_proc_destroy() によって破棄された 場合はメモリリークが発生しません。 概要 : コマンドが終了する前に、veo_context_sync() が返る可能性がある 問題の修正 タイプ : バグ修正 詳細 : マルチスレッド化したVEO プログラムで、veo_context_sync() が 実行されると、すべてのコマンドが処理されるまで待たないで 処理が返る可能性があります。 2.9.1 この節は VEOS version 2.8.3 から 2.9.1 の変更を記載しています。 概要 : cmake のサポートを追加 タイプ : 機能拡張 詳細 : '-DCMAKE_TOOLCHAIN_FILE' オプションでツールチェインファイルを指 定してcmake を使うことで、新しいプログラムをビルドすることや、 既存のプログラムを移植することができます。 cmake-ve パッケージは、MPI と非 MPI プログラムをビルドするための 2つの異なるツールチェーンファイルを提供します。詳細は VEOS の ドキュメント "VE CMake Toolchain Users Guide" を参照してください。 概要 : VE 用 autotools の改善 タイプ : 機能拡張 詳細 : 新しいプログラムや既存のプログラムを VE 用にビルドするために VE 用の autotools を更新しました。詳細は VEOS のドキュメント "VE autotools Users Guide" を参照してください。 概要 : HugePages 自動設定サービスのサポート タイプ : 機能拡張 詳細 : ve-set-hugepages.service は要求される HugePages 数を自動で算出し、 VH 起動中に vm.nr_hugepages と vm.nr_overcommit_hugepages を設定 します。詳しくは、"SX-Aurora TSUBASA インストレーションガイド" とVEOSドキュメント"VEプログラムの実行方法" をご参照ください。 概要 : VEOS スケジューラのタイムスライスとタイマーインターバルを参照、設定 できる新たなコマンド 'veosctl' のサポート タイプ : 機能拡張 詳細 : 'veosctl' コマンドを使用することで、すべてのユーザが VEOS スケジュー ラの現在のタイムスライスとタイマーインターバルを参照出来ます。 また、特権ユーザは'veosctl' コマンドを使用することで VEOS を再起動 することなく VEOS スケジューラのタイムスライスとタイマーインターバル を動的に変更することができます。詳細は VEOS のドキュメント "VEプログ ラムの実行方法" を参照してください。 概要 : 高速I/O の性能改善 タイプ : 機能拡張 詳細 : IOサイズが4MB以上の場合、高速I/Oの性能は従来と比べて最大1.5倍に 改善されます。 IOサイズが4MBを超える場合、read/write系のシステムコールはアトミック ではないことにご注意ください。 詳しくは、VEOSドキュメント "How to execute VE program" をご参照 ください。 概要 : 高速I/O 使用状況を示す環境変数とAPIのサポート タイプ : 機能拡張 詳細 : 環境変数 VE_ACC_IO_VERBOSE を 1 に設定して、VEプロセス終了時に 高速I/Oの有効/無効を標準エラーに出力します。 有効か無効か状態を返却する新しい API 've_is_acc_io_enabled()' も 利用可能です。 詳しくは、VEOSドキュメント "The tutorial and API reference of libsysve"をご参照ください。 概要 : スタック上限またはVE メモリを使い果たした場合に VE タスクを異常 終了させる動作の変更 タイプ : 機能拡張 詳細 : VE タスクのスタック上限や、 VE メモリを使い果たした場合に、 "Unable to grow stack"というメッセージを出力して VE タスクを 異常終了するよう VEOS を更新しました。 概要 : VE 'time' コマンドで VE プロセスを実行した場合に veos がSIGSEGVで 異常終了する場合がある問題の修正 タイプ : バグ修正 詳細 : VE 'time' コマンドで実行された VE プロセスが子 VE プロセスを生成した 場合、veos が SIGSEGV で異常終了する場合があります。 概要 : 破棄済みのマークがついていない System V 共有メモリが削除される場合 がある問題の修正 タイプ : バグ修正 詳細 : shmget() システムコールによる System V 共有メモリの生成時に S_IXOTH をそのパーミッションとして指定した場合、破棄済みのマークがついてい なくとも参照カウンタが 0 になった時点でその System V 共有メモリは 削除されます。 概要 : shmctl() システムコールが System V 共有メモリに破棄済みのマークを つけることに失敗し、VH メモリリークを起こす場合がある問題の修正 タイプ : バグ修正 詳細 : shmget() システムコールによる System V 共有メモリの作成時にパーミッ ションに 0 が設定された場合、shmctl() システムコールの IPC_RMID コマンドはその共有メモリに破棄済みのマークをつけることに失敗します。 その結果、VEOS で少量の VH メモリがリークします。 概要 : shmctl() システムコールの IPC_SET が System V 共有メモリのパーミッ ションを 0 に変更できない問題の修正 タイプ : バグ修正 詳細 : shmctl() システムコールの IPC_SET コマンドが System V 共有メモリの パーミッションを 0 に変更しようとしたとき、shmctl() システムコール は成功値を返しますがパーミッションの変更に失敗します。 概要 : VE 'time -v' コマンドが "Maximum resident set size" と "Page size" に誤った値を表示する問題の修正 タイプ : バグ修正 詳細 : VE 'time -v' コマンドを使用して VE プロセスを実行した場合、"Maximum resident set size" と "Page size" に誤って 0 と表示されます。 概要 : VE 'strace' コマンドを SIGKILL で終了させた場合、トレースされている プロセスが終了しなくなる問題の修正 タイプ : バグ修正 詳細 : VE 'strace' コマンドで VE プロセスを実行したとき、strace コマンドを SIGKILL で終了させるとトレースされているプロセスの実行が進まず、 当該プロセスが終了しません。 2.8.3 この節は VEOS version 2.8.1 から 2.8.3 の変更を記載しています。 概要 : ve_exec が VH でゾンビ状態で残る問題の修正 タイプ : バグ修正 詳細 : マルチスレッドプロセスにおいて、プロセスが pthread_create() を実行中 に終了すると、VE プロセスが VEOS 内で削除されず、VH で ve_exec が ゾンビ状態で残る可能性があります。 2.8.2 この節は VEOS version 2.8.1 から 2.8.2 の変更を記載しています。 概要 : VEO で VE プロセスのデバッグを容易にする環境変数をサポート タイプ : 機能拡張 詳細 : ユーザが VE プロセスをデバッグしたい場合、まずは環境変数 VEO_DEBUG を設定します。その後、ユーザが VEO プログラムを実行し、VE プロセス が動きはじめるたびに、VE デバッガーの gdb が起動します。詳細は、 VEOSドキュメント"The Tutorial and API Reference of Alternative VE Offloading"を参照してください。 概要 : ふたつの新しい VEO API をサポート タイプ : 機能拡張 詳細 : ひとつめの API は、VEO のバージョンを返す veo_version_string() です。ふたつめの API は、VE プロセス識別子を返す veo_proc_idetifier() です。VEO は最大16 VE プロセスを識別可能 です。VEOは内部でVEプロセスに0から15の番号を割り当てており、 これをVEプロセス識別子として扱います。 もし使われていない番号がある場合は、VE プロセス生成時に最も小さい 番号が割り当てられます。 概要 : VE タスクのパフォーマンス改善のために、mmap(2) や munmap(2) などのシステムコールを伴う VEOS のメモリ割り当て・解放処理を改善 タイプ : 機能拡張 詳細 : mmap(2) のようなシステムコールを伴うメモリ割り当て・解放を VE タスクが実行した時、VE タスクのパフォーマンスが大幅に低下する 可能性があります。システムコールの処理の後、VEOS はそれらの VE タスクのスレッドを直ちに実行できないかもしれず、さらには スレッドの実行を次のスケジューリングサイクルに延期するためです。 概要 : C++プログラムのためのlibvhveヘッダファイル更新 タイプ : 機能拡張 詳細 : C++ ユーザプログラムが vhve.h をインクルードするように、 ヘッダ ファイルを更新しました。 概要 : ジョブスケジューラがVEの稼働状況を確認するために使用するスク リプトを追加 タイプ : 機能拡張 詳細 : ジョブスケジューラは、本スクリプトを使用して、ジョブ開始前に VEがONLINE状態であることを確認します。また、ジョブが終了した後で ジョブ実行中にVE障害が発生していなかったかどうかを確認します。 概要 : パーティショニングモード (NUMA モード) のとき、VE タスク間でコア割り 当てが偏る問題を修正 タイプ : バグ修正 詳細 : NUMA モードで実行中の VE タスクがトレースされているとき、トレースされ ているかにかかわらず VE タスク間でコアの割り当てが偏る場合があります。 例えば、--cpunodebind オプション無しで起動された VE タスクが負荷の 高い方の NUMA ノードに割り当てられる可能性があります。 概要 : VH メモリリークの修正 タイプ : バグ修正 詳細 : VH メモリの不足により VE プロセスの生成に失敗した場合、VEOS で 少量の VH メモリがリークする場合があります。 概要 : ve_ptrace() を使って VE プロセスのベクトルレジスターに値が 設定できない問題の修正 タイプ : バグ修正 詳細 : ve_ptrace() が PTRACE_SETREGSET によってベクトルレジスタ の値を設定した場合、期待する値がベクトルレジスタに設定されません。 gdb は内部的に ve_ptrace() を利用しているため、gdb を使って ベクトルレジスタの値を設定することができません。 概要 : ve_drv-kmod パッケージのアップデートに失敗すると、ve_drvが起動 しなくなる問題の修正 タイプ : バグ修正 詳細 : /opt/nec/ve/sbin/terminate-all-ve-service を実行しないで ve_drv-kmodパッケージのアップデートを実行すると、アップデート に失敗して、システム再起動時に ve_drvモジュールが自動でロード されなくなります。 概要 : VEO API 呼び出しが VH メモリ使用率を増加させる問題を修正 タイプ : バグ修正 詳細 : 以下の API は VH 側のメモリリークを引き起こします。 もしユーザがこれらの API を繰り返し呼び出した場合、 VH メモリ使用率は増加し続けます。 - veo_call_async() - veo_call_sync() - veo_call_async_vh() - veo_read_mem() - veo_write_mem() - veo_async_read_mem() - veo_async_write_mem() 2.8.1 この節は VEOS version 2.7.6 から 2.8.1 の変更を記載しています。 概要 : gdbでベクトルレジスタを整数表示することをサポート タイプ : 機能拡張 詳細 : gdbは、ベクトルレジスタ(v0-v63)を浮動小数点数として 表示してきましたが、浮動小数点数に加え整数を表示 するようになりました。 概要 : veo_call_async() によって転送される引数の処理の改善 タイプ : 機能拡張 詳細 : veo_call_async() は内部で引数を保存します。したがって、ユーザは veo_call_async() 呼び出し直後に引数を書き換え、次の呼び出しを 行うことができます。 概要 : VEOS 内の VE プロセスデータの重複により、新しい VE プロセスまたは スレッドの生成が失敗する可能性がある問題の修正 タイプ : バグ修正 詳細 : fork()、vfork()、または clone() で生成した新しいタスクと同じ pid を 持つゾンビ状態のタスクのデータが VEOS 内にあるとき、新しいタスクの 生成が失敗する場合があります。 カーネルの 'pid_max' 値 ('/proc/sys/kernel/pid_max') がデフォルト値 であるとき、この問題の発生は非常に稀です。しかし、小さい 'pid_max' の場合は、この問題は頻繁に発生します。 関連する次のトピックも参照してください。 概要 : VE time コマンドが kill された時、time コマンドで生成された VE プロセスのデータが VEOS 内で削除されない問題の修正 タイプ : バグ修正 詳細 : VE time コマンドで生成された VE プロセスは、VE プロセスが終了する前に time コマンドが終了すると、 VEOS 内から削除されません。その場合、 VE プロセスに割り当てられたリソースも解放されません。 概要 : VEO プログラムがSIGBUSを発生させた際にVH プロセスが永久に 待ち続ける問題の修正 タイプ : バグ修正 詳細 : VH プロセスがVEO によって生成されたVE プロセスの処理結果を 待ち合わせている間にVE プロセスがSIGBUS を発生させた場合、 VE プロセスは終了します。しかしながら、VH プロセスはVE プロセスの 終了を通知されないため、VH プロセスは永久に結果を待ち続けます。 概要 : VEプログラムがセグメンテーションフォールトする問題の修正 タイプ : バグ修正 詳細 : RHEL8 または CentOS8 および SX-Aurora TSUBASA ソフトウェアをSX-Aurora TSUBASA にインストールした後に初めて VE プログラムを実行したときに、 セグメンテーションフォールトが発生する場合があります。この問題は、 Huge Pageが十分でない場合にも発生します。 2.7.6 この節は VEOS version 2.7.5 から 2.7.6 の変更を記載しています。 概要 : VEO APIを呼び出すMPIプログラムへの対応 タイプ : 機能拡張 詳細 : VH側のMPIプログラムが VEO API(AVEO API)を使って VEO 機能を利用で きるようになりました。詳細は、VEOSドキュメント"The Tutorial and API Reference of Alternative VE Offloading"とMPIドキュメン ト"NEC MPIユーザーズガイド"を参照してください。 概要 : AVEO の異種メモリ(Heterogeneous memory, HMEM) API をサポート タイプ : 機能拡張 詳細 : ユーザはHMEM API でVE またはVH メモリバッファの確保が可能です。 HMEM API で確保したメモリは異種メモリとして使用できます。メモリ 確保を行うHMEM API は VEO ライブラリによって使用される識別子を 付与したアドレスを返却します。これにより、ユーザはプロセスを 明示的に指定せずに、HMEM API にこのアドレスを指定するだけでVE/VH プロセス間でデータ転送が可能になりました。 注意点や詳細は VEOS ドキュメント "The Tutorial and API Reference of Alternative VE Offloading" を参照してください。 概要 : VE ハードウェアの状態が UNAVAILABLE になったときに実行中の VE プロ セスが有る場合、コアの生成をしない タイプ : 機能拡張 詳細 : VE ハードウェアの状態が UNAVAILABLE になった場合は、VH 上の 've_exec' のコアダンプ生成しないようにしました。 概要 : 後からロードしたライブラリからシンボルを利用できるように VH Call を拡張 タイプ : 機能拡張 詳細 : vhcall_install()はRTLD_GLOBALオプションを指定してdlopen()を 呼び出すことでVHプロセスにライブラリをロードします。 シンボルは 後からロードされたライブラリにおいて、 参照解決に利用されます。 概要 : VEOSが起動できない問題の修正 タイプ : バグ修正 詳細 : VEOS起動時にVEドライバの初期化に失敗して、VEOSが起動できないことが あります。 概要 : プロセスのコアダンプ中に VEOS が反応しなくなることがある問題の修正 タイプ : バグ修正 詳細 : マルチスレッド VE プロセスにおいて、コアダンプ処理が既に開始している スレッドが SIGKILL を受け取った場合は、コアダンプしているプロセスは直ち には終了しません。 この間コアダンプ中は VEOS は応答を止め、コアダンプ が完了した後に再度応答するようになります。 概要 : pidstat コマンドがセグメンテーションフォールトする問題の修正 タイプ : バグ修正 詳細 : pidstat がインターバルオプションを指定してマルチスレッド環境に 対して使用されると、メモリ不足によりセグメンテーションフォールトが 起きる状況になる可能性があります。 2.7.5 この節は VEOS version 2.7.4 から 2.7.5 の変更を記載しています。 概要 : AVEO のデータ転送を最適化するための環境変数をサポート タイプ : 機能拡張 詳細 : ユーザーは、以下の環境変数を設定して、VH と VE 間のデータ転送を 最適化できます。 VEO_RECVFRAG, VEO_RECVCUT VEO_SENDFRAG, VEO_SENDCUT 詳細は VEOS ドキュメント "The Tutorial and API Reference of Alternative VE Offloading" を参照してください。 概要 : VEO API を呼び出すマルチスレッド化されたVH プログラムが 不定な動作をする問題の修正 タイプ : バグ改善 詳細 : VEO API はスレッドセーフではありません。2つ以上のスレッドで並列に VEO API が呼び出されると、不定な動作をします。 概要 : VE の MPI プロセスがゾンビ状態で残る問題の修正 タイプ : バグ修正 詳細 : OpenMP または NEC のコンパイラの自動並列化で作成されたスレッドが セグメンテーションフォールトなどの例外を起こした時、別のスレッドが MPI 関数を実行していると、プロセス終了後に ve_exec がゾンビ状態で 残留することがあります。 概要 : 've_get_regvals()' を呼び出したプロセスの uid が、要求先のプロセス の uid と異なるとき、VE プロセスがゾンビ状態で残る問題の修正 タイプ : バグ修正 詳細 : libveosinfo ライブラリに含まれる 've_get_regvals()' を呼び出した プロセスの uid が対象のプロセスの uid と異なる場合、対象のプロセス は、終了したあとにゾンビ状態で残ります。 概要 : VE 例外を発生させるリクエストの結果が頻繁に成功値を返す問題の修正 タイプ : バグ修正 詳細 : ユーザがveo_write_mem() またはveo_async_write_mem() に不正な アドレスを指定し、VE 例外が発生した場合、当該リクエストの結果が 成功値になる可能性があります。たとえ、これらの関数が成功値を 返しても、次のVEO API 呼び出しは失敗します。 2.7.4 この節は VEOS version 2.7.2 から 2.7.4 の変更を記載しています。 概要 : Singularity を VE アプリケーションの実行用にサポート タイプ : 機能拡張 詳細 : ユーザは、 Singularity を使用して、コンテナ内でVE アプリケーションを 実行できます。イメージをビルドするための Singularity レシピファイル は github で入手可能です。 https://github.com/veos-sxarr-NEC/singularity 概要 : PROGINF がAVEO に対応しました タイプ : 機能拡張 詳細 : PROGINF でAVEO の解析情報を採取できるようになりました。解析情報を 採取するためAVEO プログラム実行時に環境変数VE_PROGINFにYES または DETAIL を指定してください。 概要 : Partial Process Swappingの Swap out するファイルの所有者・グループ を設定できるようにしました。 タイプ : 機能拡張 詳細 : VEメモリをファイルへ Swap out する場合、ファイルの所有者・グループを veswap.options で設定できるようにしました。 詳しい veswap.options の設定方法については VEOS のドキュメント "VEOS Partial Process Swapping リファレンス"を参照してください。 概要 : VE からの割り込みの負荷を分散 タイプ : 機能拡張 詳細 : VH 上のソフトウェアを安定動作させるために、VE からの割り込みの負荷 を分散させるスクリプトが "vesysinit" パッケージによってインストール されます。 また、VE からの割り込みの宛先を irqbalance が変更しないようするた めの irqbalance ポリシースクリプトもインストールされます。 概要 : VEドライバの割り込み性能の改善 タイプ : 機能拡張 詳細 : VEドライバの割り込み性能を改善しました。 概要 : スタックリミット超過時に VH のコアダンプを生成しないように動作を変更 タイプ : 機能拡張 詳細 : VE プロセスがスタックリミットを超過し異常終了した時、VEOS は VH の コアダンプを生成しないようにしました。 概要 : MPIプロセス終了時にVEOSが異常終了することがある問題の修正 タイプ : バグ修正 詳細 : MPIプロセスがSystem V 共有メモリ上の領域を転送し、共有メモリをデタッチ することなく終了させた場合、VEOSが異常終了することがあります。 概要 : ve-devel パッケージグループインストール後に VE カードが ONLINE に ならない場合がある問題の修正 タイプ : バグ修正 詳細 : RHEL8.1 又は CentOS8.1 に ve-devel パッケージグループをインストール しても、VE カードが ONLINE にならない場合があります。 概要 : veo_get_context() に不正な引数に渡すとVH プロセスが異常終了する 問題を修正 タイプ : バグ修正 詳細 : ユーザがveo_get_context() の第二引数に不正な要素番号を渡すと、 vector型変数の、存在しない要素にアクセスします。そのため、 out_of_range 例外が発生しますが例外をAVEO ライブラリがキャッチ しないため、VH プロセスが異常終了します。 概要 : VE プロセスの状態が STOP のあと一時的に WAIT に更新される問題を修正 タイプ : バグ修正 詳細 : execve() システムコール、または time、taskset、prlimit、strace の ような VE コマンドで実行した VE バイナリを、実行開始直後に SIGSTOP などで停止させた場合、時々、プロセス状態が STOP 状態のあとに一時的 に WAIT 状態に変わることがあります。状態は一時的な WAIT 状態のあと、 再び STOP 状態になります。 概要 : mutex の属性が 'PTHREAD_PRIO_INHERIT' の時、pthread_mutex_init() が ENOTSUP で失敗しない問題を修正 タイプ : バグ修正 詳細 : pthread_mutexattr_setprotocol() で属性を 'PTHREAD_PRIO_INHERIT' に 設定し、pthread_mutex_init() で初期化した時、glibc は VEOS が 'PTHREAD_PRIO_INHERIT' をサポートしているかどうかを確認せず、 ENOTSUP ではなく成功を返します。 概要 : クロックID が CLOCK_THREAD_CPUTIME_ID の場合、clock_gettime() が 誤った値を返す問題を修正 タイプ : バグ修正 詳細 : スレッド固有の CPU タイムクロックを指定した clock_gettime() が 誤った値を返します。 2.7.2 この節は VEOS version 2.7 から 2.7.2 の変更を記載しています。 概要 : Partial Process Swapping により Swap out できないメモリのサイズを 取得する機能のサポート タイプ : 機能拡張 詳細 : 'veswap -n' は VE プロセスが使用している swap outできないメモリの サイズを表示します。 また、libsysve の 've_get_nonswappable' 関数は、VE プロセスが 使用した Swap outできないメモリの最大サイズを取得します。 詳しくは VEOS のドキュメント "VEOS Partial Process Swapping リファレンス"または"The Tutorial and API Reference of libsysve"を 参照してください。 概要 : 平均負荷計算の改善 タイプ : 機能拡張 詳細 : VE ノードの全てのコア上で、平均負荷をアクティブなタスクの合計として 表示するように改善しました。 概要 : VE プログラムがハードウェア例外で終了した際の、VH バイナリ 've_exec' のコアファイル生成を無効化 タイプ : 機能拡張 詳細 : VE プログラムがハードウェア例外を起こした際、'core..ve' (VEバイナリ './ve_a.out') と 'core.' (VH バイナリ 've_exec') の様な2つのコアファイルが生成されます。この場合、VH 側のコア ファイルは不要であるため、コア生成を無効化しました。 概要 : VEOS 内で VE プロセスの PID が重複した結果 fork()/clone() が失敗 した後、VEOS がハングアップまたは異常終了する可能性がある問題の修正 タイプ : バグ修正 詳細 : PID の重複によって VEOS が新しいタスクの生成を拒否した後、VEOS 内のタスクが不適切に解放され、VEOS が無応答になる場合や、異常 終了する場合があります。 概要 : 集合に含まれる全てのファイルディスクリプタをポーリングしている時に VE プロセスがハングアップする問題を修正 タイプ : バグ修正 詳細 : 複数のファイルディスクリプタを集合が含み、集合のすべてのファイル ディスクリプタが実行可能な状態になるのをポーリングするとき、VE プロセスは poll(2) の中でハングアップします。 概要 : swapcontext() 実行後、プログラムがコンテキストのシグナルマスクの 保存に失敗する問題の修正 タイプ : バグ修正 詳細 : getcontext() を使ってコンテキストを保存する前にシグナルをマスク していた場合、swapcontext() を実行するとプログラムは保存した シグナルマスクコンテキストを失います。 概要 : setcontext() または swapcontext() 実行後、プログラムがセグメンテー ションフォールトする問題の修正 タイプ : バグ修正 詳細 : 保留中のシグナル(sigpending)リストでシグナルが保留されており、 対応するシグナルハンドラが、setcontext()または swapcontext() に よってコンテキストを復元または切り替えるのと同時に起動された場合、 プログラムはセグメンテーションフォールトでクラッシュします。 概要 : fcntl(2) 実行中に VE プロセスが停止する問題を修正 タイプ : バグ修正 詳細 : F_SETLKW を指定した fcntl(2) を呼び出した時、対象ファイルに対して 衝突するロックが保持されていて、fcntl(2) がシグナルで中断され た場合、VEプロセスは停止します。 概要 : VE 'sa1' コマンドがサイズ0のダミーファイルを生成し、VE 'sa2' コマンドがダミーファイルを処理しようとして失敗する問題の修正 タイプ : バグ修正 詳細 : RHEL7 環境において、'/etc/sysconfig/ve_sysstat' 内の HISTORY マクロが 28 以上に設定され、かつ、'/var/opt/nec/ve/log/sa/' ディレクトリに当日のファイルが無い場合、VE 'sa1' コマンドは サイズが 0 の間違ったダミーファイル "saDD_*" を作成します。 この場合、VE 'sa2' コマンドは、"sarDD_*" を作るためダミーの "saDD_*" を処理しようとして失敗します。 概要 : VE 'sa1' と VE 'sa2' コマンドにおいて VE_NODE_NUMBER 環境変数が 正しく機能しない問題の修正 タイプ : バグ修正 詳細 : RHEL7 環境において、VE_NODE_NUMBER 環境変数が設定され、 '/etc/sysconfig/ve_sysstat' 内の HISTORY マクロが 28 以上に設定 されている場合、 - VE 'sa2' は "/var/opt/nec/ve/log/sa/" に存在する、指定された VE ノードの "sarDD_node" ではなく、 全ノードの当日データ "saDD_Node" の "sarDD_node" を作成します。 - VE 'sa1' は "/var/opt/nec/ve/log/sa/" に存在する、指定された VE ノードの "sarDD_node" ではなく、 全ノードの当日データ "saDD_Node" のシンボリックリンクを作成します。 2.7 この節は VEOS version 2.6.2 から 2.7 の変更を記載しています。 概要 : AVEO のサポート タイプ : 機能改善 詳細 : VEO の実装が AVEO に変更されました。これは、従来の VEO の実装よ り高速で低遅延で、VEO を置き換えることができます。複数 VE をサ ポートし、VE 側と VH 側を同時にデバッグすることが可能で、拡張 された API を利用できます。 NECは、2021年3月末まで 従来の VEO の実装をサポートする予定です。 VEO の移行とAVEO のインストールについては、VEOS ドキュメント "The Tutorial and API Reference of Alternative VE Offloading" を参照してください。 概要 : INTEGER配列を渡すための Fortan 向け VH Call API をサポート タイプ : 機能拡張 詳細 : ユーザはlibvhcall-fortranのAPIを使う事により、VH側で呼び出される関数・ サブルーチンにINTEGER型配列を渡すことができます。VEOSのドキュメント "The Tutorial and API Reference of VH Call Fortran API" を参照して ください。 概要 : プロセスアカウントにおいて、VEO プロセスの PPID が不正な値になる 問題の修正 タイプ : バグ修正 詳細 : ユーザが、 VEO API を使用して VE プロセスを生成した場合、プロセ スアカウントに記録される PPID が -1 になります。 2.6.2 この節は VEOS version 2.5 から 2.6.2 の変更を記載しています。 概要 : Partial Process Swapping機能の拡張 タイプ : 機能拡張 詳細 : 下記の機能をサポートします。 - VEメモリをファイルへスワップアウト - VEメモリ不足によってスワップインが進められない状態でのスワップアウト - zombie状態のプロセスのスワップアウト 概要 : 環境変数VE_ACC_IOの機能拡張 タイプ : 機能拡張 詳細 : VE_ACC_IO の値で高速IOのため使用する Huge pages サイズを設定できます。 この環境変数を 1 に設定すると、高速I/Oが有効になります。 使用する Huge pages のサイズはデフォルト値です。 デフォルト値は 64MB です。 この環境変数を 2 に設定すると、高速I/Oが有効になります。 使用する Huge pages のサイズは 8MB * VEのコア数 です 概要 : 負荷調整機能の改善 タイプ : 機能拡張 詳細 : VE タスクの状態を考慮するよう負荷調整機能を改善しました。 VEOS は、実行中またはスリープ中の VE タスクが複数割り当てられている VE コアから、以下の条件を満たすコアへ VE タスクを移動させます。 - 実行中の VE タスクが割り当てられていない - スリープ中の VE タスクが割り当てられていない 概要 : VE タスク生成のアルゴリズムの改善 タイプ : 機能拡張 詳細 : すでに存在する VE タスクの状態を考慮するよう VE タスク生成アルゴ リズムを改善しました。 VEOS は実行中またはスリープ中の VE タスクが最も少ない NUMA ノード に新たな VE タスクを生成します。また、その VE タスクを実行中または スリープ中の VE タスクが最も少ないコアに割り当てます。 概要 : times() 機能/システムコールのサポート タイプ : 機能強化 詳細 : 新しくtimes(2)システムコールをサポートしました。 概要 : VEプロセスのシステムコールレイテンシの改善 タイプ : 機能強化 詳細 : VEOSのVEタスクを検索するアルゴリズムが改善し、システムコール全体の レイテンシを向上させました 概要 : VEプロセスアカウンティング情報の情報追加 タイプ : 機能強化 詳細 : VEプロセスアカウンティング情報を更新しました。追加の情報はdump-acct コマンドの--ve-infoオプションで参照できます。 lastcommコマンドをサポートします。追加の情報はlastcommコマンドの --ve-infoオプションでも参照できます。 概要 : VEプロセスアカウンティングファイルを変換するための、新しいコマンド 'convert-acct'のサポート タイプ : 機能強化 詳細 : 新しいツールconvert-acctをサポートします。これはプロセス アカウンティング機能拡張に必要なツールです。 複数のバージョンのVE プロセスアカウンティング情報を持つVEプロセスアカウンティングファイルを dump-acctコマンドや lastcommコマンドで読み取るとき、このツールは そのファイルを読み取り可能な形式に変換します。 概要 : rootファイルシステムの利用可能領域を元にしたVEプロセスアカウンティング の停止/再開機能の追加 タイプ : 機能強化 詳細 : VEプロセスアカウンティングが有効なとき、rootファイルシステムの 利用可能領域が2%以下の時停止し、利用可能領域が4%以上になると 自動で再開します。 概要 : スワップイン後に再開したプロセスから更新されたデータが見えない 場合がある問題の修正 タイプ : バグ修正 詳細 : NUMA ノード間のキャッシュコヒーレンシの問題により、Swap-in 後に 再開された VE プロセスのスレッドから、他のスレッドやプロセスに よって更新されたデータが見えない場合があります。これにより、データ 化けや MPI プログラムのストールが発生します。 この問題は、NUMA モードで以下のいずれかの条件を満たした場合のみ 発生します。 - 実行されている NUMA ノードとは異なる NUMA ノードの VE メモリを 使用する VE プロセスをスワップインし再開した場合。 - A100-1 シリーズ上の MPI プログラムを実行する VE プロセスを スワップインし再開した場合。 概要 : マルチスレッドプログラムにおいてRLIMIT_CPUによる資源制限が 正しく機能しない問題の修正 タイプ : バグ修正 詳細 : マルチスレッドプログラムがRLIMIT_CPUによる資源制限(ulimitから引き継い だか、setulimit(2)かprlimitコマンドかVE_LIMIT_OPTを使ってセットされた) 付きで実行された時、スレッドグループのCPU実行時間がソフトリミットに 到達したあと、マルチスレッドプログラムはSIGXCPUシグナルを受信しません 概要 : 幾つかのプロセスのVEプロセスアカウンティングデータがアカウンティングの 有効化が2回成功すると採取できなくなる問題の修正 タイプ : バグ修正 詳細 : VEプロセスアカウンティングが既に有効な時にユーザが再度有効化した場合、 同時に終了した1つ以上のプロセスのアカウンティング情報が採取できません。 これはログローテーションの際にも起こります。 概要 : VEの'sar -w' コマンドが余分な改行を追加してしまう問題の修正 タイプ : バグ修正 詳細 : RHEL8環境において、VEの'sar -w' コマンドが統計情報を出力する各行の後 ろに余分な改行を追加してしまいます。 概要 : veosが再起動する際 'restart_ve_psacct' が 'psacct-ve' サービスを 開始させない問題の修正 タイプ : バグ修正 詳細 : RHEL8環境において、veosが再起動する際'psacct-ve' サービスが既に有効 であれば、'restart_ve_psacct' スクリプトが 'psacct-ve' サービスを 開始させることが出来ません。 概要 : プロセスアカウンティングが、ログローテーションによって名前が変更された 古いファイルに書き込まれ続けてしまう問題の修正 タイプ : バグ修正 詳細 : cronジョブによってVE psacct のログローテーションが実行され 'psacct-ve' サービスが有効である場合、VEOSが新しく生成されたファイルの代わりに ログローテーション後の名前が更新された古いファイルにプロセスアカウン ティング情報を書き込みます。 概要 : VEノード0番がオフラインの時 'vmstat' コマンドと 'mpstat' コマンドが アボートする問題の修正 タイプ : バグ修正 詳細 : RHEL8環境においてVEノード0番がオフラインであるか存在しない場合に 'vmstat' コマンドと 'mpstat' コマンドの両方がアボートします。また、 'vmstat' コマンドはRHEL7環境においてもVEノード0番がオフラインであるか 存在しない場合にアボートします。 概要 : VE memory mappingに関するVEOSのログを改善 タイプ : 機能強化 Detail : VE memory mappingに関するVEOSのログについて、ログレベルを適切なもの へ変更しました。 概要 : VE memory mappingデーモンの性能改善 タイプ : 機能強化 詳細 : IB HCAドライバの要求に対するVE memory mappingデーモン(vemmd)の応答 時間が改善されました。この機能強化はMPIの性能改善につながります。 2.5 この節は VEOS version 2.4.3 から 2.5 の変更を記載しています。 概要 : RHEL8.1/x86_64サポート タイプ : 機能拡張 詳細 : RHEL8.1/x86_64 が新たにサポートされました。サポートしている プラットフォームとオペレーティングシステムについては README を 参照してください。 概要 : VH プログラム向けの不要なアーカイブファイルと libtool アーカイブ の削除 タイプ : 機能拡張 詳細 : 開発パッケージから VH プログラム向けのアーカイブファイル(.a) と libtool アーカイブ(.la)を削除しました。VH プログラムは ライブラリに動的リンクされるため、これらのファイルは不要です。 VE プログラム向けのアーカイブファイルと libtool アーカイブは、 従来通り、提供されます。 概要 : VEOSのコアファイルのサイズ制限を1GBに変更 タイプ : 機能拡張 詳細 : VEOSのコアファイルのサイズ制限を無制限から1GBに変更しました。 概要 : VEO のログメッセージ改善 タイプ : 機能拡張 詳細 : veo_load_library() の失敗の原因が VEO のログファイルに記録されます。 概要 : 新しいコンテキストを有効にした後にVEスレッドがアボートする問題の修正 タイプ : バグ修正 詳細 : 新しいコンテキストがmakecontext() APIによって先に変更されていた場合、 そのコンテキストをswapcontext()を利用して有効にした後 VEスレッドはアボートします。 概要 : スワップアウトされたプロセスが存在する場合に VE プログラムの性能が 低下する場合がある問題の修正 タイプ : バグ修正 詳細 : プロセスまたはスレッドの作成時に "Partial Process Swapping" によって スワップアウトされたプロセスが存在する場合、プロセス生成アルゴリズムが 適切ではないために、2つの実行中のスレッドに同じコアが割り当てられる 可能性があります。 この場合、VE プログラムのパフォーマンスが低下します。 ユーザは pidstat コマンドによって、スレッドがどのコアで実行されているか を確認できます。 概要 : プロセスをスワップアウトしても負荷調整が行われない問題の修正 タイプ : バグ修正 詳細 : コア数より多くのスレッドが VE 上で動作している場合、VEプログラムの 性能は著しく低下します。この時、"Partial Process Swapping" でいくつかの プロセスをスワップアウトし、実行中のスレッド数をコア数以下に減らしても 負荷調整が行われず、VE プログラムの性能は改善されません。 概要 : errno が既にセットされている時 clock_gettime() が失敗する問題の修正 タイプ : バグ修正 詳細 : '-no-proginf' オプション付きでコンパイルしたプログラムが、errno が 非 0 の状態で、初めて clock_gettime() を呼び出すと、clock_gettime() は失敗します。 概要 : VEO が共有ライブラリのロードに失敗する場合がある問題の修正 タイプ : バグ修正 詳細 : veo_load_library() は参照されないシンボルの解決ができない場合、 共有ライブラリのロードに失敗します。 概要 : VH メモリリークの修正 タイプ : バグ修正 詳細 : VE 用 MPI プロセスが他の VE ノードのプロセスとデータを転送する 場合、少量のメモリがリークする場合があります。 2.4.3 この節は VEOS version 2.4.1 から 2.4.3 の変更を記載しています。 概要 : システムコール処理中に VEOS が異常終了する問題の修正 タイプ : バグ修正 詳細 : VEOS が VE プログラムからのシステムコール要求を処理した後、VE コアの実行を開始するときに、意図しないタイムアウトを検出し、 VEOS が異常終了することがあります。VEOS が異常終了すると、実行 中のVEプロセスも異常終了します。 2.4.1 この節は VEOS version 2.4 から 2.4.1 の変更を記載しています。 概要 : VEO を介したftrace 機能のサポート タイプ : 機能拡張 詳細 : 以下の条件がすべて満たされた場合、ftrace のランタイムライブラリ によってftrace.out ファイルが生成されます。 - ユーザが"-ftrace" オプション付きでVE プログラムのリンクとコ ンパイルをする。 - VEO プログラムが veo_proc_destroy() を呼び出す。 詳しくは、VEOSドキュメント "The tutorial and API reference of veoffload" を参照してください。 概要 : VEO コンテキストのスタックサイズを指定できる新しい VEO API を サポート タイプ : 機能拡張 詳細 : VEO は VEO コンテキストのスタックサイズを属性として指定できる 新しい API をサポートしました。 ユーザは新しい API を利用する ことで、指定したサイズのスタックを持つ VEO コンテキストを作成 することができます。 詳しくは、VEOSドキュメント "The tutorial and API reference of veoffload" を参照してください。 概要 : veorun のラインタイムライブラリサーチパスの変更 タイプ : 機能拡張 詳細 : veorun は VE 向けの実行バイナリであり、VEO が VE プログラムを 実行するために利用します。veorun のランタイムライブラリサーチ パスを /opt/nec/ve/lib に変更しました。これにより、ユーザが veo_load_library() でロードする共有ライブラリは 'ncc'、'nfort' コンパイラの特定のバージョンのランタイムライブラリに依存しなく なります。 概要 : clock_gettime() システムコールの性能改善 タイプ : 機能拡張 詳細 : 下記のクロックIDを指定したときの clockgettime() システムコール の性能改善を行いました。システム時間の取得のため、プロセスまた はスレッドが下記のクロックID を指定して clock_gettime() を実行 したとき、最初の実行は VH のシステムコールの結果を返します。以 降の実行では、同じスレッドグループに対しては VH のシステムコー ルではなく、VE 側で算出した時刻を返します。 CLOCK_REALTIME CLOCK_REALTIME_COARSE CLOCK_MONOTONIC_COARSE CLOCK_MONOTONIC_RAW CLOCK_BOOTTIME CLOCK_THREAD_CPUTIME_ID 概要 : 実行可能な VE プロセスは直ちに VE コアに割り当てるように VEOS スケジューラを更新 タイプ : 機能拡張 詳細 : VEOS スケジューラは、実行可能な VE タスクを次のスケジューラの タイマーインターバルが来るまで VE コアに割り当てませんでした。 この機能拡張により、VE コアが他にタスクを実行していない時、 VEOS スケジューラは実行可能 VE タスクをVE コアに割り当てます。 概要 : スタックリミットを超過したときの VE タスク異常終了処理の変更 タイプ : 機能拡張 詳細 : VEタスクがスタックリミットを超過したとき、"Unable to grow stack" のメッセージと共に VE タスクを異常終了するようにしました。 概要 : VE タスクのスタックがスタックリミットを超えて拡張する問題の修正 タイプ : バグ修正 詳細 : スタックリミット内に収まらないサイズのスタック領域を要求された 場合、VEOS は VE タスクのスタックリミットを超えてスタック領域を 割り当てます。 概要 : ユーザがジョブスケジューラを通して VEO プログラムを実行した場合 に VEO プロセスの作成に失敗する場合がある問題の修正 タイプ : バグ修正 詳細 : 以下の条件がすべて満たされた場合、VEO プロセスの作成に失敗する 場合があります。 - ユーザがジョブスケジューラを通じて VEO プログラムを実行する。 - 上記の VEO プログラムが veo_proc_create_static() を呼び出す。 概要 : VEOS シャットダウン中の異常終了の修正 タイプ : バグ修正 詳細 : シャットダウン中に無効または削除済みのタスクのデータにアクセス し VEOS が異常終了することがあります。 2.4 この節は VEOS version 2.3 から 2.4 の変更を記載しています。 概要 : VEのFortranプログラム向けVH Call APIのサポート タイプ : 機能拡張 詳細 : VH Call は VE プロセスから VH 用にコンパイルされた共有ライブ ラリ関数を呼び出すための機能です。ユーザはこのAPIを使ってVHの Fortranライブラリの関数、サブルーチンを呼び出すことができます。 詳細は VEOS のドキュメント "The tutorial and API reference of libvhcall-fortran" を参照してください。 2.3 この節は VEOS version 2.2.2 から 2.3 の変更を記載しています。 概要 : Docker を VE アプリケーションの実行用にサポート タイプ : 機能拡張 詳細 : ユーザは、 Docker を使用して、コンテナ内でVE アプリケーションを実 行できます。イメージをビルドするための Dockerfileは github で 入手可能です。 https://github.com/veos-sxarr-NEC/docker_container 概要 : 共有メモリのRSS値の計算アルゴリズムの変更 タイプ : 機能拡張 詳細 : 複数のVEプロセスによってVEのメモリが共有される際、VEOSはプロ セス間で、共有されるメモリサイズを分割します。 分割された値は 各プロセスのRSS(resident set size)に計上されます。 概要 : 資源制限をセットするための環境変数VE_LIMIT_OPTの追加とRSS制限のサポート タイプ : 機能拡張 詳細 : 環境変数VE_LIMIT_OPTによりVEプロセスの資源制限をセットすること が出来ます。 詳しくは、VEOSドキュメント "How to execute VE program" を参照してください。 プロセスがRSS制限を超過した場合、メモリ割り当てが失敗するよう になります。 概要 : Partial Process Swapping機能のサポート タイプ : 機能拡張 詳細 : 停止中VEプロセスのメモリの一部をVH側に確保したHugePagesに退 避し、VEメモリを解放する機能を提供します。その解放されたVE メモリは別のプログラムから利用可能です。VH側に退避したメモリ をVEメモリに復元し、VEプロセスをメモリ退避前の状態に戻す機能 を提供します。 使用方法はVEOSのドキュメント "VEOS Partial Process Swapping リファレンス"を参照してください。 概要 : GDBの機能拡張 タイプ : 機能拡張 詳細 : 以下の機能強化があります。 - GDBのバージョンを7.11.1から7.12.1に更新しました。 - コマンドが追加されます。 VEOS のドキュメント"GDBの相違点"を参照してください。 概要 : 環境変数VE_ACC_IOのサポート タイプ : 機能拡張 詳細 : VE_ACC_IOに1をセットすることで、プロセスのI/Oオフロード方式を 高速I/Oに切り替えることが出来ます。また、VE_ACC_IOを削除する ことで、高速I/Oを無効にすることが出来ます。 概要 : VEO APIで作られたVEプロセスとその統計情報のコマンドによる表示 をサポート タイプ : 機能拡張 詳細 : VH 側の子スレッドからVEO APIによってVEプロセスを生成した際、 'ps', 'top', 'pidstat', 'prtstat', 'pmap' コマンドによって VEプロセスの情報を表示できるようにしました。 概要 : VH Call向け新規データ転送APIのサポート タイプ : 機能拡張 詳細 : VH Call で実行された関数から生成された VH 側スレッドから、VH 側 の関数を呼び出した VE 側スレッドのメモリに対して、データを送受信 することができます。 概要 : VE の GDB によるコアファイルの調査時に子スレッドではなくメイン スレッドの情報を表示する問題の修正 タイプ : バグ修正 詳細 : VEのGDBによるコアファイルの調査時に、子スレッドがプロセス終了を 引き起こしたとしても、メインスレッドの情報が表示されます。これは VEOSが常に現在実行されているスレッドとして親スレッドをマークして いたためです。 概要 : ゾンビ状態 ('Z') のメインスレッドに SIGSTOP が送られた際、 子 スレッドの状態が停止('T')に遷移しない問題の修正 タイプ : バグ修正 詳細 : ゾンビ状態('Z')のインスレッドにSIGSTOPが送られた際、スレッド グループ内の子スレッドの状態が停止('T')に遷移しません。 概要 : VEO を使用するプログラムにシグナルが配送されない問題の修正 タイプ : バグ修正 詳細 : veo_proc_create() の後、すべてのシグナルがマスクされるため、 VEO を使用するプログラムにシグナルが配送されません。 概要 : VEO によって実行されたプログラムが SIGCONT で再開しない問題 の修正 タイプ : バグ修正 詳細 : SIGSTOP から実行を再開するには SIGCONT を VEOS に通知する必要が あります。しかし libveo は SIGCONT を VEOS に通知していなかった ため、 SIGCONT で VEO を使用するプログラムの VE 部分が再開され ませんでした。 2.2.2 この節は VEOS version 2.2 から 2.2.2 の変更を記載しています。 概要 : VEO OpenMP プログラムの負荷均衡 タイプ : 機能拡張 詳細 : VE コア数を超えるスレッドが生成されたとき、 VEO は OpenMP スレッドとの衝突を避けるようにアフィニティを自動的に設定し ます。静的リンクの veorun バイナリを使用している場合は、 mk_veorun_static で同バイナリを再生成してください。 概要 : VEO コンテキストスレッド上での VH 関数呼び出しをサポート タイプ : 機能拡張 詳細 : VEO はVHの関数を VEO コンテキスト上で実行する新しい API 関数 veo_call_async_vh() をサポートします。 概要 : マルチスレッドの VE プロセスにおいて fork() がハングアップ する問題の修正 タイプ : バグ修正 詳細 : マルチスレッドの VE プロセスが fork() を実行し、それと同時に 他のスレッドが、開始アドレスまたはサイズが 8 バイト境界では ない read() の I/O を行った場合、fork() はハングアップします。 概要 : VEO による 64 ビット未満の引数を持つ VE 関数呼び出しが未定義 動作する問題の修正 タイプ : バグ修正 詳細 : VEO は引数を符合拡張またはゼロ拡張せずに渡していたため、 64 ビットより小さい整数引数の上位ビットが未定義です。この未定義 より、そのような整数引数を持つ VE 関数呼び出しが未定義動作と なります。 2.2 この節は VEOS version 2.1.3 から 2.2 の変更を記載しています。 概要 : 命令キャッシュ性能の改善 タイプ : 機能拡張 詳細 : VE コアの命令キャッシュ性能を改善するため、VE プロセスのメモリ レイアウトを変更しました。この変更は VE プログラムの性能改善に つながります。 新しいメモリレイアウトは、テキストセクションとデータセクション の間に 1024 バイト以上の空間が必要です(実行ファイルまたは共有 ライブラリで定義されます)。もし空間が 1024 バイト以下の場合、 "Failed to validate the gap between text/data" のエラーメッ セージと共にロードは失敗します。そのような場合は、実行ファイル または共有ライブラリを再リンクしてください。 've_validate_binary' コマンドは、空間サイズをチェックできます。 詳細は次のトピックを参照してください。 概要 : 新コマンド ve_validate_binary タイプ : 機能拡張 詳細 : 新しいコマンド /opt/nec/ve/bin/ve_validate_binary が追加されま した。このコマンドは、実行バイナリと共有ライブラリのテキスト セクションとデータセクションの間のサイズを確認します。もし空間 サイズが 1024 バイト以下の場合、次のメッセージが表示されます。 "DATA/TEXT gap is less: " 概要 : HW 例外に対応して、シグナルハンドラの実行中にセットされる si_code について値を更新 タイプ : 機能拡張 詳細 : シグナルハンドラ起動時に引数として渡される siginfo_t 構造体の si_code を更新しました。以下は更新された si_code と対応する HW 例外のリストです。 HW exceptions si_code Missing page exception 'SEGV_MAPERR' Memory access exception 'BUS_ADRALN' Host missing page exception 'SEGV_MAPERR' Host missing space exception 'SEGV_MAPERR' I/O access exception 'BUS_ADRERR' Illegal instruction format exception 'ILL_ILLOPC' 概要 : VE ノード番号の明示的な指定を不要にする VEO API の改善 タイプ : 機能拡張 詳細 : ユーザーは VE ノード番号としてveo_proc_create() や veo_proc_create_static() に -1 を指定できます。-1 が指定された 場合、VE プロセスはデフォルトのVE ノード上に作成されます。-1 が指定され環境変数VE_NODE_NUMBER が設定されている場合、VE プロ セスはVE_NODE_NUMBER で指定された VE ノード上に作成されます。 概要 : ジョブスケジューラのための VEO API の改善 タイプ : 機能拡張 詳細 : ユーザーがジョブスケジューラを通して VEO API を使う プログラム を実行する場合、プログラムによって指定されるVEノード番号は論理 番号として扱われ、ジョブスケジューラよって割り当てられた物理 VE ノード番号に変換されます。例えば、プログラムが VE ノード番 号に 0 を指定し、ジョブスケジューラが VEノード #4, #5, #6 を割 り当てた場合は、VE ノード #4 でVEプロセスが生成されます。 概要 : GDBの機能拡張 タイプ : 機能拡張 詳細 : 以下の機能強化があります。 - GDBは、実行バイナリのパスを指定しなくても、VEプロセスにアタッ チするすることができます - GDBは"target"と"target core"コマンドをサポートします - GDBは入力/出力リダイレクションを使用することができます。 概要 : ジョブスケジューラによるVEノードの割り当てのチェック タイプ : 機能拡張 詳細 : VEOSが、ジョブスケジューラによるVEノードの割り当てをチェックし ます。ジョブ・スケジューラがVEノードを一つも割り当てていない場 合は、VEプログラムの実行が失敗します。ジョブスケジューラを使わ ずに、直接VEプログラムを実行した場合は、割り当てのチェックは行 われずに、VEプログラムが実行されます。 概要 : 例外発生後に新しいリクエストがリクエストキューに入れられる 問題の修正 タイプ : バグ修正 詳細 : VEO APIを使って呼び出された関数が例外を発生させた場合、 同一のコンテキストを使って関数を実行することができなくなり ます。例外発生後、発行された新しいリクエストはリクエスト キューに入れられます。ユーザーがリクエストの結果を待ち合わせる と該当のコンテキストは受け付けた新しいリクエストを実行しない ため、VEO APIがハングアップしたようになります。 概要 : 終了した孤児 VE プロセスの VE メモリについて、その親 VE プロ セスが VE 用 time コマンドで実行されていた場合、解放されない 問題の修正 タイプ : バグ修正 詳細 : VE 用 time コマンドで実行された親 VE プロセスが子プロセスより も先に終了した場合、孤児 VE プロセスの終了後 VE メモリが解放 されません。 概要 : ネイティブ環境を参照する時、ロケールに関連する API がエラーを 返す問題の修正 タイプ : バグ修正 詳細 : ロケールに関連する API を使用している VE プロセスが LANG 環境 変数で指定されたネイティブ環境 (eg. LANG=en_GB.UTF-8, LANG=en_US.UTF-8) を参照すると、エラー ENOENT を返します。 概要 : GDBが"backtrace"コマンドでglibcの関数を表示できない問題を修正 タイプ : バグ修正 詳細 : GDBが"backtrace"コマンドを実行した場合に、glibcの関数を正しく 表示することができません。 概要 : GDBが不正なベクトルレジスタを取得するのを修正 タイプ : バグ修正 詳細 : GDBが正しくベクトルレジスタを扱わないため、GDBが ベクトルレジスタを表示すると、不正な値が表示されます。 概要 : __FE_DENORM マクロの利用で意図しない動作を起こす問題の修正 タイプ : バグ修正 詳細 : VE は デノーマル数をサポートしていないため、__FE_DENORM マクロ を利用すると意図しない動作を起こします。そのため、__FE_DENORM マクロを削除しました。 2.1.3 この節は VEOS version 2.1 から 2.1.3 の変更を記載しています。 概要 : gettimeofday() の引数 timezone を指定した時の性能を改善 タイプ : 機能拡張 詳細 : gettimeofday() の引数に timezone が指定されたとき、初回の 呼び出しはシステムコールを起動しますが、それ以降の呼び出しでは VE 側でタイムゾーンを返す関数を起動するようにしました。これ は gettimeofday() の性能を改善します。 概要 : VH 側の子スレッドからの VEO API 呼び出しをサポート タイプ : 機能拡張 詳細 : VH 側の子スレッドから VEO API を呼び出して、VE プロセスを生成 できるようにしました。VE プロセスが VH 側の子スレッドから生成 された場合は、VE DMA とVH-VE SHM API は利用できません。 概要 : 16ビットと8ビットの整数と符号なし整数の引数をセットできる 新しいVEO API をサポート タイプ : 機能改善 詳細 : VEO は16ビットと8ビットの整数、符号なし整数をセットできる 新しいVEO API をサポートしました。 ユーザはVEO のAPI を使うことによってveo_args に16ビットの 整数、符号なし整数、8ビットの整数、符号なし整数をセット できるようになったため、VE プロセスへ4種の整数を渡すことが できます。 概要 : Fortran で記述されたVE プログラムをサポート(VEO) タイプ : 機能改善 詳細 : Fortran で実装したライブラリを、4倍精度実数と可変長文字列の 引数と返り値を除き、サポートしました。 概要 : シンボルを公開しない静的ライブラリのリンクのサポート (VEO) タイプ : 機能拡張 詳細 : ユーザが静的 veorun を作成する際、mk_veorun_static の新しい --link-nosym オプションを指定することで、シンボルを公開しない 静的ライブラリをリンクできるようになりました。 本機能は、BLAS などの大きなライブラリに依存するプログラムの 消費メモリ削減、プロセス起動やシンボル検索を高速化します。 概要 : VE プロセス生成の性能を改善 タイプ : 機能拡張 詳細 : VE プログラムのロード高速化のため、VE プロセスのロード機能の 最適化を行いました。また、割り当てられたコアがアイドル状態だっ た場合、ただちにプロセスを実行するように、スケジューリング機能 の改善を行いました。 概要 : 新しく生成した VE プロセスの PPID に VE プロセスを生成した プロセスの PID を表示するために、 アカウンティングファイルの PPID の値を変更 タイプ : 機能拡張 詳細 : ve_exec や VE 用コマンド(taskset, prlimit, time, strace 等) に よって実行された VE プロセスについて、 dump-acct コマンドが 表示する PPID に '1' ではなく 'VE プロセスを生成したプロセスの PID' を表示するようにしました。 概要 : VE プロセスが system() を実行して生成した VH プロセスが終了 するまで、VE プロセスのメモリが解放されない system() の問題を 修正 タイプ : バグ修正 詳細 : VE プロセスが system() を呼び、VH プロセスをバックグラウンド で実行した場合 (例: system("/bin/sleep 180 &"))、VE プロセスが 終了していたとしても、system()で生成sされた VHプロセスが終了 するまで VE プロセスのメモリ資源は解放されません。 概要 : system() の 'command' 引数で示される入力文字列が破壊される 問題の修正 タイプ : バグ修正 詳細 : VE プログラムが system(command) を実行した時、 system() の 意図しない動作を引き起こす余分な文字が command 引数の文字列に 追加される場合があります。 概要 : gettimeofday() を呼び出してから 1 時間以上後に gettimeofday() を呼び出した時、誤った'timeval' 構造体の値が返却される問題の 修正 タイプ : バグ修正 詳細 : VE プログラムが gettimeofday() を呼び出し、1時間以上後に再び gettimeofday() を実行した場合、'timeval' 構造体に誤った値が 入れられて返却されます。 概要 : setitimer() でタイマを無効にしている最中にタイマが満了した場合 の SIGALARM 配送の問題を修正 タイプ : バグ修正 詳細 : VE プロセスが登録済みのタイマを無効にするために setitimer() を 実行した時に同時にタイマが満了した場合、SIGALARM シグナルは setitimer() から戻った後に VE プロセスに配送されます。 setitimer() の実行中でも SIGALARM がされるように修正されます。 概要 : VE AIOで読み込んだデータが不正になる問題の修正 タイプ : バグ修正 詳細 : ve_aio_read()を多重に実行する場合、以下の条件のどちらかが成立 するとデータ化けを起こす場合があります。 - VE側バッファの開始アドレスが8 の倍数でない - VE側バッファのサイズが8の倍数でない 概要 : libveosinfo ライブラリを使う VEO プログラムが異常終了する問題の修正 タイプ : バグ修正 詳細 : VE および VEOS の情報取得ライブラリ 'libveosinfo' とリンクした VEO プログラムが、代理プロセスを構成する libvepseudo ライブラリ (VEO が 使用) とのシンボル衝突により、プログラムが意図せずクラッシュすること がありました。衝突を回避するため、 libvepseudo の内部関数・変数の シンボルを非公開にしました。 概要 : NOSUID でマウントされているディレクトリ上の静的リンクした veorun を実行できない問題の修正 タイプ : バグ修正 詳細 : "nosuid" オプション付きでマウントされているファイルシステム上に ある実行ファイルで静的リンクしたveorun を使うと失敗します。 概要 : VEO のリクエストがストールする問題の修正 タイプ : バグ修正 詳細 : VEO API を使って呼び出された関数が例外を発生させた場合、 同一のコンテキストを使って関数を実行することができなくなります。 しかし非同期のVEO API を使って関数を呼び出していた場合、 VEO ライブラリの中で競合状態が発生すると、例外を発生させた コンテキストが新たな要求を受け付ける場合があります。 その場合、該当のコンテキストは受け付けた要求を実行しないため、 要求に対して払い出されたリクエストID を使って結果を待ち合わせると、 VEO API がハングアップしたようになります。 概要 : VE プロセスのスタック領域の権限が'PROT_WRITE'である問題の修正 タイプ : バグ修正 詳細 : VE 用 pmap コマンドが VE プロセスのスタック領域の権限を 'PROT_WRITE|PROT_READ' ではなく'PROT_WRITE' と表示します。 概要 : VE 用 strace コマンドでトレースしているプロセスが execve() システムコールを実行した時、strace コマンドが失敗する問題の修正 タイプ : バグ修正 詳細 : トレースしている VE プロセスが execve() システムコール、または exec() 系の機能を呼んだ場合、strace コマンドがエラー "Bad address" を表示して終了します。 概要 : 'strings.h' をインクルードしているユーザプログラムを 'nc++' コンパイラで '-U__GNUC_MINOR__' を指定してコンパイルした場合に エラーになる問題の修正 タイプ : バグ修正 詳細 : 'strings.h' をインクルードしているユーザプログラムを 'nc++' コンパイラで '-U__GNUC_MINOR__' を指定してコンパイルした場合に コンパイラがエラーを返します。 概要 : VH Callを利用するプログラムのコンパイル時に警告やエラーが出る 問題の修正 詳細 : vhcall_args_alloc()を利用するCプログラムをコンパイルすると警告 がでます。-std=c11オプション指定する、もしくはC++プログラムとし てコンパイルする場合はエラーになります。 2.1 この節は VEOS version 2.0.3 から 2.1 の変更を記載しています。 概要 : NUMA モードのサポート タイプ : 機能拡張 詳細 : VE カード (HW) のパーティショニングモードが利用可能になるのに ともない、パーティショニングモードを制御するために VEOS NUMA モードを提供します。パーティショニングモードのとき、ユーザは VE カードを NUMA の様に扱う事が出来ます。使用方法は VEOS の ドキュメント"VE プログラムの実行方法"を参照してください。 概要 : VE Offload機能 (VEO) のサポート タイプ : 機能拡張 詳細 : VEO はVE 上でアクセラレータプログラミングを提供します。VEO は VH 上のメインプログラムから VE プログラムの実行を制御します。 VEO を用いて、VE とVH 両方の計算資源を使うプログラムを開発する ことができます。詳細は VEOS のドキュメント "The tutorial and API reference of veoffload" を参照してください。 概要 : VH Call API の引数渡し改善 タイプ : 機能拡張 詳細 : VH Call は VE のプロセスから VH 用にコンパイルされた共有ライブ ラリ関数を呼び出すための機能です。この改善で任意の個数、任意の 型の引数渡しを伴う関数呼び出しが可能になります。また、改善され た API を用いて Fortran ライブラリの関数を呼び出すことも可能で す。詳細は VEOS のドキュメント "The tutorial and API reference of libsysve" を参照してください。 概要 : VE 用 glibc 'ldd' コマンドのサポート タイプ : 機能拡張 詳細 : ldd は VE アーキテクチャ用のダイナミックリンクのバイナリが要求 する共有ライブラリを表示します。 概要 : Infiniband 環境での 高速 I/O のサポート タイプ : 機能拡張 詳細 : Infiniband 環境での高速 I/O をサポートされました。VEOS のドキュ メント"VEプログラムの実行方法"を参照してください。 概要 : VE_NODE_NUMBER 環境変数がセットされていない場合、VE ノード '0' を使うように複数のコマンドの動作を変更 タイプ : 機能拡張 詳細 : VE_NODE_NUMBER 環境変数によってどのノードも指定されていない時、 以下のコマンドはデフォルトで VE ノード '0' を使います。 - tload, top (オプションにかかわらず) - iostat, mpstat, pidstat, sadc, sadf, sar, vmstat, free (delay/interval/count オプションを指定した場合) - accton (ファイル名を指定した場合) - sa ('--other-usracct-file/--other-savacct-file/ --other-acct-file' オプションを指定した場合) - taskset, prlimit, time, strace (プロセスを起動する場合) 概要 : VE-VH間のデータ転送性能の向上 タイプ : 機能拡張 詳細 : VE-VH間データ転送におけるVEドライバ処理の効率化を行いました。 この効率化により、read()/write()システムコール等のVE-VH間の データ転送性能が向上します。 概要 : VEOSが作成するログファイルの名前を、VE ノード番号を含むように改善 タイプ : 機能拡張 詳細 : VEOS が作成するログファイルの名前を、 veos.log.X から veosN.log.X に変更しました(N は VE ノード番号で、X は通し番号 です)。ログファイルが保存されるディレクトリは /var/opt/nec/ve/veos から変更はありません。 概要 : musl-libc 関連のパッケージの削除 タイプ : 機能拡張 詳細 : NEC が VE 向けの musl-libc のサポートを終了したため、 musl-libc 関連パッケージを削除しました。削除したパッケージは次の通りです。 musl-libc-ve musl-libc-ve-devel libsysve-musl libsysve-musl-devel veos-musl-header これらがインストールされている場合は、アンインストールをお願い します。 概要 : VE プロセスの環境変数に常に VE_NODE_NUMBER をセットするように execve() システムコールを改善 タイプ : 機能拡張 詳細 : execve() の envp (第三引数) に NULL が指定された場合でも、 環境変数 VE_NODE_NUMBER が設定されるように execve() の機能を 改善しました。プロセスが実行される VE ノード番号は VE_NODE_NUMBER によって決定されます。 概要 : C++プログラムのためのlibsysveヘッダファイル更新 タイプ : 機能拡張 詳細 : C++ ユーザプログラムがインクルードするために、 ヘッダファイル libvhcall.h, veaio.h, vedma.h, vhshm.h を更新しました。 概要 : glibc 内の I/O バッファ割り当て方法を変更 タイプ : 機能拡張 詳細 : ファイル I/O API (fread()/fwrite()等) は I/O バッファ を 無名ページからではなく、ヒープから取得します。 概要 : VE プロセスの開始時間、経過時間、ユーザ時間の計算アルゴリズム の改善 タイプ : 機能拡張 詳細 : 経過時間、ユーザ時間の単位を VH と同じになるように、計算アル ゴリズムを改善しました。また、VE プロセスの開始時間を execve() 実行後も引き継ぐように改善しました。 概要 : VE 用コマンドと getppid() の間で PPID 値に違いが出ないように VE 用コマンドの機能を更新 タイプ : 機能拡張 詳細 : 従来 VE 用コマンドは ve_exec で起動された VE プロセスの PPID に 1 を表示していました。'top', 'ps', 'prtstat' コマンドは VE プロセスの PPID に、そのプロセスを起動したシェルの PID を表示 するようになります。また、その挙動を getppid() システムコール と一致させました。 概要 : 共有メモリマップドファイルのデータがファイルに書き戻されない 問題の修正 タイプ : バグ修正 詳細 : 'MAP_SHARED' フラグと'PROT_WRITE'権限を指定して作成したメモリ マップドファイルを、munmap() の呼び出し、または プロセスを終了 する前に 'MAP_PRIVATE' フラグと 'PROT_READ' を指定して再度 マップしなおすと、関連付けられたファイルにデータを書き戻しま せん。 概要 : メモリマップドファイルの msync() が失敗する問題の修正 タイプ : バグ修正 詳細 : mmap() の第一引数が有効な値であり、かつ、以下のどちらかの条件 が成立する場合に、メモリマップドファイルへの msync() が失敗し ます。 - メモリマップドファイルの開始アドレスが 512MB 境界ではなく、 領域が次の 512MB 境界を越え、使用ページサイズが 2MB ページ である場合 - メモリマップドファイルの開始アドレスが 16GB 境界ではなく、 領域が次の 16GB 境界を越え、使用ページサイズが 64MB ページ である場合 メモリマップドファイルが mmap() の第一引数に NULL を指定され て作成された場合は、この問題は発生しません。 概要 : MAP_FIXED 無しにユーザがアドレス指定して要求した mmap が失敗 する問題の修正 タイプ : バグ修正 詳細 : ユーザが、 2MB ページのメモリを 512MB 境界でない開始アドレス、 または、64MB ページのメモリを 16GB 境界でない開始アドレスを 指定して、 MAP_FIXED 無しに mmap() を要求した場合、メモリマッ ピングが失敗する場合が有ります。 概要 : 特権ユーザが "/" にコアダンプファイルを作成しようとした時、 誤ったファイル名で作成される問題の修正 タイプ : バグ修正 詳細 : 特権ユーザが VE プロセスのコアダンプを採取するため、パス "/" に VE コアダンプファイルを作ろうとすると、VEOS が誤った名前で VE コアダンプファイルを作成します。 概要 : setjump() を共有ライブラリの中から実行するとプログラムがセグ メンテーションフォールト を起こす問題の修正 タイプ : バグ修正 詳細 : setjmp() が共有ライブラリから実行されると、VE レジスタの一つ が予期せず更新されるため、プログラムの処理が進んだ所でセグ メンテーションフォールトが発生します。 概要 : "/opt/nec/ve/bin/pidstat -l" がセグメンテーションフォールトを 起こす問題の修正 タイプ : バグ修正 詳細 : VE 用コマンド "/opt/nec/ve/bin/pidstat -l" がゾンビプロセスの 情報を表示しようとすると、コマンドがセグメンテーションフォール トにより終了します。 概要 : VE 用 time コマンドで起動された VE プログラムが execve() で VH プログラムを実行した場合、VE 用 time コマンドが失敗する問題 を修正 タイプ : バグ修正 詳細 : VE 用 time コマンドで起動された VE プロセスが execve() で VH プロセスを実行すると、time コマンドは "No such process" エラー で失敗します。 概要 : アカウンティングファイルにユーザが作成したのではない "Dummy_task" が記録される問題の修正 タイプ : バグ修正 詳細 : VE 用プロセスアカウンティングが有効で、VE 用 time コマンドが プロセスの実行に失敗した場合、アカウンティングファイルに "Dummy_task" エントリが記録されます。しかし、その名前のタスク が作成されることは有りません。 概要 : VH 用バイナリを VE 用 time コマンドで起動すると、アカウン ティングファイルに "Dummy_task" が記録される問題の修正 タイプ : バグ修正 詳細 : VE 用 time コマンドで VH 用バイナリを実行すると、実行は成功 しますが、 VE 用のアカウンティングファイルに "Dummy_task" が 記録されます。そのため同様の VE 用コマンド taskset、prlimit、 time を VE バイナリのみ実行可能とし、VH バイナリをこれらの コマンドから直接実行できないように変更しました。 2.0.3 この節は VEOS version 2.0.1 から 2.0.3 の変更を記載しています。 概要 : glibc API が使用する内部バッファのメモリ消費改善 タイプ : 機能拡張 詳細 : VE バイナリのデフォルトページサイズに関わらず、printf()、 dprintf() などの内部バッファを利用する API は 2MB ページを 使用します。 デフォルトページサイズが 64MB の場合、 前の バージョンと比較して、これらの API のメモリ消費は 62MB 削減されます。 概要 : memcpy() 性能の改善 タイプ : 機能拡張 詳細 : 小さいサイズのデータコピー/転送にベクトル対応 memcpy() を使 用し、性能を改善しました。性能が改善される API は fread(), fwrite(), strcpy(), stpcpy(), strncat() などです。 概要 : system() のメモリ消費改善 タイプ : 機能拡張 詳細 : system() から VH プログラムを実行する際に VE メモリを消費し ないように、要求を VH 側で処理するようにします。ユーザは 僅 かなメモリ消費で VE から system() で VH プログラムを実行する ことができます。 概要 : glibc の特定バージョンにおける openat() の制限を解除 タイプ : 機能拡張 詳細 : 引数にフラグ "O_TMPFILE | O_RDWR" と mode を指定した openat() によってシンボリックリンクファイルを作成し、それを引き数 (oldpath) に指定して linkat() でハードリンクファイルを作成した 時の、パーミッションを設定するライブラリ処理を修正しました。 概要 : VE プロセスレジスタを取得しようとした時 VEOS 性能が低下する 問題の修正 タイプ : バグ修正 詳細 : libveosinfo ライブラリに含まれる ve_get_regvals() を使って VE プロセスレジスタを取得しようとした時、VEOS の性能が著しく 低下します。 概要 : マルチスレッド環境において、sched_setaffinity() システムコール と taskset コマンドがセグメンテーションフォールトを起こすこと がある問題の修正 タイプ : バグ修正 詳細 : マルチスレッド環境において、sched_setaffinity() システムコー ルまたは、taskset コマンドによって、スレッドをある VE コアか ら別の VE コアに移動させた時に、スレッドのコンテキストの一部 であるメモリ/アドレス変換が新しい VE コアに復元されず、スレッ ドがセグメンテーションフォールト(SIGSEGV)を起こします。 2.0.1 概要 : VE 用 glibc のサポート タイプ : 機能拡張 詳細 : VE 用 glibc が利用できます。追加の情報については VEOS の ドキュメント "VEプログラムの実行方法" と "Cライブラリ (Glibc)の相違点" を参照してください。 概要 : 高速 I/O のサポート タイプ : 機能拡張 詳細 : 「高速 I/O」はVEとVH間のデータ転送を効率的に行うことで、I/O 性能を向上します。本機能は、'libveaccio' ライブラリに含まれ ます。このライブラリを実行時にロードすることで、高速I/Oが 有効になります。使用方法については、VEOS のドキュメント "VE プログラムの実行方法" を参照してください。 概要 : ノンアトミック I/O のサポート タイプ : 機能拡張 詳細 : read/write 系と send/recv 系のシステムコール (msghdr 構造体, mmsghdr 構造体を使う send/recv を除く) のノンアトミック I/O 版をサポートします。ノンアトミックモード I/O において、要求 されたサイズが 64MB を超える場合、I/O 命令は複数の 64MB 単位 の I/O に分割されます。このノンアトミック I/O は VH 側のメモ リ消費を削減します。 概要 : ve_exec が SIGSEGV で異常終了する問題の修正 修正 タイプ : バグ修正 詳細 : VE プロセスがマルチスレッドで動作している時、VE スレッドが exit_group() システムコールを実行すると、ve_exec の中で exit_group() の処理が VE タスクの状態を追跡するための領域 を解放します。同時に別のスレッドがその領域にアクセスしよう とすると、セグメンテーションフォールトが発生します。 概要 : ve_get_regvals() 実行中に VE プロセスがハングアップする問題 の修正 タイプ : バグ修正 詳細 : ve_get_regvals() の処理において、VEOS が誤った VE タスクの 扱いをしていたため、VE タスクが VE コアにスケジュールされ なくなります。その結果 VE プロセスはハングアップしたように なります。 概要 : execve() システムコールを実行するとグローバル変数 "environ" にエントリが重複して追加される問題を修正 タイプ : バグ修正 詳細 : VE プログラムが VE バイナリをロードする execve() を 再帰的に呼び出すと、LOG4C_RCPATH や VE_EXEC_PATH 等の環境 変数がグローバル変数 "environ" に重複して追加されます。外部 変数の総数が増えるため、execve() システムコールの失敗に 繋がります。 概要 : VE 用 'sadc' コマンドが終了しない問題の修正 タイプ : バグ修正 詳細 : VE 用 'sadc' コマンドは HW データのファイルの構文解析に失敗 した場合、ハングアップします。そのため、cron ジョブによって 定期的に起動された 'sadc' コマンドは残り続けます。 1.3.2 概要 : write() 系システムコールの性能を改善 タイプ : 機能拡張 詳細 : write() 系システムコールの性能を改善するために、システムコール 処理の VE メモリからのデータ読み込みを更新しました。 write() 系システムコールは write(), writev(), pwrite(), pwritev() が該当します。 概要 : VE-VH間のデータ転送性能の向上 タイプ : 機能強化 詳細 : VE ドライバが提供している、データ転送対象のVH メモリ管理機能 を改善しました。VH メモリ管理リストを改善したことにより、 read()/write()システムコール等のVE-VH間のデータ転送性能が向上 します。 概要 : VE AIO のログメッセージ改善 タイプ : 機能拡張 詳細 : いくつかのログメッセージを改善しました。VE AIOのエラーにより プロセスがアボートされる場合、標準エラー出力にメッセージを出 力します。 概要 : vfork() システムコールで生成された VE プロセスのスケジュー リング中に VEOS が異常終了する問題の修正 タイプ : バグ修正 詳細 : vfork() で生成された VE プロセスのプロセス管理情報が VEOS 内 で適切に設定されません。そのため、vfork で生成された子VEプロ セスのスケジューリングを行った際 VEOS が異常終了します。 概要 : vfork() システムコールで生成された VE プロセスがゾンビ状態で 残留する問題の修正 タイプ : バグ修正 詳細 : vfork() で生成された子VEプロセスが終了するとき、既に終了してい る親 VE プロセスを起こそうとして、VEOS の中でデッドロックを引 き起こした結果、子VEプロセスがゾンビ状態で残留します。 概要 : 代替シグナルスタック上でシグナルハンドラを連続して実行しよう とすると、VE プロセスがハングアップする問題の修正 タイプ : バグ修正 詳細 : VEOS がコアのレジスタを不完全に読み込むため、プロセスが代替 シグナルスタック上で動作していないと誤って認識します。この 問題は、動作不定の振る舞いを引き起こします。 概要 : ヒープの開始アドレスよりもヒープを減らそうとした場合、VE プロ セスが SIGSEGV を受信する問題の修正 タイプ : バグ修正 詳細 : brk() システムコールの処理が誤っていたため、ライブラリによっ てマップされた TLS 領域がアンマップされ、VE プロセスが SIGSEGV で終了します。 概要 : sysinfo() システムコールによって要求された 'freeram' フィール ドが適切にアップデートされない問題の修正 タイプ : バグ修正 詳細 : sysinfo() システムコールが適切に更新されていない誤った freeram (未使用メモリの総量) を返すため、VE プロセスは誤った 値を取得します。 概要 : pthread_exit() を実行しても VE プロセスの解放処理が実行され ない問題の修正 タイプ : バグ修正 詳細 : 終了処理中の VE スレッドに対し SIGCONT が送られた場合、VE プロセスの解放処理が正しく行われないため、 スレッドに関係 していたリソースが解放されないことがあります。 概要 : VE プロセスのスタックが延ばされた時に VE strace コマンドが VE プロセスを正しく実行できない問題の修正 タイプ : バグ修正 詳細 : VE strace コマンドは VE プロセスのスタックを伸長する grow() システムコールをトレースできないため、VE strace コマンドは 動作不定の振る舞いをします。 1.3 概要 : clock_gettime(), gettimeofday() の性能を改善 タイプ : 機能拡張 詳細 : 'CLOCK_MONOTONIC' を指定した clock_gettime() と、gettimeofday() の性能を改善しました。プロセスまたはスレッドが、 gettimeofday() によるシステム時間を要求、または clock_gettime()によるモノト ニック時間を要求した場合、最初のリクエストでは VH のシステム コールの結果を返します。それ以降の呼び出しにおいて、同じスレッ ドグループの時刻は VH のシステムコールを実行した結果ではなく、 VE 側で算出された値になります。 概要 : VE のための非同期な I/O 操作をサポート(VE AIO) タイプ : 機能拡張 詳細 : VE のための非同期な I/O 操作をサポートしました。VE AIO 用の関 数は 'libsysve' ライブラリに含まれます。VE と VH 間でのデータ 転送と実際の I/O 処理は非同期に行われ、VE 上のプログラムはその 間も処理を進めることができます。 概要 : ロード失敗の原因解析のための標準エラーメッセージ出力の追加 タイプ : 機能拡張 詳細 : 実行ファイルのロードが失敗した場合に、標準エラー出力にエラー メッセージを出力するように変更しました。このメッセージはユー ザにロード失敗について有益な情報を提供します。 概要 : VE プロセスが SIGBUS で異常終了する問題の修正 タイプ : バグ修正 詳細 : ユーザが共有ライブラリの bss 領域に futex を置いた場合、VE プロセスが SIGBUS で異常終了する場合があります。 概要 : VE プロセスが SIGFPE で異常終了する問題の修正 タイプ : バグ修正 詳細 : ユーザが mprotect() を NULL アドレスを指定して実行した場合、 VE プロセスが SIGFPE で異常終了する場合があります。 概要 : スレッドが無期限に停止する問題の修正 タイプ : バグ修正 詳細 : fork() によって作成された親プロセスが pthread_create() で作成 したスレッドが join しようとした時、親プロセスが既に終了して いると、スレッドは無期限に停止します。 概要 : write() 系システムコールが失敗することがある問題の修正 タイプ : バグ修正 詳細 : fork()/vfork()/system() を別のスレッドで同時に実行すると、 write() 系システムコールが失敗することが有ります。write(), writev(), pwrite(), pwritev() が該当します。 概要 : スレッドのシグナルマスクと保留中のシグナルが execve() 前後で 保存されない問題の修正 タイプ : バグ修正 詳細 : execve() の前後でスレッドのシグナルマスクが保存されません。 言い換えると、シグナルがブロックされたスレッドが execve() を 実行した後、新しくロードされたプロセスはシグナルがマスクされ ません。同様に、VEOS 内で保留している VE プロセス宛てのシグ ナルも execve() 前後で保存されません。 概要 : 代替シグナルスタックで実行していないにも関わらず、代替シグ ナルスタックで実行していると VE プロセスが誤った情報を返す 問題の修正 タイプ : バグ修正 詳細 : 代替シグナルスタックでシグナルハンドラを実行し、longjmp()で 通常のスタックに戻った VE プロセスについて、 VEOS は最新の スタック情報を保持していません。そのため sigaltstack() シス テムコールは、いまだに代替シグナルスタックで実行をしていると いう誤った情報を返します。 概要 : swprintf() が変換指定子 '%lc' に対し誤った値を返す問題を修正 タイプ : バグ修正 詳細 : swprintf() に '%lc' (ワイド文字)を指定したとき、書き込んだ バイト数ではなく、-1 を返します。 概要 : musl-libc が使用する、動的ロードしたデータ用に 2MB ではなく 64MB をユーザプロセスが消費する問題の修正 タイプ : バグ修正 詳細 : デフォルトページサイズが 64MB になるようにコンパイルされたプ ログラムが localtime() の様な API を使用する場合、ライブラリ は '/usr/share/zoneinfo/*' にある zoneinfo データ用に、必要 サイズが 2MB 以下であっても 64MB を消費します。 概要 : プロセス/スレッドの CPU 時刻 のクロック ID 指定時、 timer_create() が -1 ではなく、無効な値を返す問題の修正 タイプ : バグ修正 詳細 : clock_getcpuclockid()/pthread_getcpuclockid() によって取得 した clock_id を指定して timer_create() を実行した場合、 timer_create() は errno に EINVAL をセットして失敗しません。 (VE 用 timer_create() は プロセス/スレッドの CPU 時刻 の クロック ID をサポートしていません。) 概要 : プロセス/スレッドの CPU 時刻 のクロック ID を指定して、 clock_nanosleep() を実行したとき、-1 を返すのではなく、無期限 にスリープします。 タイプ : バグ修正 詳細 : clock_getcpuclockid()/pthread_getcpuclockid() によって取得 した clock_id を指定して clock_nanosleep() を実行した場合、 errno に EINVAL をセットして失敗しません。 (VE 用 clock_nanosleep() は プロセス/スレッドの CPU 時刻 の クロック ID をサポートしていません。) 概要 : VE のプロセスアカウンティング機能を一度も有効にした事がない 場合、アカウンティングファイルのログローテーションが失敗する 問題の修正 タイプ : バグ修正 詳細 : SELinux が有効で、一度も VE のアカウンティング機能を有効に していない場合のみ、"acct_data_t" であるべき "/var/opt/nec/ve/account" のコンテキストが誤った "var_t" に なっているため、 'cron.daily' によって起動された VE アカウン ティングファイルのログローテーションが失敗します。 1.2.2 概要 : バイナリ起動時とexecve システムコール実行時に渡す引き数と 環境変数の最大数を引き上げ タイプ : 機能拡張 詳細 : バイナリ起動時とexecve システムコール実行時に渡す事が可能な 引数の数と環境変数の数を 256 から 512 に増やしました。 概要 : ユーザレジスタを取得するための、 libveosinfo の新しい API タイプ : 機能拡張 詳細 : ve_get_regvals() という名前の新しい API が libveosinfo に追加 されました。この API は VH プロセスから VE プロセスのユーザレ ジスタの値を取得することができます。libveosinfo を使用する あなたのプログラムをビルドするためには、'veosinfo-devel' パッ ケージをインストールする必要があります。 概要 : VEOS 内においてスレッド生成処理に失敗したとき、VEOSが異常終了 する問題の修正 タイプ : バグ修正 詳細 : ve_exec が作成したメインプロセスからのスレッド生成要求が VEOS 内で失敗した場合、初期化途中の VE タスクの削除中に未初期化の フィールドにアクセスし VEOS が異常終了する場合があります。 概要 : シグナルハンドラ実行中に VE プロセスが kill される問題の修正 タイプ : バグ修正 詳細 : VEOS がシグナルハンドラのスタックフレームを作成するとき、DMA 用にアラインされていないメモリアドレスを設定するため、VE プロ セスがシグナルハンドラを実行するとき VE プロセスが異常終了す る場合があります。 概要 : 更新時に /dev/veslotN が消える問題の修正 タイプ : バグ修正 詳細 : "change" アクション発生時にリンク /dev/veslotN が削除されて いました。"change" アクションは一部の RPM パッケージの更新の 際に実行される 'udevadm trigger' コマンドにより発生します。 概要 : 'veos' パッケージのアップデートが進まなくなる問題の修正 タイプ : 回避策 詳細 : 古いバージョンの 'veos' パッケージは、アップデート時に 'systemd-binfmt' を再起動します。autofs 関連の問題のため、その 処理が完了せず、'veos' パッケージのアップデートが先に進まなく なることがあります。 概要 : 'top/mpstat/pidstat' コマンドが誤った user, idle を表示する 問題の修正 タイプ : バグ修正 詳細 : 'top' コマンドはデフォルトの表示において %Cpu(s) フィールドの user と idle のパーセンテージに誤った値を表示します。また、 'mpstat' と 'pidstat' コマンドも 更新の間隔/回数 を指定しない 場合に %user と %idle に誤った値を表示します。 概要 : 'prtstat' コマンドがいくつかの項目で誤った値を表示する問題の 修正 タイプ : バグ修正 詳細 : 'prtstat' コマンドは pgrp, tty_nr, session, tpgid, num_threads, exit_signal について誤ったデータを表示します。 概要 : clock_gettime() システムコールが誤ったエラー番号をセットする 問題の修正 タイプ : バグ修正 詳細 : 誤った clock_id を指定したとき、clock_gettime() は EINVAL で はなく EFAULT を errno にセットして失敗を返します。また、 clock_id が INIT プロセスの CPU 時刻である場合、VEOS は INIT プロセスを持たないため、errno に EINVAL をセットして失敗します。 1.2.1 概要 : VEOS 性能改善のため負荷調整機能を追加 タイプ : 機能拡張 詳細 : 負荷調整機能をサポートすることで、 VEOS は、実行キューに VE タスクが 2 つ以上登録されている VE コアから、VE タスクが無い VE コアに VE タスクを移動させます。この機能により、MPI を含む マルチプロセス/マルチスレッドプログラムの性能が改善します。 概要 : I/O性能の改善 タイプ : 機能拡張 詳細 : DMA転送の改善により、複数プロセスからの同時アクセスの I/O 性能が向上しました。 概要 : NOSUID でマウントされているディレクトリ上のプログラムが実行 できない問題の修正 タイプ : バグ修正 詳細 : "nosuid" オプション付きでマウントされているファイルシステム上 にある実行ファイルを、VEOS は起動または execve() で実行できま せん。 概要 : clock_gettime() が誤った timespec を返却する問題の修正 タイプ : バグ修正 詳細 : clock_gettime() に clock_getcpuclockid() で取得した他のプロセ スの CPU 時刻のクロック ID を指定しても、常に呼び出し元のプロ セスの実行時間を返します。 概要 : vfork() で作成した子プロセスが終了する前に親プロセスが実行を 再開する問題の修正 タイプ : バグ修正 詳細 : vfork() で作成した子プロセスが終了する前に親プロセスが実行を 再開すると、wait() の結果が意図しない結果になります。 概要 : マルチスレッドの VE プロセスが malloc() と free() を並列に実行 すると異常終了する問題を修正 タイプ : バグ修正 詳細 : musl-libc のメモリ管理データの保護に問題があり、 malloc() と free() を並列に実行するマルチスレッドの VE プログラムが異常 終了する場合があります。 概要 : mmap() が不正なエラーコードを返す問題を修正 タイプ : バグ修正 詳細 : mmap() が失敗するいくつかのケースに置いて、誤ったエラーコード が VE プログラムに返却されます。(例) 誤った size または fd が mmap() に渡された場合、EBADF が errno にセットされるべきところ、 EINVAL が errno にセットされます。MAP_FIXED フラグが NULL アド レスと共に mmap() に渡された場合、EPERM が errno にセットされ るべきところ、 ENOMEM が errno にセットされます。 概要 : getresgid() が不正なエラーコードを返す問題を修正 タイプ : バグ修正 詳細 : getresgid() の処理中、期待された引数の内の一つが失われ、予期 しない EFAULT が返却されることが有ります。 1.2 概要 : NEC システムソフトウェア向け DMA 転送性能改善 タイプ : 機能拡張 詳細 : ScaTeFS ライブラリ等、 VE プログラムにリンクされる NEC システ ムソフトウェア向けの DMA 転送機能をサポートします。これにより、 データ転送性能を改善できます。この機能は NEC システムソフトウェ ア専用に実装されているため、本機能をユーザプログラムが直接利用 した場合、NECは一切の技術サポートを行いません。 概要 : データ転送性能とメモリ消費の改善 タイプ : 機能拡張 詳細 : read()/write() 等のシステムコールを使った、大きなメモリ 転送の性能を改善しました。 概要 : VEプロセスからのメモリ解放要求に対するVEOSのレスポンス改善 タイプ : 機能拡張 詳細 : 物理メモリ解放初期化を非同期に行うように変更し、VEプロセス のメモリ解放要求のレスポンスを向上します。 新たにメモリを要 求された時に十分な物理メモリの初期化を完了していない場合、 要求したサイズの空き領域が確保されるまでメモリ割当要求は待 たされます。 概要 : libvepseudo のライセンスを LGPL に変更 タイプ : 機能拡張 詳細 : 疑似プロセスを構成するコンポーネントの一つである libvepseudo ライブラリのライセンスを GPL から LGPL に 変更しました。 概要 : VE プロセス 異常終了の修正 タイプ : バグ修正 詳細 : サイズが 0 のファイルをメモリにマップしている VE プログ ラム が vfork() を実行した時、 VEOS が再起動し、同ノード で動作している全ての VE プロセスが終了する場合があります。 概要 : VEOS の仮想メモリ消費量が増え続ける問題の修正 タイプ : バグ修正 詳細 : VE プロセスがコアを生成する時、VEOS の仮想メモリ使用量 は徐々に増加していき、コア生成終了後も仮想メモリ使用量 は元の値に戻りません。 概要 : VE で "host missing page exception" が発生しても SIGSEGV を VE プロセスが受け取れない問題の修正 タイプ : バグ修正 詳細 : VE プロセスはシグナル(SIGSEGV)受信時に終了させられること 無く、実行を継続します。 概要 : fork()に失敗し 子プロセスの生成に失敗する問題の修正 タイプ : バグ修正 詳細 : VE プロセスが無効な CPU_SET を指定して sched_setaffinity を実行した場合、それ以降の fork() は失敗します。 概要 : VH 起動時の psacct-ve サービス起動失敗の修正 タイプ : バグ修正 詳細 : psacct-ve サービスは VEOS が動作している事を前提に しています。psacct-ve サービスが 'enabled' に設定 されている場合、VH 再起動時に VEOS 起動よりも前に psacct-ve が開始され、サービス開始に失敗することが あります。 概要 : vmstat と sar コマンドの 'blocked' プロセスの値に不正 値が表示される問題の修正 タイプ : バグ修正 詳細 : VEOS は 'blocked' プロセス (I/O完了待ちのプロセス) の数を カウントするための情報を管理していないため、 VE 用 vmstat コマンドと sar コマンドが表示する 'blocked' プロセスの値 に 0 を表示するべきところ、不正な値を表示します。 1.1.1 概要 : execve() 処理中の VEOS 異常終了の修正 タイプ : バグ修正 詳細 : VEOS が execve() の処理をしている間に、要求元プロセス がシグナルで終了させられた場合、プロセス管理情報の 更新に失敗し、VEOS が異常終了することがあります。 概要 : execve() をスレッドが実行しているプロセスの、スレッド グループリーダに SIGKILL が配送された時、VEOS が異常 終了する問題を修正。 タイプ : バグ修正 詳細 : VEOS がスレッドからの execve() を処理している間に、 同時にスレッドグループリーダーへの SIGKILL 配送を 行うと、VEOS が再起動し、同ノードで動作している VE プロセスが終了する場合があります。 概要 : VEOS が VH のメモリを大量消費する問題の修正 タイプ : バグ修正 詳細 : 巨大なメモリセグメントを持つプロセスのコアを生成する 時、VEOS が大量の VH メモリを消費する場合があります。 概要 : VEOS 動作異常の修正 タイプ : バグ修正 詳細 : VEOS が VE プロセスに対し CPU アフィニティの設定処理 と、そのプロセスに対する別のリクエストを同時に処理し た場合、VEOS 内部データに不整合が生じ、VEOS の動作が 不定になります。 概要 : DMA ディスクリプタの更新失敗の修正 タイプ : バグ修正 詳細 : DMA 転送を行っている VE プロセスの DMA ディスクリプタ が正しく更新されず、DMAが失敗する事があります。 概要 : 子プロセス生成に成功していても fork() がエラーを返す 問題の修正 タイプ : バグ修正 詳細 : fork() 処理中の不具合により、子プロセスの生成に成功 していても、親プロセスに EAGAIN が返却される場合が あります。 概要 : VE プロセス ハングアップの修正 タイプ : バグ修正 詳細 : プロセス(スレッド) がスケジューリングされず、ハング アップすることがあります。 概要 : VE プロセス 異常終了の修正 タイプ : バグ修正 詳細 : シグナルハンドラ実行のためのスタックフレームが正しく 作成されず、VE プロセスが異常終了する場合があります。 概要 : VH メモリリークの修正 タイプ : バグ修正 詳細 : VE プロセスが子プロセスを生成・終了したとき、親プロセ スが終了するまで VH のメモリリークが発生します。リーク したメモリは 親プロセスが終了した時に解放されます。 概要 : VE プロセス実行性能低下の修正 タイプ : バグ修正 詳細 : 複数の VE プロセスを実行した後、VEOS 内部データの不 整合が発生した場合、プロセススケジューリングに失敗す ることがあります。その結果、プロセス実行性能の低下が 発生します。 概要 : GDB のバックトレースコマンドの修正 タイプ : バグ修正 詳細 : GDB で "backtrace" コマンドを実行したとき、シグナルに割り 込まれた関数のフレームが表示されません。 概要 : 特権DMA転送性能の改善 タイプ : 機能拡張 詳細 : VEOSが使用する特権DMA転送の性能を改善しました。これ により、システムコール(read()/write())実行時等の性能 が向上します。 概要 : MPI や他のシステムライブラリのデータ転送速度を改善する 機能のサポート タイプ : 機能拡張 詳細 : MPI ライブラリまたは他のシステムライブラリのデータ転送 速度を改善するために、VE プログラムが VH 側の System V shared memory へアクセス可能にする機能を提供します。そ れらのライブラリが、huge pages を使って System V shared memory を生成します。本機能は、対応するMPI ライブラリま たは他のシステムライブラリのみが使用できます。本機能を ユーザープログラムから直接使用した場合、NEC は一切の技 術サポートを行いません。 概要 : コンテキストスイッチ性能の改善 タイプ : 機能拡張 詳細 : VEプロセス/スレッド間のコンテキストスイッチの性能 を改善しました。 概要 : コアダンプ生成時間の改善 タイプ : 機能拡張 詳細 : VH で巨大な I/O を行っている間に VE プロセスのコア ダンプが行われた場合、コア生成に時間が掛かり、その間 は ve_exec のスレッドが割り込み不可能なスリープ状態 (Uninterruptible sleep) で残り続けます。 コア生成処理を改善し、コア生成とスレッド解放までの時 間を短縮しました。 概要 : sar によるシステムアクティビティデータ収集・蓄積の サポート タイプ : 機能拡張 詳細 : sar によるシステムアクティビティデータの収集・蓄積を 提供します。これに合わせて、ve_sysstat サービスが VE ノードと対応するように ve_sysstat@N (N は VE ノード 番号) に変更されました。 概要 : sar コマンドの出力 "LINUX RESTART" を "VEOS RESTART" に変更 タイプ : 機能拡張 詳細 : VEOS を再起動した時に、sar コマンド結果に挿入される 文字列を "LINUX RESTART" から "VEOS RESTART" に変更 しました。 概要 : ipcs コマンドと ipcrm コマンドのサポート タイプ : 機能拡張 詳細 : VE 用 ipcs コマンドと ipcrm コマンドを提供します。 これらのコマンドは util-linux-ve パッケージに含まれ ます。 1.0.3 概要 : RHEL7.4/x86_64サポート タイプ : 機能拡張 詳細 : RHEL7.4/x86_64 が新たにサポートされました。サポート しているプラットフォームとオペレーティングシステムに ついては README を参照してください。 概要 : binfmt 設定ファイルの配布 タイプ : 機能拡張 詳細 : VE 用 binfmt の設定ファイル (ve.conf) が /usr/lib/binfmt.d/ に配置されるようになります。 ユーザは ve_exec の指定をすることなく VEプログラム を実行することができます。 複数のVEが搭載されている 場合、VEプログラムを実行する VEノードを環境変数 (VE_NODE_NUMBER)で指定します。 1.0.2 概要 : シグナルハンドラ処理中のVEプロセス異常終了の修正 タイプ : バグ修正 詳細 : シグナルハンドラの処理に必要なスタック領域が確保 できなかった場合、VE プロセスが kill されます。 概要 : VE プロセス ハングアップの修正 タイプ : バグ修正 詳細 : VE プロセスが使用しているスタックの大半が使用され ている時に、そのVEプロセスに対してシグナルが送られ ると、稀にVEプロセスがハングアップすることがありま す。 概要 : VE プロセス 異常終了の修正 タイプ : バグ修正 詳細 : 同一の System V 共有メモリに対する shmdt()システム コールと shmctl() システムコールの処理要求が同時に VEOS に到着した場合、その VEOS が再起動し、同ノード で動作している全ての VE プロセスが終了する場合が あります。 概要 : 巨大な TLS を使用するスレッドのスタック属性が指定 された場合に pthread_create() が失敗する問題の修正 タイプ : バグ修正 詳細 : アプリケーションがスレッドのスタック属性を指定し、 かつ、巨大な TLS を使用する場合に pthread_create() のスタック生成処理が失敗し EAGAIN が返却されます。 概要 : "sar -m" コマンドと共にインターバルを指定した場合に 不正な情報が表示される問題の修正 タイプ : バグ修正 詳細 : "sar -m" コマンドと共にインターバル(-i オプション) を指定すると、不正なセンサ情報が出力されます。 概要 : kill(2) システムコール完了前に VE プロセス自身への シグナル配送を行うように処理を改善 タイプ : 機能拡張 詳細 : tkill(2),tgkill(2)を含むkill(2)関連システムコールで 自分自身(VEプロセス自身)にシグナルを送った場合、 シグナルは直ちにVEプロセスに配送されます。 概要 : VEOS ログメッセージの改善 タイプ : 機能拡張 詳細 : VEOS ログのメッセージ内容と出力レベルを変更しました。 概要 : VEOS RPM パッケージ名の改善 タイプ : 機能拡張 詳細 : SX-Aurora TSUBASA の RPM パッケージ名標準に準拠する ように、VEOS の RPM パッケージ名を変更しました。 1.0.1 - initial release 商標 Linux はアメリカ合衆国及びその他の国におけるLinus Torvalds の商標です。 InfiniBand は、InfiniBand Trade Association の商標またはサービスマークです。 Mellanox(R) はメラノックステクノロジーズ社のイスラエルおよびその他の国におけ る登録商標または商標です。 その他、記載されている会社名、製品名は、各社の登録商標または商標です。