ネットワーク​ストリーム​と​の​ロス​レス​通信: コンポーネント、​アーキテクチャ、​パフォーマンス

概要

LabVIEW​では、​分散​アプリケーション​を​作成​する​ため​の​さまざま​な​テクノロジ​が​採用​さ​れ​てい​ます。 LabVIEW 2010​で​追加​さ​れ​た​ネットワーク​ストリーム​は、​これらの​アプリケーション​間​で​データ​を​ストリーミング​する​の​に​最適​な​方法​です。 ネットワーク​ストリーム​を​使用​する​こと​で、​ネットワーク​経由​または​コンピュータ​上​で​簡単​に​データ​を​共有​でき​ます。 この​ドキュメント​では、​ネットワーク​ストリーム​について​説明​し​て、​その​機能​と​パフォーマンス​を​検討​し​ます。

内容

はじめに

ネットワーク​ストリーム​と​は、​アプリケーション​から​別​の​アプリケーション​に​TCP​と​同等​の​スループット​と​レイ​テン​シ​特性​で​データ​を​転送​する​ため​の、​構成​し​や​すく、​緊密​に​統合​さ​れ​た​ダイナミック​な​通信​方法​です。 ネットワーク​ストリーム​は、​TCP​と​は​違い、​データ​を​最初​に​中間​データタイプ​に​平坦​化/​非​平坦​化​する​必要​なく、​任意​の​データタイプ​の​送信​を​直接​サポート​し​ます。 ネットワーク​ストリーム​は、​データ​を​下位​互換​形式​で​送信​する​ので、​異なる​バージョン​の​LabVIEW​ラン​タイム​エンジン​を​使用​し​て​いる​アプリケーション​間​でも​安全​かつ​正常​に​通信​が​可能​です。 また、​ネットワーク​障害​や​その他​の​システム​障害​により​接続​を​失​って​も、​自動的​に​ネットワーク​接続​を​回復​できる​高度​な​接続​管理​機能​を​備え​てい​ます。 ストリーム​は、​バッファ​さ​れ​た​損失​の​ない​通信​方法​で​ある​ため、​ネットワーク​接続​が​途中​で​途​切れ​て​も、​ストリーム​に​書き​込​まれ​た​データ​は​損失​しま​せん。

特定​の​使用

ネットワーク​ストリーム​は​損失​の​ない、​高​スループット​の​データ​通信​として​設計​および​最適​化​さ​れ​てい​ます。 ネットワーク​ストリーム​は、​アプリケーション​間​で​データ​を​通信​する​ため​の、​単一​方向、​ポイントツーポイント​の​バッファ​型​通信​モデル​です。 つまり、​一方​の​エンド​ポイント​が​データ​の​書き込み、​もう​一方​が​データ​の​読み取り​を​行い​ます。 各​コンピュータ​で​相手​側​の​コンピュータ​の​ライタ​と​ペア​に​さ​れ​た​リーダ​と​相手​側​の​リーダ​と​ライタ​と​ペア​に​さ​れ​た​ライタ​の​2​つ​の​ストリーム​を​使用​する​こと​により、​双方向​通信​が​実現​でき​ます。

ストリーム​の​スループット​特性​が​未処理​TCP​と​同等​なので、​TCP​を​使用​する​際​の​複雑​さ​に​時間​を​かけ​ず​に​高​スループット​の​アプリケーション​を​作成​した​い​場合​に​最適​です。 ストリーム​は、​コマンド​の​送受信​など、​ロス​レス​の​低​スループット​の​通信​に​も​使​え​ます。 しかし、​低​スループット​の​通信​に​ストリーム​を​使用​する​場合​は、​最も​遅い​レイ​テン​シ​に​した​い​場合​は、​ストリーム​に​データ​を​送信​する​タイミング​を​より​明示​的​に​管理​する​こと​が​必要​な​場合​が​あり​ます。

基本​的​な​プログラミング​モデル

ネットワーク​ストリーム​を​使用​し​て​データ​を​作成​および​ストリーム​する​に​は、​以下​の​手順​に従います。

1. エンド​ポイント​を​作成​し、​ストリーム​接続​を​確立​する

2. データ​を​読み取る/​書き込む

3. エンド​ポイント​を​破棄​する

次​の​図​は、​これらの​手順​を​実装​した​もの​です。

ストリーム​について

以降​の​セクション​では、​前​の​セクション​で​示し​た​一般​的​な​手順​について​詳​しく​説明​する​とともに、​アプリケーション​を​設計​および​実装​する​とき​に​考慮​すべ​き​パフォーマンス​項目​を​挙​げ​ます。

エンド​ポイント​URL

LabVIEW​は、​各​ストリーム​エンド​ポイント​を​URL​によって​識別​し​ます。 2​つ​の​エンド​ポイント​を​接続​し​て、​有効​な​ネットワーク​ストリーム​を​作成​する​に​は、​「ネットワーク​ストリーム​読み取り​エンド​ポイント​を​作成」​関数​または​「ネットワーク​ストリーム​書き込み​エンド​ポイント​を​作成」​関数​を​使用​し​て​リモート​エンド​ポイント​の​URL​を​指定​する​必要​が​あり​ます。 予約​さ​れ​て​いる​文字​の​エスケープ​コード​など、​エンド​ポイント​URL​の​詳細​について​は、​『LabVIEW​ヘルプ』​の「ネットワーク​ストリーム​エンド​ポイント​URL」​トピック​を​参照​し​て​くだ​さい。 URL​の​簡単​な​説明​は、​次​の​とおり​です。

ストリーム​エンド​ポイント​の​完全​な​URL​は、​次​の​とおり​です。

ni.dex://​host_name:context_name/​endpoint_name

この​URL​の​各​コンポーネント​の​説明​は、​以下​の​とおり​です。

  • ni.dexは​URL​の​プロトコル​で、​省略​可能​です。 作成​関数でni.dexを​指定​しない​場合、​LabVIEW​は、​この​プロトコル​を​推測​し​ます。
  • host_nameは、​エンド​ポイント​が​存在​する​コンピュータ​の​プロジェクトエイリアス、​DNS​名、​IP​アドレス​です。 この​他​に、​現在​コード​が​実行​さ​れ​て​いる​コンピュータ​を​表す​ため​に​「localhost」​を​使用​する​こと​も​でき​ます。 host_name​を​空白​に​した​場合​は、​localhost​と​推測​さ​れ​ます。 LabVIEW​は、​一致​する​ホスト​名​を​プロジェクトエイリアス、​DNS​名、​IP​アドレス​の​順に​検索​し​ます。
  • context_nameは、​エンド​ポイント​が​存在​する​アプリケーション​コンテキスト​を​識別​する​名前​です。 これ​は、​同じ​コンピュータ​で​複数​の​アプリケーション​インスタンス​が​ネットワーク​ストリーム​機能​を​使用​し​て​いる​場合​に​のみ​必要​です。 デフォルト​では、​コンテキスト​名​は​空​の​文字​列​で、​すべて​の​エンド​ポイント​は​デフォルト​コンテキスト​に​作成​さ​れ​ます。 デフォルト​コンテキスト​を​使用​する​場合​は、​区切り​コロン​を​省略​でき​ます。
  • endpoint_nameは、​ストリーム​エンド​ポイント​の​実際​の​名前​です。 この​名前​は​平坦​な​文字​列​でも、/​で​区切​っ​た​階層​パス​の​文字​列​でも​指定​でき​ます。 たとえば、​ストリーム​1​または​サブシステム​A/​ストリーム​1​です。

エンド​ポイント​の​作成​関数​で​指定​する​必要​が​ある​URL​は、​リモート​マシン​の​ネットワーク​場所​と、​エンド​ポイント​を​作成​した​とき​に​付け​た​名前​に​依存​し​ます。

エンド​ポイント​の​作成​と​ストリーム​の​確立

ネットワーク​ストリーム​は、​書き込み​エンド​ポイント​と​読み取り​エンド​ポイント​の​接続​です。 エンド​ポイント​は、​「ネットワーク​ストリーム​書き込み​エンド​ポイント​を​作成」​関数​または​「ネットワーク​ストリーム​読み取り​エンド​ポイント​を​作成」​関数​を​使用​し​て​作成​し​ます。

エンド​ポイント​を​作成​すると、​2​つ​の​エンド​ポイント​を​接続​する​とき​に​重要​な​複数​の​プロパティ​を​エンド​ポイント​に​設定​し​ます。

  • エンド​ポイント​の​方向
  • エンド​ポイント​の​名前
  • データタイプ

エンド​ポイント​の​方向​は、​呼び出された作成関数により暗示的に決定され、​読み取り​専用​と​書き込み​専用​の​どちら​に​する​こと​も​でき​ます。 エンド​ポイント​名​は、​作成​関数の書き込み名または読み取り名入力​により​指定​し​ます。 この​名前​は、​エンド​ポイント​リソース​を​識別​する​URL​を​生成​する​ため​に​使用​さ​れる​ので、​固有​で​ある​必要​が​あり​ます。 指定​した​名前​の​エンド​ポイント​が​すでに​存在​する​場合​は、​作成​関数​は​エラー​を​返し​ます。 名前​は​単純​な​文字​列​に​する​こと​も、​完全​準拠​の​URL​に​する​こと​も​でき​ます。 有効​な​エンド​ポイント​URL​に​なる​条件​について​詳​しく​は、​URL​セクション​を​参照​し​て​くだ​さい。 リモート​マシン​に​存在​する​既存​の​エンド​ポイント​に​接続​する​こと​は​でき​ます​が、​リモート​エンド​ポイント​を​作成​する​こと​は​でき​ま​せん。 エンド​ポイント​を​作成​できる​の​は、​VI​を​実行​する​ローカル​マシン​に対して​のみ​です。

ネットワーク​ストリーム​は、​TCP​と​は​異​なり、​データ​を​文字​列​に​平坦​化​した​り、​文字​列​から​非​平坦​化​した​り​する​こと​なく、​LabVIEW​データ​の​送信​を​直接​サポート​し​ます。 ほとんど​の​LabVIEW​データタイプ​は、​ネットワーク​ストリーム​で​直接​サポート​さ​れ​てい​ます。 しかし、​その​タイプ​の​一部​に​オブジェクト​リファレンス​または​LabVIEW​クラス​を​含む​データタイプ​は​例外​なので、​注意​する​必要​が​あり​ます。 クラス​は、​まず​最初​に、​適切​な​クラス​データ​を​直列​化​および​非​直列​化​する​変換​メソッド​を​クラス​上​に​作成​する​こと​で、​間接​的​に​転送​でき​ます。 リファレンス​は​ローカル​マシン​上の​オブジェクト​を​参照​する​トーク​ン​なので、​リファレンス​トーク​ン​を​リモート​コンピュータ​で​使用​する​ため​に​ネットワーク​経由​で​送信​しよう​と​する​こと​は、​通常、​意味​が​ありま​せん。 唯一​の​例外​は、​NI Vision Development​モジュール​が​インストール​さ​れ​て​いる​とき​に​使用​できる​Vision Image​データタイプ​です。 この​場合、​画像​データ​の​転送​は、​Vision Image​データ​へ​の​リファレンス​を​使用​する​こと​て​で、​ストリーム​により​直接​サポート​さ​れ​ます。 ストリーム​で​直接​サポート​さ​れ​ない​データ​に関して​は、​サポート​さ​れ​て​いる​タイプ​の​1​つ​に​データ​を​変換/​逆​変換​する​変換​コード​が​必要​です。 また、​データタイプ​によって​は、​ストリーム​経由​で​の​転送​効率​に​差​が​あり​ます。 データタイプ​の​選択​が​ストリーム​の​パフォーマンス​に​与える​影響​について​は、​「パフォーマンス​の​考慮​点」​を​参照​し​て​くだ​さい。

作成​関数​は、​エンド​ポイント​リソース​を​作成​する​ほか、​書き込み​エンド​ポイント​と​読み取り​エンド​ポイント​を​結​ぎ​合わせ​て​完全​に​機能​する​ストリーム​を​形成​し​ます。 最初​に​作成​さ​れ​た​エンド​ポイント​は、​もう​1​つのエンドポイントが作成され、​接続​の​準備​が​できる​まで​待機​し​ます。​相手​の​エンド​ポイント​で​接続​の​準備​が​でき​た​とき​に、​関数​は​終了​し​ます。 これ​で、​ストリーム​は​データ​転送​が​できる​よう​に​なり​ます。 このように​使用​する​こと​で、​作成​関数​は、​ストリーム​の​両側​の​準備​が​できる​まで、​または​作成​関数​が​タイム​アウト​する​まで、​どちら​の​関数​も​先に​進​ま​ない、​ネットワーク​ランデブー​に​として​機能​し​ます。

2​つ​の​エンド​ポイント​の​間​で​ストリーム​を​確立​する​に​は、​3​つ​の​条件​が​満​た​さ​れる​必要​が​あり​ます。

1. 両方​の​エンド​ポイント​が​存在​する。 さらに、​両方​の​作成​関数​で​リンク​する​リモート​エンド​ポイント​URL​が​指定​さ​れ​て​いる​場合、​両方​の​URL​が、​リンク​さ​れる​エンド​ポイント​と​一致​し​て​いる​必要​が​あり​ます。

2. 2​つ​の​エンド​ポイント​の​データタイプ​が​一致​し​て​いる。

3. 1​つ​の​エンド​ポイント​が​書き込み​専用​エンド​ポイント​で​あり、​もう​1​つ​の​エンド​ポイント​が​読み取り​専用​エンド​ポイント​で​ある。

作成​関数​の​実行​時に​条件​1​が​満​た​さ​れ​てい​ない​場合、​作成​関数​は、​タイム​アウト​に​なる​まで​待機​し、​その​時点​で​まだ​条件​が​満​た​さ​れ​てい​ない​場合​は、​エラー​が​返​さ​れ​ます。 両方​の​エンド​ポイント​で、​リンク​先​の​エンド​ポイント​を​し​て​あり、​1​つ​の​URL​しか​一致​し​てい​ない​場合、​1​つ​の​作成​関数​は​エラー​を​返し、​もう​1​つ​の​作成​関数​は、​タイム​アウト​に​なる​まで​待機​し​ます。

上の​例​の​場合​を​考える​と、“reader1”エンド​ポイント​が“writer1”では​なく、“some other writer”という​名前​の​エンド​ポイント​を​期待​し​て​いる​ため、​左側​の​作成​呼び出し​は​エラー​を​返し​ます。 しかし、​右側​の​作成​呼び出し​は“some other writer”という​名前​の​エンド​ポイント​が​タイム​アウト​する​まで​待機​し​て​から、​タイム​アウト​エラー​を​返し​ます。 条件​2​または​3​が​満​た​さ​れ​てい​ない​場合、​その​2​つ​の​エンド​ポイント​が​ストリーム​を​形成​でき​ない​構成​で​ある​こと​が​判明​次第、​作成​関数​は​エラー​を​返し​ます。

エンド​ポイント​を​作成​する​とき​は、​少なくとも​1​つ​の​エンド​ポイント​作成​関数の読み取り​URLまたは ​書き込み​URL入力​で、​相手​の​エンド​ポイント​の​URL​を​指定​する​必要​が​ある​ことに​注意​し​て​くだ​さい。 指定​し​なか​っ​た​場合、​両方​の​作成​関数​は、​タイム​アウト​エラー​を​返す​ことに​なり​ます。 読み取り​エンド​ポイント​と​書き込み​エンド​ポイント​の​両方​の​作成​関数​の​中​で、​相手​の​URL​を​指定​する​こと​も​でき​ます​が、​必要​な​の​は​1​つ​だけ​です。 移植​性​と​メンテナンス​性​に​優​れ​た​コード​を​開発​する​ため​に、​読み取り​エンド​ポイント​と​書き込み​エンド​ポイント​の​いずれ​か​1​つ​で​相手​エンド​ポイント​の​URL​を​指定​し、​両方​では​指定​しない​こと​を​推奨​し​ます。

エンド​ポイント​バッファ

ストリーム​エンド​ポイント​は、​エンド​ポイント​から​別​の​エンド​ポイント​に​データ​を​転送​する​ため​に​FIFO​バッファ​を​使用​し​ます。 バッファサイズは作成時に指定され、​作成​呼び出し​の​とき​に​バッファ​が​割り当て​ら​れ​ます。 バッファ​の​サイズ​は​要素​の​単位​で​指定​し​ます。​バッファ​内​の​要素​は、​その​ストリーム​の​データタイプ​で​指定​さ​れる​タイプ​の​単一​値​を​表​し​ます。 この​ため、​エンド​ポイント​が​消費​する​メモリ​量​の​合計​は、​バッファ​サイズ​と​ストリーム​の​データタイプ​によって​異​なり​ます。

ブール​や​数値​など​の​スカラ​データタイプ​の​サイズ​は​一定​で​前もって​わか​って​いる​ので、​スカラ​データタイプ​の​場合​に​エンド​ポイント​バッファ​が​消費​する​メモリ​量​は、​簡単​に​計算​でき​ます。 たとえば、​倍精度​浮動​小数点​数​は​常に​8​バイト​の​メモリ​を​消費​する​ので、​倍精度​浮動​小数点​数​1,000​要素​の​バッファ​は​8,000​バイト​の​メモリ​を​消費​し​ます。

これ​に対して、​クラスタ、​文字​列、​配列​など​の​非​スカラ​データタイプ​を​扱う​場合​の​メモリ​消費量​は、​単純​では​ありま​せん。 これらの​データタイプ​の​サイズ​は​実行​時​で​異なる​ので、​必要​な​メモリ​合計​は​エンド​ポイント​の​作成​時には​不明​です。 この​場合、​エンド​ポイント​の​作成​時に​割り当て​られる​バッファ​は、​各​要素​が​バッファ​内​の​その​要素​に​書き​込​ま​れる​値​へ​の​ポインタ​または​ハンドル​を​保持​できるだけ​の​の​大​き​さ​に​なり​ます。 そして、​実行​時、​要素​が​バッファ​に​書き​込​ま​れる​とき​に​各​要素​の​データ​値​を​格納​する​の​に​必要​な​メモリ​が、​動的​に​割り当て​ら​れ​ます。 次​の​図​は、​バッファ​サイズ​が​3​で、​要素​データタイプ​が​1D​配列​の​ストリーム​エンド​ポイント​の​概念​を​表​し​てい​ます。

ステップ​A​は、​作成​直後​の​エンド​ポイント​バッファ​を​表​し​てい​ます。 この​時点​では、​エンドポイントにデータ値は書き込まれておらず、​各​要素​に​は、​その​要素​の​データ​値​を​格納​する​メモリ​ブロック​へ​の​ポインタ​を​格納​できるだけ​の​メモリ​が​割り当て​ら​れ​てい​ます。

ステップ​B​は、​3​つ​の​データ​値​が​書き​込​まれ​た​後​の​エンド​ポイント​バッファ​を​表​し​てい​ます。 要素​1​に​は、​長​さ​2​の​配列​が​含​まれ​てい​ます。 要素​2​に​は、​長​さ​4​の​配列​が​含​まれ​てい​ます。 最後​の​要素​3​に​は、​長​さ​3​の​配列​が​含​まれ​てい​ます。 これ​は​バッファ​に対する​最初​の​書き込み​なので、​書き込み​は、​各​データ​値​を​格納​する​ため​に​十分​な​メモリ​ブロック​を​動的​に​割り当て​ます。

ステップ​C​は、​3​つ​の​データ​値​が​読み​取​ら​れ​た​後​の​エンド​ポイント​バッファ​を​表​し​てい​ます。 バッファ​から​すべて​の​値​が​読み​取​ら​れ​て​も、​各​データ​値​に​割り当て​ら​れ​た​メモリ​は​解放​さ​れ​ない​ことに​注意​し​て​くだ​さい。 メモリ​空間​は、​バッファ​の​その​位置​に​次​の​データ​値​を​格納​する​ため​に​再​利用​できる​よう​に​そのまま​残り​ます。

ステップ​D​は、​さらに​長​さ​3​の​データ​値​2​つ​が​書き​込​まれ​た​後​の​エンド​ポイント​バッファ​を​表​し​てい​ます。 この​場合、​要素​1​が​保持​し​てい​た​メモリ​ブロック​の​サイズ​が​新しい​データ​値​を​格納​する​の​に​十分​で​なか​っ​た​ため、​これ​より​大きな​メモリ​ブロック​が​割り当て​ら​れ​ま​した。 これ​に対し、​要素​2​が​保持​し​てい​た​メモリ​ブロック​の​サイズ​は​新しい​データ​値​を​格納​する​の​に​十分​だ​っ​た​ため、​再​利用​さ​れ​ま​した。 要素​2​が​保持​し​てい​た​メモリ​ブロック​の​サイズ​は​必要​な​サイズ​より​大​きく​て​も、​それ​を​解放​し​て、​最低限​必要​な​サイズ​の​メモリ​ブロック​を​新​しく​割り当てる​オーバー​ヘッド​を​発生​させる​の​では​なく、​そのまま​再​利用​さ​れ​た​ことに​注意​し​て​くだ​さい。 一度​要素​に​割り当て​ら​れ​た​メモリ​ブロック​は、​エンド​ポイント​が​破棄​さ​れる​まで、​解放​さ​れ​たり、​サイズ​を​減少​さ​れる​こと​は​ありま​せん。

この​プロセス​で​表​さ​れ​て​いる​とおり、​非​スカラ​データタイプ​の​エンド​ポイント​バッファ​サイズ​を​選択​する​ときには​注意​が​必要​です。 データ​要素​と​バッファ​サイズ​が​大きい​場合​は、​エンド​ポイント​が​破棄​さ​れる​まで、​大量​の​メモリ​が​消費​さ​れる​場合​が​あり​ます。 これ​は、​スカラ​データタイプ​の​場合​も​同様​です。 しかし、​スカラ​データタイプ​に​必要​な​メモリ​は、​すべて​エンド​ポイント​の​作成​時に​一度に​割り当て​られる​ため、​メモリ​の​問題​を​デバッグ​する​の​は、​通常​は​簡単​です。 これ​に​比べ、​非​スカラ​タイプ​に​必要​な​メモリ​の​ほとんど​は、​最初​に​バッファ​に​書き​込​ま​れる​とき​に​割り当て​ら​れ​ます。 これ​は、​エンド​ポイント​バッファ​へ​の​書き込み​時に​メモリ​不足​に​なる​まで​の​間、​アプリケーション​は​正常​に​稼動​する​場合​が​ある​ため、​メモリ​リーク​の​よう​に​見える​こと​が​よく​あり​ます。

データ​の​読み取り​と​書き込み

ストリーム​へ​の​すべて​の​読み取り/​書き込み​呼び出し​が、​トランザクション​的​な​性質​の​呼び出し​を​すべて​ブロック​し​てい​ます。 要求​さ​れ​た​数​の​要素​を​正しく​読み取る/​書き込む​か、​タイム​アウト​し​ます。 タイム​アウト​した​場合​は、​部分​的​な​データ​の​読み取り/​書き込みはされず、​データ​の​上書き​や​再生​成​は​さ​れ​ま​せん。 読み取り​呼び出し​が​タイム​アウト​した​場合、データ​出力端子​は、​構成​さ​れ​て​いる​データタイプ​の​デフォルト​値​を​返し​ます。 この​ため、​1​回​の​呼び出し​で​読み取り/​書き込み​できる​要素​の​最大​数​は、​エンド​ポイント​の​バッファ​サイズ​により​制限​さ​れ​ます。 エンド​ポイント​の​バッファ​サイズ​を​超​え​た​数​の​要素​を​読み取り/​書き込み​しよう​と​すると、​すぐ​に​エラー​に​なり​ます。

ネットワーク​ストリーム​は、​データ​の​読み取り/​書き込み​時に​単一​要素​インタフェース​と​複数​要素​インタフェース​の​両方​を​提供​し​てい​ます。 単一​要素​読み取り/​書き込み​は、​一度に​バッファ​に​追加/​削除​できる​要素​は​1​つ​で​ある​の​に対して、​複数​要素​読み取り/​書き込み​は、​データ​を​バッチ​で​追加/​削除​する​こと​が​でき​ます。 タイプ​の​異なる​読み取り/​書き込み​を​使用​する​場合、​ブロック​ダイ​ア​グラム​に​表示​さ​れる​データ​の​外観​は​異​なり​ます。 下​の​例​では、​ストリーム​の​データタイプ​は​倍精度​浮動​小数点​数​です。 単一​要素​書き込み​を​使用​した​ストリーム​書き込み​は、​ブロック​ダイ​ア​グラム​上​で​倍精度​の​データタイプ​で​表​さ​れ​ます。 これ​に対して、​複数​要素​書き込みのデータ​入力端子​の​データタイプ​は、​倍精度​配列​の​データタイプ​で​表​さ​れ​ます。

下​の​図​は、​この​違い​を​表​し​てい​ます。 矢印​の​左側​の​要素​は、​書き込み​が​発生​する​前​の​書き込み​エンド​ポイント​バッファ​を​表​し​て​おり、​矢印​の​右側​の​要素​は、​書き込み​が​発生​した​後​の​エンド​ポイント​バッファ​を​表​し​てい​ます。 最初、​書き込み​エンド​ポイント​バッファ​に​2​つ​の​要素​が​あっ​た​場合、​最初​に​単一​要素​書き込み​を​実行​すると​バッファ​に​1​つの要素が追加され、​バッファ​内​の​合計​要素​数​は​3​つ​に​なり​ます。 これ​に対して、​ストリーム​へ​の​複数​要素​書き込み​関数​を​使用​し​て​3​つ​の​要素​を​書き​込​ん​だ​場合、​バッファ​内​の​要素​の​合計​数​は、​5​に​なり​ます。

配列​の​よう​な、​非​スカラ​データタイプ​の​場合、​上の​図​は​同じ​が、​個々​の​要素​の​中身​は​配列​タイプ​に​なり、​長​さ​は​可変​です。 この​場合、​単一​要素​書き込み​の​データタイプ​は​1D​配列​で、​複数​要素​書き込み​の​データタイプ​は​2D​配列​です。 下​の​図​は、​これ​を​表​し​て​おり、​上向き​矢印​と​その​上の​ブロック​は​配列​と​その​サイズ​を​表​し​てい​ます。

同様​に、​複数​要素​読み取り​は、​指定​さ​れ​た​数​の​要素​を​読み取り​エンド​ポイント​バッファ​から​削除​し​ます。 しかし、​LabVIEW​内​の​多次元​配列​構造​の​制限​から、​配列​要素​の​次元​の​長​さ​は、​すべて​同じ​で​ある​必要​が​あり​ます。 複数​要素​読み取り​の​場合、​これ​は、​配列​要素​の​次元​の​長​さ​が​異なる​複数​要素​を​読み​取​ろうと​すると、​読み取り​関数​は、​エラー​を​返す​こと​を​意味​し​ます。 図​4​を​例​にし​て​考える​と、​これ​は、 最初​の​要素、​2​番目​の​要素、​3​~​5​番目​の​要素​を​それぞれ​単一​読み取り​呼び出し​で​読み取れる​こと​を​意味​し​ます。 しかし、​1​~​3​番目​の​要素​の​任意​の​組み合わせ​読み​取​ろうと​する​読み取り​呼び出し​は、​配列​要素​の​次元​の​長​さ​が​異なる​ので、​エラー​を​返し​ます。 単一/​複数​要素​読み取り/​書き込み​は、​同じ​バッファ​から​要素​を​削除/​追加​する​ので、​マルチ​レート​アプリケーション​では、​必要​に​応​じ​て、​単一/​複数​要素​読み取り/​書き込み​を​組み合わせ​て​使用​でき​ます。

複数​要素​読み取り​関数の要素数入力​に-1​を​指定​すると、​利用​できる​すべて​の​サンプル​が​読み​取​ら​れ​ます。

これ​は、​「読み取り​可能​な​要素」​プロパティ​を​読み​取​って、​その​戻り​値​を​読み取り​関数の要素数入力​として​使用​する​こと​と​同じ​で​あり、​同じ​こと​を​簡単​に​実行​する​方法​です。 このように​使用​する​場合、​読み取り​関数のタイム​アウト​(ms)入力​は​無効​に​さ​れ​た​の​と​同じ​です。 読み取る​要素​が​ない​場合、​読み取り​関数​は、​タイム​アウト​や​エラー​状態​を​示す​こと​なく​空​の​データ​配列​を​すぐ​に​返し​ます。

ストリーム​を​シャット​ダウン​する

エンド​ポイント​間​で​データ​を​ストリーム​する​必要​が​なく​な​っ​た​場合、​「ストリーム​エンド​ポイント​を​破棄」​関数」​を​呼び出す​こと​により、​どちら​の​エンド​ポイント​から​の​通信​も​終了​させる​こと​が​でき​ます。

しかし、​書き込み​エンド​ポイント​を​破棄​する​前​に、​ストリーム​に​書き​込​まれ​た​すべて​の​データ​を​読み取り​が​確実​に​受け取る​よう​に​する​に​は、​まず、​「ストリーム​を​排出」​関数​を​呼び出し、​適切な待機​状態が​満​た​さ​れる​の​を​待​って​から、​書き込み​エンド​ポイント​を​破棄​し​て​くだ​さい。 破棄​関数​を​呼び出せる​の​は、​書き込み​エンド​ポイント​のみ​です。

破棄​関数​は、​まず、​書き込み​エンド​ポイント​バッファ​に​残​って​いる​データ​を​ネットワーク​に​即時​転送​し​ます。 次に、​指定​した​条件​が​満​た​さ​れる​か、​タイム​アウト​に​なる​まで​待機​し​ます。 「ストリーム​を​排出」​関数​に​は、​次​の​2​つ​の​条件​が​あり​ます。

  • すべて​の​要素​を​ストリーム​から​読み取る
  • すべて​の​要素​は​読み取り​可能

「すべて​の​要素​を​ストリーム​から​読み取る」​を​指定​した​場合、​排出​関数​は、​全データが読み取りエンドポイントに転送され、​読み取り​エンド​ポイント​から​全​データ​が​読み​取​られる​まで​待機​し​て​から​戻り​ます。 「すべて​の​要素​は​読み取り​可能」​オプション​は、​読み取り​エンド​ポイント​に​全​データ​が​転送​さ​れる​まで​待機​し​ます​が、​読み取り​エンド​ポイント​から​全​データ​が​読み​取​られる​まで​待機​しま​せん。 下​の​ダイアグラム​で​見る​と、​「すべて​の​要素​を​ストリーム​から​読み取る」​オプション​は、​ステップ​C​の​後で​排出​関数​から​戻り、​「すべて​の​要素​は​読み取り​可能」​オプション​は、​ステップ​D​の​後で​排出​関数​から​戻り​ます。

書き込み​エンド​ポイント​を​破棄​する​前​に、​排出​関数​を​呼​び​出​さ​ない​場合、​送信​中​の​データ​や​書き込み​エンド​ポイント​バッファ​に​残​って​いる​データ​が​失​われる​可能性​が​ある​こと​を​意味​し​ます。 この​ため、​アプリケーション​の​通信​を​即時​に​終了​する​必要​が​あり、​これ​により​失​われる​可能性​の​ある​データ​が​不要​な​場合​以外​は、​ストリーム​を​破棄​する​前​に、​排出​関数​を​呼び出す​こと​を​推奨​し​ます。

一度、​読み取り​エンド​ポイント​に対して​破棄​が​呼​び​出​さ​れる​と、​書き込み​エンド​ポイント​から​の​以降​の​書き込み​呼び出し​は​エラー​に​なり​ます。 書き込み​エンド​ポイント​が​破棄​さ​れる​と、​読み取り​エンド​ポイント​から​の​以降​の​読み取り​呼び出し​は、​読み取り​エンド​ポイント​バッファ​が​空​に​なる​まで​成功​し、​空​に​な​っ​た​時点​で​読み取り​呼び出し​は​エラー​を​返し​ます。 バッファ​に​残​って​いる​より​も​多く​の​要素​に対して​複数​要素​読み取り​が​受信​さ​れ​た​場合、​読み取り​要求​は​バッファ​に​残​って​いる​要素​を​返し​ます。​以降​の​読み取り​要求​は​エラー​に​なり​ます。 これ​は、​複数要素読み取りがタイムアウトまたはエラー状態を示さずに、​要求​さ​れ​た​未満​の​ポイント​を​返す​唯一​の​場合​です。

プロパティ

ネットワーク​ストリーム​に​は、​続行​中​の​データ​ストリーム​に関する​情報​を​取得​する​ため​に、​アプリケーション​が​監視​できる​複数​の​プロパティ​が​あり​ます。 この​中​の​いくつか​について、​以下​で​詳​しく​説明​し​ます。 他の​プロパティ​に関して​は、​『LabVIEW​ヘルプ』​の​「ネットワーク​ストリーム​エンド​ポイント」​ページ​を​参照​し​て​くだ​さい。

「読み取り​可能​な​要素」​は、​読み取り​エンド​ポイント​が、​エンド​ポイント​バッファ​に​存在​する​未読​の​要素​数​を​返す​ため​に​使用​さ​れ​ます。 これ​は、​読み取り​エンド​ポイント​バッファ​使用​率​を​調べる​の​に​便利​で、​読み取り​エンド​ポイント​から​読み​取​ら​れ​た​とき​に​有効​な​結果​だけ​を​返し​ます。 同様​に、​「読み取り​可能​な​要素」​プロパティ​は、​エンド​ポイント​バッファ​に​存在​し、​書き​込​まれ​てい​ない​要素​数​を​返し​ます。 アプリケーション​の​プロトタイプ​作成​時には、​読み取り​と​書き込み​の​処理​が​遅れ​てい​ない​か​を​確認​する​ため​に、​バッファ​使用​率​を​監視​する​の​が​便利​な​場合​が​よく​あり​ます。 この​情報​は、​アプリケーション​内​の​ボトルネック​を​探​し、​アプリケーション​全体​の​要件​を​満​た​し​つつ、​消費​さ​れる​メモリ​リソース​を​最小​化​する​ため​に、​エンド​ポイント​バッファ​の​サイズ​を​調節​する​ため​に​使用​でき​ます。

接続​プロパティ​は、​読み取り​エンド​ポイント​と​書き込み​エンド​ポイント​の​間​の​ネットワーク​接続​の​状態​を​示し​ます。 接続​プロパティ​が​FALSE​の​場合、​「ストリーム​エンド​ポイント​を​破棄」​関数​を​使用​し​て​他方​の​エンド​ポイント​が​破棄​さ​れ​たか、​2​つ​の​エンド​ポイント​間​の​ネットワーク​接続​が​中断​さ​れ​て​いる​こと​を​示し​ます。 ネットワーク​の​中断​の​場合、​エンド​ポイント​は、​中断​が​解決​する​か、​エンド​ポイント​が​破棄​さ​れる​まで、​バックグラウンド​で​再​接続​が​試行​さ​れ​ます。

「切断​の​数」​は、 ネットワーク​に​問題​が​ある​か、​リモート​エンド​ポイント​が​破棄​さ​れ​た​こと​で、​読み取り​エンド​ポイント​と​書き込み​エンド​ポイント​間​の​ネットワーク​接続​が​中断​さ​れ​た​回数​を​返し​ます。 この​プロパティ​は、​接続​プロパティ​と​組み合わせ​て​使用​する​こと​で​読み取り​と​エンド​ポイント​と​書き込み​エンド​ポイント​を​接続​し​て​いる​ネットワーク​の​安定性​と​ヘルス​を​確認​でき​ます。

ロス​レス​データ​転送​と​フロー​制御

前述​の​とおり、​ネットワーク​ストリーム​は、​書き​込​まれ​た​全​データ​が​ストリーム​から​読み​取​られる​か、​その​ストリーム​が​破棄​さ​れる​まで、​それ​を​保持​する​ポイントツーポイント​の​通信​チャンネル​を​提供​し​ます。 この​ロス​レス​データ​転送​は、​エンド​ポイント​バッファ​に​FIFO​バッファ​ポリシー​を​使用​する​こと、​および​確認​と​フロー​制御​プロトコル​メッセージ​により​実現​さ​れ​ます。 FIFO​バッファ​ポリシー​は、​書き込みエンドポイントが含まれているアプリケーションがネットワークの転送速度よりも速くデータを書き込もうとしている場合にデータを上書きされることを防ぎます。 確認​メッセージ​は、​ネットワーク切断によるデータ損失を防ぎ、​フロー​制御​メッセージ​は、​読み取り​エンド​ポイント​が​含​まれ​て​いる​アプリケーション​が​消費​できる​より​速い​速度​で、​書き込みエンドポイントが含まれているアプリケーションがデータを生成しようとしている場合にデータが上書きされることを防ぎます。 次​の​シーケンス​ダイ​ア​グラム​は、​ロス​レス​データ​通信​を​実現​する​ため​に、​これらの​メッセージ​が​使用​さ​れる​方法​を​詳​しく​表​し​てい​ます。

1. タイム​スロット​1​は、​両方​の​バッファ​が​空​の​とき​に​3​つ​の​要素​を​書き込む​要求​を​表​し​てい​ます。

2. 書き込み​エンド​ポイント​は、​データを上書きせずに​3​つ​の​要素​を​受け入れる​こと​が​できる​ので、​書き込み​要求​は​完了​し、​書き込み​エンド​ポイント​に​は​3​つ​の​要素​が​入り​ます。

3. 書き込み​エンド​ポイント​は、​3​つ​の​要素​を​読み取り​エンド​ポイント​に​送信​し​ます。 ここ​では、​読み取り​エンド​ポイント​から​の​確認​待ち​の​状態​で、​要素​が​占​め​ら​れ​て​いる​こと​を​示す​ため​に、​書き込み​エンド​ポイント​内​の​3​つ​の​要素​を​赤色​で​示し​て​あり​ます。 確認​を​受け取る​まで、​書き込み​は​これらの​3​つの要素を保持しなければならず、​送信​できる​の​は、​あと​2​つ​の​要素​だけ​です。

4. 読み取り​エンド​ポイント​は、​書き込み​から​3​つ​の​要素​を​受信​し​ます。 2​つ​の​要素​の​書き込み​要求​が​書き込み​エンド​ポイント​に対して​出​さ​れ​ます。

5. 読み取り​エンド​ポイント​は、​3​つ​の​要素​の​確認​を​送信​し​ます。 書き込み​エンド​ポイント​は、​データを上書きせずに​2​つ​の​要素​を​受信​できる​ので、​タイム​スロット​4​から​の​以前​の​書き込み​要求​は​完了​し、​書き込み​エンド​ポイント​に​含​ま​れる​要素​は​5​つ​に​なり​ます。

6. 書き込み​エンド​ポイント​は、​3​つ​の​要素​の​確認​を​受信​し​ます。 3​つの要素はエンドポイントバッファから削除され、​書き込み​エンド​ポイント​に​含​ま​れる​要素​は​2​つ​に​なり​ます。

7. 書き込み​エンド​ポイント​は、​2​つ​の​要素​を​読み取り​エンド​ポイント​に​送信​し​ます。 しかし、​その​途中​で、​ネットワークが中断され、​データ​は​読み取り​エンド​ポイント​に​受信​さ​れ​ま​せん​で​した。

8. 4​つ​の​要素​の​書き込み​要求​が​受信​さ​れ​ま​した。 書き込み​エンド​ポイント​が​データ​を​上書き​せ​ず​に​受信​できる​要素​は​3​つ​だけ​なので、​書き込み​呼び出し​は​ブロック​し​ます。

9. ストリーム​は​ネットワーク​接続​を​修復​し​て、​2​つ​の​要素​が​送信​さ​れ​た​が、​受信​さ​れ​てい​ない​こと​を​検知​し​ます。 これらの​要素​は、​再​接続​プロセス​の​一部​として​再送​さ​れ​ます。

10. 再送された​2​つ​の​要素​が​読み取り​エンド​ポイント​に​受信​さ​れ​ます。 読み取り​に​は、​2​つ​の​要素​が​入り、​満杯​に​なり​ま​した。 書き込み​は、​読み取り​エンド​ポイント​から​データ​が​読み​取​られる​まで、​要素​は​送信​でき​ま​せん。

11. 読み取り​エンド​ポイント​は、​2​つ​の​要素​の​確認​を​送信​し​ます。 それ​と同時に、​2​つ​の​要素​の​読み取り​要求​を​受信​し​ます。

12. 書き込み​エンド​ポイント​は、​2​つ​の​要素​の​確認​を​受信​すると、​エンド​ポイント​バッファ​から​それら​を​削除​し​ます。 これ​で​書き込み​は​空​に​なり​ま​した。 読み取り​に​は​5​つ​の​要素​が​ある​ので、​以前​の​2​つ​の​要素​の​読み取り​要求​を​完了​し​て、​2​つ​の​要素​の​フロー​制御​メッセージ​を​書き込み​エンド​ポイント​に​送信​し​て、​オーバー​フロー​に​なら​ず​に​もう​2​つ​の​要素​が​受信​できる​こと​を​知らせ​ます。 これ​で、​読み取り​エンド​ポイント​に​含​ま​れる​要素​は​3​つ​に​なり​ま​した。

13. 書き込み​に​は​5​要素​分​の​空き​が​ある​ので、​ブロック​さ​れ​てい​た​タイム​スロット​8​から​の​書き込み​要求​を​完了​し​ます。 これ​で、​読み取り​に​含​ま​れる​要素​は​4​つ​に​なり​ま​した。 さらに、​読み取り​エンド​ポイント​から​2​つ​の​要素​の​フロー​制御​メッセージ​を​受信​し​ます。 次​の​フロー​制御​メッセージ​を​受信​する​まで、​読み取り​エンド​ポイント​に​送信​できる​要素​は、​あと​2​つ​まで​です。

接続​管理​と​再​接続

前​の​セクション​では、​ネットワーク​ストリーム​が、​ネットワーク​障害​が​発生​した​とき​でも​ロス​レス​データ​転送​を​維持​する​仕組み​を​説明​しま​した。 この​セクション​では、​この​再​接続​プロセス​の​仕組み​について​説明​し​ます。

ネットワーク​ストリーム​では、​1​つのエンドポイントがアクティブエンドポイントと指定され、​もう​1​つ​の​エンド​ポイント​が​パッ​シ​ブ​エンド​ポイント​と​指定​さ​れ​ます。 アクティブ​エンド​ポイント​は、​最初​に​ネットワーク​接続​を​開始​する​側​の​エンド​ポイント​で、​ネットワーク​の​状況​が​切断​に​な​っ​た​こと​を​検知​すると​再​接続​を​試行​する​責任​が​あり​ます。 他方​の​パッ​シ​ブ​エンド​ポイント​は、​接続​要求​を​待つ​側​です。 クライアント/​サーバ​の​用語​で​言​え​ば、​アクティブ​エンド​ポイント​は​クライアント​で​あり、​パッ​シ​ブ​エンド​ポイント​は​サーバ​に​なり​ます。 どの​エンド​ポイント​が​アクティブ​エンド​ポイント​に​なる​か​は、​エンド​ポイント​を​作成​する​関数​で​指定​し​ます。 接続​先​の​リモート​エンド​ポイント​の​URL​を指定するエンドポイントはアクティブエンドポイントに指定され、​リモート​エンド​ポイント​の​URL​を​指定​しない​エンド​ポイント​は​パッ​シ​ブ​エンド​ポイント​に​指定​さ​れ​ます。

上の​図​では、​左側​の​書き込み​エンド​ポイント​が​接続​先​の​読み取り​エンド​ポイント​の​URL​を​指定​し​て​いる​ので、​アクティブ​エンド​ポイント​に​なり​ます。 また、​左側​の​書き込み​エンド​ポイント​が​接続​先​の​読み取り​エンド​ポイント​の​URL​を​指定​し​てい​ない​ので、​パッ​シ​ブ​エンド​ポイント​に​なり​ます。 もし、​両方​の​エンド​ポイント​で​接続​先​の​リモート​エンド​ポイント​を​指定​した​場合、​ど​ちか​ら​が​アクティブ​エンド​ポイント​に​なる​か​は​不​確定​で、​プロトコル​メッセージ​が​ネットワーク​で​送受信​さ​れる​順序​に​依存​し​ます。

接続​が​切断​さ​れ​た​場合、​アクティブ​エンド​ポイント​は、​バックグラウンド​で​パッ​シ​ブ​エンド​ポイント​と​の​接続​を​試行​し​続​け​ます。 この​バックグラウンド​プロセス​は、​接続​が​確立​さ​れる​か、​エンド​ポイント​が​破棄​さ​れる​まで​続行​さ​れ​ます。 接続​が​切断​さ​れ​て​いる​間、​書き込み​エンド​ポイント​へ​の​書き込み​は、​書き込み​エンド​ポイント​が​満杯​に​なる​まで​は​成功​し​ます。​読み取り​エンド​ポイント​へ​の​読み取り​は、​読み取り​エンド​ポイント​が​空​に​なる​まで​は​成功​し​ます。 書き込み​エンド​ポイント​が​満杯​に​なる​か、​読み取り​エンド​ポイント​が​空​に​なる​と、​読み取り​および​書き込み​呼び出し​は​ブロック​し、​適宜、​タイム​アウト​表示​を​返し​ます。 しかし、​読み取り/​書き込み​呼び出し​は​エラー​を​返し​ま​せん。

エンド​ポイント​バッファ​は​不安定​な​ネットワーク​による​ジッタ​から​は​ある程度​保護​さ​れ​ます​が、​ネットワーク​が​長期間、​切断​さ​れ​た​状態​が​続く​と、​やがて​満杯​に​なる​か、​空​に​なり​ます。 アプリケーション​が​ネットワーク​の​長期間​の​切断​を​許容​できる​よう​に​する​に​は、​予期​さ​れる​最長​の​ダウン​タイム​を​吸収​できる​バッファ​サイズ​に​する​か、​切断​状態​で​の​タイム​アウト​状態​を​処理​する​ため​の​ロジック​を​実装​する​必要​が​あり​ます。 また、​ストリーム​は​ネットワーク​接続​が​接続​さ​れ​た​こと​は​検知​でき​ます​が、​それ​が​ネットワーク​の​問題​な​の​か、​リモート​エンド​ポイント​が​含​まれ​て​いる​アプリケーション​が​クラッシュ​した/​応答​しない​こと​による​の​か​は​識別​でき​ま​せん。 クラッシュ​した/​応答​しない​場合、​クラッシュ​した​エンド​ポイント​が​アクティブ​エンド​ポイント​の​場合、​続行​中​の​パッ​シ​ブ​エンド​ポイント​は​再​接続​を​受信​する​まで​永久​に​待機​し​ます。 リモート​アプリケーション​は​応答​し​てい​ない​ので、​このメッセージは到達せず、​ローカル​アプリケーション​の​ストリーム​接続​は、​それ​以上、​進み​ま​せん。 アプリケーション​が​リモート​アプリケーション​の​クラッシュ/​応答​停止​を​許容​する​必要​が​ある​場合​は、​一定​間隔​で​接続​プロパティ​を​監視​し、​妥当​な​時間​内​に​通信​を​再​確立​でき​ない​場合​に​適切​な​処理​を​する、​独自​の​ウ​ォ​ッ​チ​ド​ッ​グ​タイマ​を​実装​する​こと​を​推奨​し​ます。

パフォーマンス​に関する​注意事項

ネットワーク​ストリーム​の​パフォーマンス​を​調整​する​際​の​2​つ​の​一般​的​な​測定​基準​は、​スループット​と​レイ​テン​シ​です。 スループット​と​レイ​テン​シ​の​測定​値​は、​通信​関連​システム​の​仕様、​通信​ネットワーク​インタフェース、​ネットワーク​全体​の​混雑​度​と​信頼​性​など、​複数​の​要因​に​依存​し​ます。 これらの​要因​は​重要​ですが、​この​ドキュメント​の​目的​を​超える​ため、​説明​は​割愛​し​ます。 この​ドキュメント​では、​アプリケーション​内​で​プログラム​的​に​構成​できる、​ネットワーク​ストリーム​特有​の​プロパティ​を​取り上げ​て​説明​し​ます。

スループット​の​最大化

ネットワーク​ストリーム​の​スループット​を​制限​する​一般​的​な​要因​を、​以下​に​示し​ます。

1. 書き込み​アプリケーション – 書き込み​エンド​ポイント​が​含​まれ​て​いる​ユーザー​アプリケーション。 これ​に​は、​通常、​書き込み​関数​を​呼び出す​ループ​が​含​まれ​てい​ます。

2. 書き込み​関数 – 書き込み​関数​は、​書き込み​アプリケーション​から​データ​を​受信​し​て、​書き込み​エンド​ポイント​に​転送​する​コスト​を​表​し​ます。

3. ネットワーク​ストリーム​エンジン – これ​は、​バックグラウンド​で、​書き込み​エンド​ポイント​から​読み取り​エンド​ポイント​に​非同期​に​データ​を​移動​し、​読み取り​エンド​ポイント​から​書き込み​エンド​ポイント​に​確認​メッセージ​と​フロー​制御​メッセージ​を​送信​する​プロセス​です。

4. 読み取り​関数 – 読み取り​関数​は、​読み取り​エンド​ポイント​から​データ​を​削除​し​て、​読み取り​アプリケーション​に​転送​する​コスト​を​表​し​ます。

5. 読み取り​アプリケーション – 読み取り​エンド​ポイント​が​含​まれ​て​いる​ユーザー​アプリケーション。 これ​に​は、​通常、​読み取り​関数​を​呼び出す​ループ​が​含​まれ​てい​ます。

書き込み​アプリケーション、​ネットワーク​ストリーム​エンジン、​読み取り​アプリケーション​は、​すべて​互いに​並列​し​て​実行​さ​れる​プロセス​で​あり、​ストリーム​全体​で​の​スループット​は、​この​中​で​最も​遅い​プロセス​によって​決まり​ます。 ここ​では、​書き込み​関数​の​実行​時間​は​書き込み​アプリケーション​の​一部​に​含​まれ​て​おり、​読み取り​関数​の​実行​時間​は​読み取り​アプリケーション​の​一部​に​含​まれ​てい​ます。 これらの​プロセス​に​は、​複数​の​ストリーム​プロ​パテ​ィ​が​影響​を​与​え​ます。​次に、​それら​について​説明​し​ます。

エンド​ポイント​バッファ​サイズ

ストリーム​エンド​ポイント​の​デフォルト​バッファ​サイズ​は、​4096​要素​です。 非​スカラ​要素​の​サイズ​は​非常​に​大​きく​なる​こと​が​ある​ため、​この​値​は、​非スカラデータタイプ用に大量のメモリを消費せずに、​スカラ​データタイプ​で​良好​な​スループット​を​実現​できる​点​で​適切​な​値​と​いえ​ます。 しかし、​スカラ/​非​スカラ​の​データタイプ​の​スループット​と​メモリ​使用​率​の​適切​な​妥協​点​では​ある​ものの、​一般​的、​どちら​の​場合​に​とっても​最適​な​設定​に​は​なり​ま​せん。 スカラ​データタイプ​の​場合、​ネットワーク​インタフェース​で​最大​の​スループット​を​実現​する​に​は、​エンド​ポイント​バッファ​サイズ​は​100,000​から​1,000,000​程度​に​する​必要​が​あり​ます。 非​スカラ​データタイプ​の​場合、​これ​より​も​大幅​に​小さな​バッファ​で​最大​の​スループット​が​実現​でき​ます。

残念​な​ことに、​最適​な​バッファ​サイズ​を​決める​単純​な​公式​は​ありま​せん。 開発​時に、​さまざま​な​バッファ​サイズ​で​試し​て​みる​こと​で、​アプリケーション​の​ニーズ​に​応える​ため​に​最適​な​設定​を​決める​必要​が​あり​ます。 プロトタイプ​作成​の​一環​として、​「読み取り​可能​な​要素」​プロパティ​と​「書き込み​可能​な​要素」​プロパティ​を​使用​する​こと​で、​各​エンド​ポイント​バッファ​が​どれ​だけ​効果​的​に​使用​さ​れ​て​いるか、​現在​の​バッファ​サイズ​が​アプリケーション​の​ボトルネック​に​な​って​いるか​どうか​を​判断​でき​ます。

たとえば、​目的のスループットが得られずに、​書き込み​エンド​ポイント​が​常に​満杯​か​ほぼ​満杯​の​場合、​ネットワーク​ストリーム​エンジン​が​書き込み​アプリケーション​に​追​い​つい​てい​ない​こと​を​表​し​てい​ます。 この​状態​は、​ネットワーク​が​飽和​し​て、​スループット​の​上限​に​達し​て​いるか、​書き込み​エンド​ポイント​バッファ​が​小​さ​すぎる​こと​を​表​し​てい​ます。 後者​の​場合、​ネットワーク​ストリーム​エンジン​が​書き込み​エンド​ポイント​から​要素​を​送信​し、​読み取り​エンド​ポイント​から​書き込み​エンド​ポイント​に​確認​メッセージ​と​フロー​制御​メッセージ​を​送信​する​際​の​ネットワーク​で​の​遅れ​が​原因​で​書き込み​アプリケーション​の​ルー​プレート​が​制限​さ​れ​てい​ます。 この​場合、​書き込み​エンド​ポイント​バッファ​サイズ​を​増やす​こと​で​スループット​を​改善​でき​ます。

同様​に、​目的のスループットが得られずに、​読み取り​エンド​ポイント​バッファ​が​常に​空​か​ほぼ​空​の​場合、​ネットワーク​ストリーム​エンジン​が​読み取り​アプリケーション​に​追​い​つい​てい​ない​こと​を​表​し​てい​ます。 この​状態​も、​ネットワーク​が​飽和​し​て、​スループット​の​上限​に​達し​て​いるか、​読み取り​エンド​ポイント​バッファ​が​小​さ​すぎる​こと​を​表​し​てい​ます。 ネットワーク​が​飽和​に​達し​てい​ない​と​仮定​すると、​読み取り​エンド​ポイント​の​バッファ​サイズ​を​増やす​と、​多く​の​場合、​スループット​が​改善​し​ます。

最大​スループット​の​ほかに​も、​ネットワーク​が​一時​的​に​使用​でき​なく​な​っ​た​場合​でも​ストリーム​が​最低​平均​レート​を​維持​する​必要​が​ある​か​どうか​を​検討​する​必要​が​あり​ます。 たとえば、​計測​デバイス​から​電圧​データ​を​100 kB/​s​で​連続​的​に​集録​する​場合、​最適​条件​では、​データ​転送​を​維持​する​の​に​10 kB​の​エンド​ポイント​バッファ​が​あれ​ば​十分​な​場合​が​あり​ます。 しかし、​計測​デバイス​から​の​データ​を​損失​なく、​10​秒間​の​停電​に​耐え​られる​よう​に​する​に​は、​最低​でも​1 MB​の​書き込み​エンド​ポイント​バッファ​が​必要​です。

読み取る/​書き込む​要素数

データ​を​読み取る/​書き込む​場合、​読み取り​関数​または​書き込み​関数​を​呼び出す​たび​に、​その​関数​により​転送​さ​れる​データ​量​と​は​関係​なく、​その​関数​を​呼び出す​ため​に​必要​な​固定​コスト​が​発生​ことに​注意​し​て​くだ​さい。 比較的、​少量​の​データセット​で​頻繁​に​読み書き​を​実行​すると、​関数​の​固定​オーバー​ヘッド​の​実行​により​消費​さ​れる​合計​時間​が、​ます​ます​長​く​なり​ます。 この​オーバー​ヘッド​が​あまりに​大​きく​なる​と、​書き込み​アプリケーション​または​読み取り​アプリケーション​を​実行​する​プロセッサ​の​使用​率​が​100%​に​なり、​飽和​する​場合​が​あり​ます。 この​場合、​プロセッサ​は、​ネットワーク​ストリーム​エンジン​に​遅れ​ない​速度​で​アプリケーション​ループ​を​実行​でき​なく​なり、​アプリケーション​が​ボトルネック​に​なり​ます。

この​問題​を​診断​する​に​は、​アプリケーション​を​実行​し​て​いる​プロセッサ​の​使用​率​と​エンド​ポイント​バッファ​の​使用​率​を​確認​し​ます。 プロセッサ​の​使用​率​が​100%​で​あり、​書き込み​エンド​ポイント​バッファ​が​空​または、​ほとんど​常に​空​で​あれ​ば、​書き込み​アプリケーション​が​ネットワーク​ストリーム​エンジン​に​追​い​つい​てい​ない​こと​を​表​し​てい​ます。 同様​に、​プロセッサ​の​使用​率​が​100%​で​あり、​読み取り​エンド​ポイント​バッファ​が​満杯​または、​ほとんど​常に​満杯​で​あれ​ば、​読み取り​アプリケーション​が​ネットワーク​ストリーム​エンジン​に​追​い​つい​てい​ない​こと​を​表​し​てい​ます。 いずれ​の​場合​も、​1​回​の​呼び出し​で​読み取る/​書き込む​要素​数​を​増やす​こと​で、​全体​的​な​スループット​が​向上​する​場合​が​あり​ます。 可変​サイズ​データタイプ​の​場合​は、​別​の​方法​として、​ストリーム​に​書き込む​各​要素​の​サイズ​を​大​きくする​方法​も​あり​ます。 たとえば、​要素​タイプ​が​1D​配列​の​場合、​要素​数​が​10​の​配列​を​1,000​個​書き込む​の​では​なく、​要素​数​が​10,000​の​配列​を​1​つ​書き​込​んで​み​て​くだ​さい。

小​さ​すぎる​データ​を​一度に​読み書き​すると​スループット​に​悪影響​で​ある​の​と​同様、​大​き​すぎる​データ​を​一度に​読み書き​する​こと​も​悪影響​です。 大きな​データセット​の​場合、​データ​を​システム​メモリ​に​出し入れ​する​ため​の​オーバー​ヘッド​が、​読み取り/​書き込み​関数​を​呼び出す​回数​を​減らす​こと​で​減​ら​せる​オーバー​ヘッド​より​も​大​きく​なり​ます。 データセット​を​どれ​だけ​大​きく​した​とき​に、​これ​が​制約​要因​に​なる​か​は、​システム​に​依存​し、​システム​に​搭載​さ​れい​る​物理​メモリ​の​量​により​異​なり​ます。 これらの​問題​は、​各​読み取り/​書き込み​呼び出し​で、​合計​バッファ​サイズ​の​1/10​から​1/4​を​読み取る/​書き込む​よう​に​する​こと​で、​多く​の​アプリケーション​で​回避​でき​ます。

要素​データタイプ

ストリーム​の​データタイプ​は、​ネットワーク​経由​で​データ​を​送受信​する​とき​に​データ​を​平坦​化/​非​平坦​化​する​ため​に​読み取り/​書き込み​関数​に​かかる​作業​量​に​影響​を​与​え​ます。 この​ため、​一般に、​複雑​な​データタイプ​の​スループット​は、​簡単​な​データタイプ​より​も​劣​り​ます。 特定​の​データタイプ​の​要素​を​転送​する​の​に​必要​な​作業​量​は、​以下​の​要因​で​決まり​ます。

1. データタイプ​の​複雑​さ​と​サイズ。 たとえば、​クラスタ​の​よう​な​データタイプ​は、​副​要素​として​他の​データタイプ​を​含み、​ネスト​レベル​も​任意​で​ある​ため、​決​まっ​た​構造​を​もつ​データタイプ​より​も​構文​解析​や​コンストラクト​する​の​に​作業​を​要​し​ます。

2. データタイプ​の​要素​を​格納​する​ため​に​必要​な​メモリ​を​ストリーム​エンド​ポイント​が​効率​的​に​管理​できる​度合い。 データタイプ​が​固定​の​場合、​エンド​ポイント​は​全​要素​を​連続​した​メモリ​ブロック​に​格納​でき​ます。 データタイプ​が​可変長​の​場合、​エンド​ポイント​は​複数​の​メモリ​ブロック​を​管理​し、​ラン​タイム​に​は​適宜、​メモリ​の​割り当て​と​解放​を​行う​必要​が​あり​ます。

これらの​条件​から、​最も​効率​的​な​の​は​スカラ​データタイプ​で​あり、​その​単純​さ​と​固定​サイズ​で​ある​こと​から​最高​の​スループット​を​実現​でき​ます。 次に​スループット​が​良い​の​は、​サイズ​は​異なる​が​単純​と​分類​さ​れる​データタイプ​です。 これ​に​は、​スカラ​および​文字​列​の​配列​が​含​まれ​ます。 最後​に、​サイズ​も​異​なり、​データ​階層​も​複雑​な​クラスタ​や​クラスタ​の​配列​など​の​データタイプ​の​スループット​は​最も​劣​り​ます。 最高​の​スループット​を​得る​に​は、​可能​な​限り、​スカラ​データタイプ​を​使用​する​こと​を​お​勧め​し​ます。

レイ​テン​シ​の​最小化

デフォルト​では、​ネットワーク​ストリーム​は、​妥当​な​レイ​テン​シ​を​維持​し​つつ、​ネットワーク​帯域​幅​を​できる​限り​効率​的​に​使用​する​よう​に​デザイン​さ​れ​ます。 これ​は、​データ​が​ストリーム ​に​書き​込​まれ​た​とき​に、​ストリーム​が​その​データ​を​ネットワーク​に​送信​する​前​に、​一定​時間​保持​する​場合​が​ある​こと​を​意味​し​ます。 その​目的​は、​小さな​複数​の​パケット​を​ネットワーク​に​送信​する​の​では​なく、​連続​する​複数​の​書き込み​データ​を​結合​し​て​1​つ​の​大きな​TCP​パケット​として​送信​する​ため​です。 ストリーム​が​データ​を​送信​する​まで​に​待機​する​時間​を​決める​ヒューリスティック​は、​保留​中​の​データ​量​と​は​関係​なく、​実装​に​依存​する​ため、​リリース​ごと​に​変化​する​可能性​が​あり​ます。 これ​は、​TCP​パケット​オーバー​ヘッド​により、​無駄​に​なる​帯域​幅​を​最小​化​する​に​は​役​立ち​ます​が、​低スループットデータストリームのデフォルトレイテンシを増加させます。 ストリーム​を​使用​し​て​2​つ​の​アプリケーション​間​で​コマンド​を​送受信​し​て​いる​場合、​レイ​テン​シ​が​増加​する​の​は、​望​ま​しく​ありま​せん。 この​問題​を​緩和​する​ため​に、​書き込み​関数​を​呼び出し​た​直後​に、​下図​の​よう​に​排出​関数​を​呼び出す​こと​が​でき​ます。

排出​関数​の​タイム​アウト​を​0​に​する​こと​により、​書き込み​エンド​ポイント​は、​読み取りエンドポイントから受信または読み取られたデータを待たずに、​全​データ​を​読み取り​エンド​ポイント​に​即時​に​送信​し​ます。 この​プログラミング​技法​により、​書き込みアプリケーションの実行をブロックせずに、​最小​の​レイ​テン​シ​で​データ​を​送信​でき​ます。

ネットワーク​ストリーム​の​制約

ネットワーク​ストリーム​は、​ネットワーク​経由​で​ポイントツーポイント​通信​を​行う​ときの​新しい​レベル​の​使い​やす​さ​を​実現​し​ます​が、​アプリケーション​によって​は、​ネットワーク​ストリーム​の​使用​が​適​さ​ない​場合​も​あり​ます。

一般​的​に、​ネットワーク​ストリーム​は、​制御​アルゴリズム​内​で​の​使用​に​は​適​しま​せん。 イーサネット​は、​通常、​制御​アプリケーション​向け​に​信頼​できる​通信​バス​では​なく、​ストリーム​へ​の​読み書き​は​確定​的​では​ありま​せん。 制御​アプリケーション​内​で​リモート​HMI​と​の​通信​用​に​ネットワーク​ストリーム​が​使用​する​こと​は​でき​ます​が、​タイム​クリティカル​な​ループ​内​では​使用​しない​で​くだ​さい。 制御​アプリケーション​の​タイム​クリティカル​ループ​と​通信​ループ​間​の​通信​に​は、​その​代わり​に​RT FIFO​を​使用​する​必要​が​あり​ます。 その​時点​で、​制御​アプリケーション​の​通信​ループ​と​リモート​HMI​間​で​データ​を​交換​する​ため​に​ネットワーク​ストリーム​を​使用​でき​ます。

ネットワーク​ストリーム​は、​ロス​レス​の​ポイントツーポイント​通信​用​に​設計​さ​れ​てい​ます。 これ​は、​データ​スト​リー​ミン​グ​と​コマンド​ベース​の​アプリケーション​では​うまく​動作​し​ます​が、​任意​の​N:​1​または​多​対​多​通信​パス​を​確立​する​こと​は​非常​に​困難​です。 これ​は、​多く​の​クライアント/​サーバ​アプリケーション​で​一般​的​な​要件​です。 同様​に、​ストリーム​では​読み取り​後に​書き​込​まれ​た​最後​の​値​は​保持​さ​れ​ない​ので、​アプリケーション​を​監視​した​り、​HMI​上の​制御​器/​表示​器​を​更新​する​ため​に​使用​する​の​は、​より​困難​です。 これらの​タイプ​の​アプリケーション​では、​他の​通信​方法​が​適切​です。 アプリケーション​に​最適​な​通信​方法​の​選択​について​は、「Using the Right Networking Protocol」​の​チュートリアル​を​参照​し​て​くだ​さい。

最後​に、​アプリケーション​で​最高​の​ネットワーク​スループット​を​得​たい​場合​に​は、​ネットワーク​ストリーム​では​なく、​TCP API​を​使用​中​する​こと​が​望ましい​場合​が​あり​ます。 TCP​を​使用​すると、​ネットワーク​に​送信​する​データ​を​詳細​に​制御​でき、​通信​を​アプリケーション​に​最適​に​カスタマイズ​する​こと​が​可能​です。 同様​に、​同じ​LabVIEW​アプリケーション​コンテキスト​内​の​エンド​ポイント​間​の​通信​に​ネットワーク​ストリーム​を​使用​する​場合、​最適​な​パフォーマンス​を​得る​ため​に、​キュー​を​使用​する​こと​を​お​勧め​し​ます。 通信​は​同じ​メモリ​コンテキスト​内​で​発生​する​ので、​キュー​は​1​つ​の​メモリ​バッファ​しか​使用​しま​せん。 この​ため、​エンド​ポイント​が​ホスト​さ​れ​て​いる​場所​に​関係​なく、​2​つ​の​エンド​ポイント​バッファ​に​依存​する​ネットワーク​ストリーム​より​も、​よい​パフォーマンス​が​得​ら​れ​ます。

プラットフォーム​サポート、​インストール、​構成

LabVIEW 2010​の​時点​で、​ネットワーク​ストリーム​は、​Microsoft Windows​または​LabVIEW Real-​Time​が​稼動​する​ターゲット​で​のみ​サポート​さ​れ​てい​ます。 Microsoft Windows​の​場合、​ネットワーク​ストリーム​は​LabVIEW​ベースバッケージ​に​含​まれ​て​いる​ので、​インストール​と同時に​使用​でき​ます。 Windows​の​ファイア​ウォール​設定​で​ネットワーク​ストリーム​を​使用​する​方法​について​は、​技術​サポート​データベース 5BCF43RY:「Recommended Firewall Settings When Using Network Streams」​を​参照​し​て​くだ​さい。

LabVIEW Real-​Time​ターゲット​用​に​アプリケーション​を​開発​する​ため​の​ネットワーク​ストリーム​の​サポート​は、​LabVIEW Real-​Time​モジュール​を​開発​用​コンピュータ​に​インストール​する​際​に、​自動的​に​含​まれ​ます。 しかし、​Measurement & Automation Explorer​から​リアルタイム​ターゲット​に​ソフトウェア​を​インストール​する​とき、​ネットワーク​ストリーム​は、​デフォルト​では​含​まれ​てい​ま​せん。 LabVIEW Real-​Time​ターゲット​で​ネットワーク​ストリーム​を​有効​に​する​に​は、​インストール​時に​下図​の​よう​に、​ネットワーク​ストリーム​機能​が​選択​さ​れ​て​いる​こと​を​確認​し​て​くだ​さい。

リアルタイム​ターゲット​から​ソフトウェア​セット​が​提示​さ​れる​場合、​それに​ネットワーク​ストリーム​が​含​まれ​て​いる​場合​も​含​まれ​てい​ない​場合​も​あり​ます。 この​機能​が​ソフトウェア​セット​に​含​まれ​てい​ない​場合​は、​この​機能​が​含​まれ​て​いる​別​の​推奨​ソフトウェア​セット​を​選択​する​か、​カスタム​ソフトウェア​インストール​オプション​を​選択​し​て​くだ​さい。

データ​の​ベンチマーク​を​行う

パフォーマンス​期待​値​に関する​ガイド​を​提供​する​ため​に、​さまざま​な​ターゲット​で​実行​した​ときの​スループット、​レイ​テン​シ、​CPU​使用​率​を​測定​する​ベンチマーク​を​数回​行​いま​した。 すべて​の​ベンチマーク​は、​孤立​した​ギガ​ビット​ネットワーク​で​実施​しま​した。 通信​に​関与​する​ターゲット​の​いずれ​か​が​1 Gb/​s​ネットワーク​インタフェース​を​サポート​しない​場合、​ネットワーク​接続​は、​自動的​に​100 Mb/​s​で​ネゴシエート​さ​れ​ます。 ベンチマーク​で​使用​さ​れる​各​ターゲット​の​仕様​の​概要​的​な​要約​を​下表​に​示し​ます。

コントローラ

プロセッサ

メモリ

ネットワーク​インタフェース

ソフトウェア

デスク​トップ​コンピュータ Intel Xeon Quad-​Core W3520、​2.66 GHz

6 GB

1 Gb/​s​イ​ー​サ​ネット​アダプタ

Windows 7(64​ビット)

LabVIEW 2010(32​ビット)

NI PXI-8106 Intel Core 2 Duo 2.16 GHz

1 GB

1 Gb/​s​イ​ー​サ​ネット​アダプタ LabVIEW Real-​Time 2010
NI cRIO-9012 400 MHz Freescale MPC5200

64 MB

100 Mb/​s​イ​ー​サ​ネット​アダプタ LabVIEW Real-​Time 2010
NI cRIO-9024 800 MHz Freescale MPC8377

512 MB

1 Gb/​s​イ​ー​サ​ネット​アダプタ LabVIEW Real-​Time 2010

特に​表記​が​ない​場合、​すべて​の​ベンチマーク​は、​エンド​ポイント​の​少なくとも​1​つ​が​デスク​トップ​PC​ターゲット​で​実行​さ​れ​て​いる​状態​で​実施​しま​した。 また、​LabVIEW RT​を​SMP​で​使用​し​て​いる​PXI-8106​の​ネットワーク​パフォーマンス​を​最大​化​する​ため​に、​RT SMP CPU​ユーティリティ​VI​を​使用​し​て、​システム​プロセス​は​すべて​強制​的​に​コア​0​で​実行​し、​タイミング​ストラクチャ​は​すべて​強制​的​に​コア​1​で​実行​しま​した。

スループット

スループット​ベンチマーク​は、​ストリーム​へ​の​各​読み取り/​書き込み​呼び出し​で​一定​数​の​倍精度​データ​要素​を​ネットワーク​に​転送​し​て​実施​しま​した。 読み取り/​書き込み​関数​は​ループ​内​に​配置​し、​CPU​と​ネットワーク​の​上限​速度​で​実行​しま​した。 次に、​読み取り​エンド​ポイント​で​60​秒間​に​ストリーム​から​読み​取​ら​れ​た​要素​数​を​合計​する​こと​で、​スループット​を​計算​しま​した。 ターゲット​から​データ​を​主に​読み取る​か、​書き込む​とき​に​見​られる​パフォーマンス​の​違い​を​定量​化​する​ため​に、​ストリーム​の​方向​を​切り替え​て、​これらの​測定​を​繰り返し​ま​した。

スループット​を​最適​化​する​とき​に​実現​可能​な​スループット​に​最も​影響​が​ある​の​は、​エンド​ポイント​バッファ​サイズ​と​各​読み取り/​書き込み​呼び出し​で​読み​取​られる/​書き​込​ま​れる​要素​数​です。 これらの​パラメータ​の​影響​度​を​調べる​ため​に、​2​つ​の​テスト​を​実施​しま​した。 最初​の​テスト​は、​さまざま​な​バッファ​サイズ​を​スイープ​し​て、​読み取り/​書き込み​サイズ​を​バッファ​サイズ​の​1/10に​固定​し​ます。 2​番目​の​テスト​は、​最初​の​テスト​で​求め​た​最適​バッファ​サイズ​を​使用​し​て、​さまざま​な​読み取り/​書き込み​サイズ​を​スイープ​し​ます。 比較​用​に、​ネットワーク​ストリーム​API​の​代わり​に​TCP​関数​を​使用​し​て​2​番目​の​テスト​を​繰り返し​ま​した。 これらの​結果​が​以下​です。

* ストリーム​エンド​ポイント​の​バッファ​サイズ = 1,000,000 要素

* ストリーム​エンド​ポイント​の​バッファ​サイズ = 1,000,000 要素

* ストリーム​エンド​ポイント​の​バッファ​サイズ = 500,000 要素

レイ​テンシ

レイ​テン​シ​ベンチマーク​は、​2​つ​の​ストリーム​を​使用​し​て​2​つ​の​ターゲット​間​に​双方向​通信​リンク​を​形成​する​こと​で​実施​しま​した。 ターゲット​1​から​の​コマンド​を​書き込み、​ターゲット​2​から​の​コマンド​を​読み取り、​ターゲット​1​に​コマンド​を​エコー​バック​し、​ターゲット​1​から​コマンド​を​読み取る​まで​の​往復​トリップ​時間​を​測定​しま​した。 レイ​テン​シ​を​最小​化​する​ため​に、​各​書き込み​関数​の​後で​排出​関数​を​呼び出し​ま​した。 この​テスト​シーケンス​を​10,000​回​繰り返し、​結果​時間​を​平均​し​て​から、​片道​通信​の​平均​レイ​テン​シ​を​求める​ため​に​2​で​割り​ま​した。 マイクロ​秒​の​分解能​を​得る​とともに、​計測​ジッタ​を​最小​化​する​ため​に、​測定​は​LabVIEW Real-​Time​システム​上​で​行​いま​した。 転送​メカニズム​として​ネットワーク​ストリーム​の​代わり​に​TCP​を​使用​し​て、​同様​の​テスト​を​実施​しま​した。 結果​は​以下​の​表​に​記載​さ​れ​てい​ます。

ターゲット

接続

TCP (µs)

ネットワーク​ストリーム (µs)

PXI-8106

1 Gb/s

82.02

347.90

cRIO-9024

1 Gb/s

268.13

630.59

cRIO-9012

100 Mb/s

508.48

1581.25

スループット​と​CPU​使用率

可能​な​最大​スループット​を​得る​に​は、​CPU​の​大部分​を​消費​する​こと​が​必要​な​場合​が​多く​あり​ます。 多く​の​場合、​これ​は​望​ま​しく​ありま​せん。 この​代わり​に、​CPU​の​全体​使用​率​の​一定​割合​を​超​え​ず​に​得​られる​最大​スループット​を​求める​こと​の​ほうが​有用​な​場合​が​多い​です。 この​情報​を​得る​ため​に、​各​ターゲット​に関して、​スループット​と​CPU​使用​率​の​間​の​傾向​線​を​作成​する​ため​に、​一連​の​ベンチマーク​を​行​いま​した。 これらの​実験​結果​を​以下​の​グラフ​に​示し​ます。

これらの​グラフ​は、​指定​レート​で​書き込み、​平均​CPU​使用​率​と​スループット​を​測定​し​て、​作成​しま​した。 与​え​ら​れ​た​スループット​レート​に関して、​書き込み​エンド​ポイント​は、​目的​の​スループット​を​得る​ため​に​必要​な​間隔​で​固定​サイズ​の​データ​を​書き込む​こと​で、​一定​の​の​スループット​を​生成​しよう​と​し​ます。 データ​は、​次に​この​ターゲット​レート​で​60​秒間転送され、​データ​転送​の​間、​0.5​秒​おき​に​CPU​使用​率​を​測定​しま​した。 60​秒​間隔​の​終​わりに、​CPU​使用​率​を​平均​化​し​て、​読み取り​エンド​ポイント​で​実際​の​スループット​を​計算​しま​した。 次に、​ターゲット​スループット​を​増加​し​て、​CPU​使用​率​の​測定​値​が​90​パーセント​を​超える​か、​スループット​測定​値​が​横ばい​状態​に​なる​まで​繰り返し​ま​した。 使用​する​バッファ​サイズ​と、​繰り返し​ごと​の​読み取り/​書き込み​要素​数​は、​前​の​テスト​の​最適​結果​に​基​づ​い​て​選択​しま​した。 この​場合​も、​比較​用​に、​ネットワーク​ストリーム​の​代わり​に​TCP​を​使用​した​結果​を​出​しま​した。

* ストリーム​の​バッファ​サイズ = 1,000,000 要素、​ストリーム​の​読み取り/​書き込み​サイズ = 100,000 要素、​TCP​読み取り/​書き込み​サイズ = 10,000 要素

* ストリーム​の​バッファ​サイズ = 1,000,000 要素、​ストリーム​および​TCP​の​読み取り/​書き込み​サイズ = 100,000 要素

* ストリーム​の​バッファ​サイズ = 500,000 要素、​ストリーム​および​TCP​の​読み取り/​書き込み​サイズ = 50,000 要素