4

マルチスレッドプロセスがあります。各スレッドは CPU バウンド (計算の実行) であり、大量のメモリも使用します。プロセスは、リソース モニターによると 100% の CPU 使用率で開始されますが、数時間後、CPU 使用率がゆっくりと低下し始めます。24 時間後には 90 ~ 95% になり、下降します。

問題は、何を探すべきか、これをデバッグするために使用できる最もよく知られている方法は何かということです。

追加情報:

十分な RAM があります。そのほとんどは常に使用されていません。perfmon によると、メモリは増加しません (したがって、リークしているとは思いません)。このコードは、.Net とネイティブ C++ を組み合わせたもので、一部のデータ マーシャリングが前後に行われています。これは、いくつかの異なるマシン (24 個の論理コアを持つサーバー) で見られました。perfmon で確認したことの 1 つは、CPU 使用率が低下するにつれて、Modified Page List Bytes インジケータが時間の経過とともに増加することです。

編集 1 使用されているサードパーティ ライブラリの 1 つに openfst があります。そのライブラリの誤用に非常に関連しているようです。具体的には、次の警告があることに気付き ました。警告 LNK4087: CONSTANT キーワードは廃止されました。データを使用

編集 2

質問は閉じられており、再開されていないため、調査結果と問題がどのように解決されたかを、将来のユーザーのために質問の本文に書きます (申し訳ありません)。アプリケーション/dll を消費することによって使用されるすべての openfst FLAGS_* シンボルを定義する openfst.def ファイルがあることが判明しました。「CONSTANT」の代わりに「DATA」というキーワードを使用するように修正する必要がありました (CONSTANT は危険なので廃止されました - 詳細: https://msdn.microsoft.com/en-us/library/aa271769(v=vs. 60).aspx)。その後、CPU 使用率の低下は見られなくなりました。「変更されたページ リスト バイト」インジケータの上昇はもうありません。openfst.def ファイルの CONSTANT キーワードの誤用のために非決定的だった FLAGS (具体的にはガベージ コレクション フラグ - FLAGS_fst_default_cache_gc) のデフォルト値に関連していると思われます。

結論警告を理解してください! できる限りそれらを排除してください!ありがとう。

4

1 に答える 1

0

このような自明ではない問題については、CPU の基礎となるハードウェア カウンターを実際にサンプリングするプロファイラーも使用する必要があります。私がよく知っているほとんどのプロファイラーは、基になるハードウェア カウンターではなく、カーネルが提供する統計を使用します。これは特に Windows に当てはまります。(理由の一部はレガシーであり、一部は Windows がカーネル統計をハードウェアから独立させたいと考えているためです。PAPI API はこれに対処しようとしていますが、まだ比較的新しいものです。)

最高のプロファイラの 1 つは Intel の VTune です。はい、インテルで働いていますが、社内の HPC 担当者も VTune を使用しています。残念ながら、それはかかります。学生なら割引があります。そうでない場合は、試用期間があります。

software.intel.com で、最適化とパフォーマンスの問題の診断に関する多くの情報を見つけることができます。最適化プロファイリングの指針は次のとおりです。x86 アーキテクチャを使用していない場合でも、この手法は有効です。

何が問題なのかというと、遅い劣化は奇妙です。

  • どのくらいの頻度で新しいメモリを使用したり、古いメモリにアクセスしたりしますか? レートは?速度が非常に遅い場合でも、ページなどのリソースの使用が遅くなる状況に陥っている可能性があります。
  • あなたのメモリアクセスパターンは何ですか? 時間の経過とともに変化しますか?どのくらい速く?おそらく、時間の経過とともにメモリ アクセス パターンが広がり、キャッシュ ミスが増える可能性があります。
  • おそらく、問題空間の分割により、新しい計算領域に入り、実際の病状はありません。
  • より長い間隔で行われる定期的なメンテナンス アクティビティがあるかどうかを調べてください。ただし、これは定期的な低下、たとえば 24 時間ごとに発生します。あなたが経験しているのは段階的な劣化であるため、これはあなたの状況のようには聞こえません。

x86 アーキテクチャを使用している場合は、Intel フォーラム (「Intel® Clusters and HPC Technology」や「Software Tuning, Performance Optimization & Platform Monitoring」など) に質問を送信することを検討してください。

最終的にわかったことを教えてください。

于 2015-11-30T20:50:14.827 に答える