none
必要とするパソコンスペックの検討方法 RRS feed

  • 質問

  • はじめまして。spacemoon7ともうします。
    初めて投稿いたします。

    投稿したフォーラムの間違いや、フォーラムの使い方の間違いなどありましたら、ご指摘ください。

    -----
    【相談内容】
    作成するアプリケーションが必要とするパソコンスペックを検討する場合の、検討方法や指針などがありましたら、ご紹介ください。


    現在、Visual Studio 6で開発していて、近いうちにVisual Studio 2010でリニューアルする予定です。このとき、パソコンのスペックを含んで、適切なパフォーマンスが確保できるように、パフォーマンスの設計を行いたいと考えています。

    設計するアプリケーションのスペックは下記のとおりです。

    ■アプリケーションのスペック
    ・Windowsクライアントアプリケーション
    ・いくつかの計測機器を同時に制御する。
    ・計測機器の計測情報を、なるべくリアルタイムに収集して、画面に表示する。
    ・LAN接続で複数の機器と通信します。
    ・RS-232CまたはRS-485接続で複数の機器と通信します。

    下記は現状考えられる最大構成です。(ユーザー要求により機器の台数が変わります)
    ・機器1 LAN TCP/IP(機器からのデータ送信 約1200バイト/10ms)1台
    ・機器2 LAN TCP/IP(機器からのデータ送信 約 500バイト/10ms)4台
    ・機器3 RS-232C(データ送信 約100バイト/500ms)1台
    ・機器4 RS-232C(データ送信 約 50バイト/500ms)1台
    ・機器5 RS-232C(データ送信 約 50バイト/500ms)1台

    ・画面上に数値のデジタル表示。約2画面分。
    ・画面上に数値のグラフ表示。約6画面分。

    各機器は、自社製品で組み込みソフトが入っています。
    独自の通信仕様で、アプリケーションと通信します。
    (TCP/IPの上に独自の通信仕様を実現しています。)
    業界標準などの通信仕様ではありません。



    既存のアプリケーションは、Visual Studio 6で、Win32ベースで開発しています。
    Visual Studio 2010やWindows7の便利な機能などは、勉強不足です。
    また、組み込みソフトの開発も行っています。


    以上、よろしくお願いいたします。

    2012年8月9日 2:11

すべての返信

  • ■アプリケーションのスペック
    ・Windowsクライアントアプリケーション
    ・いくつかの計測機器を同時に制御する。
    ・計測機器の計測情報を、なるべくリアルタイムに収集して、画面に表示する。
    ・LAN接続で複数の機器と通信します。
    ・RS-232CまたはRS-485接続で複数の機器と通信します。

    下記は現状考えられる最大構成です。(ユーザー要求により機器の台数が変わります)
    ・機器1 LAN TCP/IP(機器からのデータ送信 約1200バイト/10ms)1台
    ・機器2 LAN TCP/IP(機器からのデータ送信 約 500バイト/10ms)4台
    ・機器3 RS-232C(データ送信 約100バイト/500ms)1台
    ・機器4 RS-232C(データ送信 約 50バイト/500ms)1台
    ・機器5 RS-232C(データ送信 約 50バイト/500ms)1台

    ・画面上に数値のデジタル表示。約2画面分。
    ・画面上に数値のグラフ表示。約6画面分。

     一生懸命考えられたのだと思いますが、まだまだ情報不足です。

     「なるべくリアルタイムに収集して」を、具体的に数値化して下さい。「1秒毎に更新」とか、「遅くても500ミリ秒周期で」とか。

     「画面上に数値のデジタル表示。約2画面分。」とのことですが、「2画面」とは、どの大きさのスクリーンに対し、どの大きさのフォントで表示して、どれくらいの数の表示用コントロールを配置する予定でしょうか。同じように、「画面上に数値のグラフ表示。約6画面分。」も、どれくらいの密度になるのでしょうか。また、「*画面」とは、私は1つのディスプレイと想定しましたが、何を単位にしていますか。あるいは、1台の PC に8台のディスプレイを接続して、それぞれ違う画面を表示するのでしょうか。そうでないなら、表示していない画面は表示の直前まで更新を止めておけば、表示している画面のパフォーマンスに影響を与えないですよね?

     また、「スペック」を、どのような意味で用いられているでしょうか。最近の CPU はたいてい複数のコアを持っていますので、マルチ スレッドを利用すれば、おおよそ大丈夫だと思います。ただし、人間の方にマルチ スレッド プログラミングを行うスペックが求められますが。


    Jitta@わんくま同盟

    2012年8月11日 0:04
  • ご返信いただき、ありがとうございます。
    夏季休暇中のため、ご連絡が遅くなりました。

    ----------
    今回、ご相談している真の理由は、
    なるべく価格の安いパソコンの機種を使用したいのですが、「アプリケーションの機能よりもパソコンのスペックが低いために」トラブルが発生するようなことが、ないようにしたいためです。
    データ抜けや、通信異常(各機器との応答が滞るなど)がないようにしたいと考えています。

    ----------

    相談内容に、情報追加いたします。

    ・「なるべくリアルタイムに収集して」については、
    画面表示は1秒周期に更新。
    受信したデータは、最短で10msごとすべてのデータをcsv形式でファイルに記録します。
    データ数は、最大約350種類。(記録周期と保存種類はユーザーが指定します)
    現状は、ファイル書き込みスレッドにて、受信データを順次書き込むようにしています。受信データのすべてを、内部メモリのリングバッファにためておき、ファイル書き込みスレッドが動き出したときに、ファイルに保存しています。


    ・スクリーンの大きさ。19インチ。SXGA(1280×1024)
    ・ディスプレイは1台のみ接続されます。
    ・画面1(メイン)は、スクリーンの約上半分を使い。約20種類の計測値をデジタル表示します。
    ・画面2(サブ)は、必要なときだけ表示して、300種類の計測値をデジタル表示します。フォントサイズは9ポイント。
    ・グラフ画面1は、3本。更新周期1秒。
    ・グラフ画面2~5は、それぞれの画面に最大150本。更新周期1秒。
    ・グラフ画面6~9は、それぞれの画面に最大150本。更新周期1秒。
    ・グラフ画面1~9は、必要なときだけ表示します。しかし、画面の空きがあれば、2つぐらいは並べて表示したい。
    ・グラフ画面は、X軸とY軸のスケール変更ができるようにします。

    ・RS-232C接続の機器については、スレッドを起動して送受信を行います。
     複数コアのCPUに配慮した設計になっているか、不明です。
     Visual Studioのヘルプを見て、見よう見まねで作成しているため。
     参考書を頼りに設計しているわけではないため、勉強不足な点はありかもしれません。


    ----------
    現在、選定中のパソコンは、下記の2種類のどちらかです。

    (1)NEC FC-E25B
    Core i5-2510E (2.5GHz)/メモリ 2GB/HDD 320GB/Windows7
    RASボード付き
    NI社 PCIe-6343(A/Dボード)
    インタフェース社 PCI-4142PE(RS-485)

    (2)NEC FC-E16U
    Celeron B810 (1.6GHz)/メモリ 2GB/HDD 320GB/Windows7
    RASボード付き
    NI社 PCIe-6343(A/Dボード)
    インタフェース社 PCI-4142PE(RS-485)


    自社製品と制御パソコン、アプリケーションソフトをセットで、ユーザーに販売しています。
    ユーザーの要求があれば、製品の組み合わせやアプリケーションソフトの機能を一部変更します。


    以上、よろしくお願いいたします。
    2012年8月16日 5:44
  •  情報を追加していただき、ありがとうございます。

    なるべく価格の安いパソコンの機種を使用したいのですが、「アプリケーションの機能よりもパソコンのスペックが低いために」トラブルが発生するようなことが、ないようにしたいためです。
    データ抜けや、通信異常(各機器との応答が滞るなど)がないようにしたいと考えています。

     では、アプリケーションの機能に求める性能を、どのように見積もられていますか?
     RS-232C を使って、200bytes/sec, 100bytes/sec, 100bytes/sec のデータ受信を行うわけですが、このデータは0.5秒ごとに受信するけれども画面には1秒ごとに表示するとのことです。では、画面に表示する間に2回受信を行いますが、表示するデータは最近の1回でしょうか、それとも2回分に何らかの演算を行った結果でしょうか。それによって表示するまでに必要な時間が変わりますが、その演算を1秒未満で行うだけのプログラミング能力があるでしょうか。今、1秒ごとに表示なので「1秒未満」としましたが、表示する内容が増えればそれだけ更新にも時間がかかりますから、当然演算に費やせる時間は短くなっていきます。そのあたりを考えると、「画面2(サブ)は、300種類の計測値をデジタル表示します」というのは、実用的ではないように思いました。
     同じように、グラフに「最大150本」とのことですが、150本というのはどのようなグラフに、150の項目を、どのように表示するのでしょうか。「レーダーチャートに最大150角形のデータを描く」というのと、「折れ線グラフに150の項目を1秒ごと120秒間プロットする」というのとでは、必要なデータ量、演算量が大幅に異なります。また、折れ線グラフとした場合の描画についても、121の点を持つ折れ線を150本描くのと、120×150の線を描くのとでは、描画速度に差が出そうです。このあたり、描画のアルゴリズムを思いつけるかどうかで必要な性能が変わるかもしれません。

     で、ここまでに挙げたことについては、検証用のコードを作って計測できるのではないでしょうか。検証に使った PC のスペックと、予定している PC のスペックを比較すれば、十分にマージンを持った機器の選定ができるのではないかと思います。

     それ以外のところで気になったのは、Windows 7 でメモリ 2GB と言うところです。これ、どうなんでしょう?Vista で 2GB は少ないと感じています。また、ハードディスクも気になりました。ここには容量しか上げられていませんが、たいていシークタイム、回転速度が表記されていると思います。それによって、書き込み速度を計算できますよね。受信したデータを書き込むのに、十分な時間が取れるでしょうか。また、「受信したデータは、最短で10msごとすべてのデータをcsv形式でファイルに記録します。」とあるので、320GB という容量がどうなのか、気になりました。体感的なことですが、システム ドライブの使用割合が80%を超えると、極端にディスク アクセスが遅くなるように思います。85%を超えるとデフラグができなくなります。システムの寿命も踏まえて、そのあたりはどのようにお考えでしょうか。

     マルチ コアについては、マルチ スレッド プログラミングの経験がおありなら大丈夫です。ランタイムがよろしく取りはからってくれます。


    Jitta@わんくま同盟

    2012年8月17日 22:58
  • ご返信いただき、ありがとうございます。
    ご返信の内容から項目をピックアップして、回答したいと思います。

    -----
    1.RS-232Cの受信処理にて、1秒の間の最新の1回を表示するのか?
    2回のデータの判定や演算はあるのか?

    受信したすべてのデータについて、判定処理があります。
    機器の異常判定や、取得した計測値の判定。
    画面への表示は、表示周期1秒ごとに、そのとき受信している最新の情報を表示します。

    -----
    2.画面2(サブ)に、300種類表示は、画面実用的ように思う。
    了解しました。
    検証コードを用意して、表示にかかる時間を計測してみたいと思います。


    -----
    3.グラフ表示の仕様
    グラフはすべて計測値を折れ線グラフで表示します。
    X軸が時間。
    Y軸が計測値(計測電圧と計測温度)

    グラフ画面2~5に、計測電圧値を表示します。
    150本を、グラフ画面2~5のどこに分けて表示するか、環境設定画面でユーザーが選択します。たとえばグラフ画面2に150本。グラフ3~5に0本という設定ができます。
    ひとつのグラフ画面で、すべての線を1色で表示します。


    -----
    4.検証用の検証用のコードで処理時間を測定する。
    実施してみたいと思います。


    -----
    5.Windows7でメモリ2GBは少ないのではないか?
    あまり、Windows7を使用したことがないので、予想がつきません。
    仕事では、最近、開発用マシンとしてWindows7が導入されましたが、あまり使用していません。


    -----
    6.HDDのシークタイムから、書き込み時間を計算できるのでは?

    データファイル保存するドライブの空き容量は10秒ごとにチェックしています。
    ただし、以前から(約10年前から)100Mバイト以下になったら、データ記録を停止して、異常表示をするようになっています。(100Mバイトを閾値にする方法が適切ではないかもしれません。)

    ドライブのシークタイムと回転速度まで気にしたことはありませんでした。
    書き込み予定のデータ量から計算してみたいと思います。



    -----
    ■パソコンスペックを決めるまでのプロセス
    これまで相談させていただき、自分なりに理解したことを記載します。

    (1)事前の検討(机上)
    →接続される機器の種類と、通信のデータ量を明確する。
    →ファイルアクセス頻度やデータ量を明確する。
    →画面表示情報の種類と更新周期を明確にする。

    (2)検証用コードによる検証(処理時間など)
    →この時点で制御パソコンのスペックを選択。ある程度マージンを見る。

    (3)実際のパソコンで、最終アプリケーションソフトで、検証/評価を実施。
    →最大負荷での評価を行い、データの抜けや通信異常にならないか確認する。


    以上、ご報告いたします。
    気になる点などありましたら、ご指摘ください。
    2012年8月20日 8:44
  • ただし、以前から(約10年前から)100Mバイト以下になったら、データ記録を停止して、異常表示をするようになっています。(100Mバイトを閾値にする方法が適切ではないかもしれません。)

     これについては、「空き容量」ではなく、「全容量に対する空き容量の割合」を見る方が良いと思います。理由は、デフラグを行うために15%以上の空き容量がいることです。先にも「体感的なことですが、システム ドライブの使用割合が80%を超えると、極端にディスク アクセスが遅くなるように思います」と書いたように、「何バイトの空きがあるか」よりも、「何パーセントの空きがあるか」の方が重要なように思います。「様に思う」という、根拠の薄いことですが。私のディスクは空きが45GB(約30%)ありますが、インストール初期と比べてページングにかなりの時間がかかるようになっています。20%以下になったときには、さらにパフォーマンスが低下しました。
     「システム ドライブ」なので、システム ドライブとデータ ドライブを分ける事も、一つの案かと思います。


    Jitta@わんくま同盟

    2012年8月21日 12:17