下記からダウンロードで資源の競合
-
27-10-2019 - |
質問
んのプロファイリングは、並行マルチスレッドプログラムの異なる番号を許可す。ここでのパフォーマンス実績とつの同じ入力します。
1 thread:
Total thread time: 60 minutes.
Total wall clock time: 60 minutes.
10 threads:
Total thread time: 80 minutes. (Worked 33% longer)
Total wall clock time: 18 minutes. 3.3 times speed up
20 threads
Total thread time: 120 minutes. (Worked 100% longer)
Total wall clock time: 12 minutes. 5 times speed up
のでありますのスレッドには時間が同じ仕事をしていて感じるのは、スレッドが必要に挑みます。
しかし、私の検討を柱(cpu、メモリ、diskIO、ネットワーク)の両方のアプリをデータベースサーバーです。メモリの他の主要先進国では資源の固定(以1G無料).CPUぼす30%70%、20日のスレッド試験、たっぷりあります。diskIOは実用的なアプリケーションに機械を、最小限のデータベースサーバーです。ネットワークは本当に素晴らしいです。
私もコールドとredgateや方法が見つかっていない待機中のロックを解除します。このスレッドを共にしない場合がございます。私はチェックをより繊細な品のようなデータベース接続の確立/プールした場合20のスレッドの試みに接続するには同じデータベースの、そして待機。).
ようにしている特定の資源争い、20日のスレッド実行のようになります:
20 threads
Total thread time: 60 minutes. (Worked 0% longer)
Total wall clock time: 6 minutes. 10 times speed up
何が最も可能性の高い資源以外のビッグ4るものなのかどうかに関して見なければ見ることで競?
をコードしている各スレッドを実行で約:
Run ~50 compiled LinqToSql queries
Run ILOG Rules
Call WCF Service which runs ~50 compiled LinqToSql queries, returns some data
Run more ILOG Rules
Call another WCF service which uses devexpress to render a pdf, returns as binary data
Store pdf to network
Use LinqToSql to update/insert. DTC is involved: multiple databases, one server.
は、WCFサービスを同一の機械が状態なしで複数の要求を同時に処理.
機械としては8つのcpuです。
解決
あなたが説明するのは、スレッドの増加とウォールロック時間の減少の間の1:1の関係である100%のスケーラビリティが必要だということです...これは通常の目標ですが、達成するのは困難です...
たとえば、1 GBの空き容量があるため、メモリの競合はないと記述します...これは私見では間違った仮定です...メモリの競合は、2つのスレッドがメモリを割り当てようとすると、一方がメモリを割り当てなければならない可能性があることも意味します他の人を待つ...覚えておくべき別のポニントは、すべてのスレッドを一時的にフリーズするGCによって発生する中断です... GCは構成(gcServer)を介して少しカスタマイズできます- http://blogs.msdn.com/b/clyon/archive/2004/09/08 /226981.aspx
もう1つのポイントは、呼び出されるWCFサービスです...スケールアップできない場合(PDFレンダリングなど)、それも競合の一形態です...
考えられる論争のリストは「無限」です...そしてあなたが言及した明白な領域に常にあるとは限りません...
編集-コメントによる:
確認すべき点:
- 接続プーリング
どのプロバイダーを使用していますか?どのように構成されていますか? - PDFレンダリング
競合の可能性は、使用するライブラリ内のどこかで測定されます... - Linq2SQL
これらすべてのクエリの実行プランを確認してください...一部のクエリが何らかのロックを取得し、DBサーバー側で競合が発生する可能性があります...編集2:
スレッド
これらのスレッドはThreadPoolからのものですか?もしそうなら、あなたはスケーリングしません:-(編集3:
ThreadPoolスレッドは、シナリオの場合のように長時間実行されるタスクには適していません...詳細については、を参照してください。
- http:// theburningmonk.com/2010/03/threading-using-the-threadpool-vs-creating-your-own-threads/
- C#でスレッドプールを使用するタイミング >
- http://support.microsoft.com/kb/2538826
- http://msdn.microsoft.com/en-us/magazine /dd252943.aspx
http://www.yoda.arachsys.com/csharp/からthreads / printable.shtml
長時間実行される操作では、新しく作成されたスレッドを使用する必要があります。 短期間の操作では、スレッドプールを利用できます。
極端なパフォーマンスが必要な場合は、 CQRS と実際の-をチェックする価値があります。 LMAX として記述されている世界の例。
他のヒント
合計スレッド時間を測定する代わりに、何らかのI / O(データベース、ディスク、ネットなど)を実行する各操作の時間を測定します。
これらの操作は、スレッドが多いほど時間がかかる操作であることがわかると思います。これは、競合がそのI / Oの反対側にあるためです。たとえば、データベースがデータの整合性を求めるリクエストをシリアル化している可能性があります。
ありが資源に対立を生んでいる。すべてのスレッドを読み取り/書き込みデータと同一のメモリバスは、同じRAMモジュールです。などのRAMは無料で事項を読み込み/書き込みが行われる同メモリー-コントローラーが同じモジュールをRAMのデータは同じです。
があればどのような同期 どこでも, それはあまりにも競合している資源です。だが--- 他の I/O、他の主要先進国では資源です。
または、N×高速時には1からNスレッド)。することはできませんので最終的には、 すべ のCPUである共有資源ることがあります士の対立を生んでいる。
あたっぷりの要因を防止しますが、フルリニア高速化.だと仮定すると、データベースに、サーバは、データベースにしないようにするには、ネットワークに接続してクライアントに、クライアントコンピュータのOSやドライバーの両端部には、メモリ-サブシステム、ディスクI/O すべ とができるしっかりと20倍ときに1から20ます。
二葉夢。
それぞれのボトルネックだけはまる数%であり、その全体の結果のようなものだなと思います。
ていらっしゃることだと思いますので戻るスケートよりも期待してはいけません。
でも、やが期待キャッシュのライン。いスレッドがアクセスデータのデータ使用その他のスレッド?わかき回ることを避けるために起こる?