ソモサン

私rohkiによる活動や読書の記録をつらつらと書くページです

プロセスごとの Disk IO がパフォーマンスカウンターの Process からじゃあとれない悲しみ

パフォーマンスカウンターでの性能計測は、テストや開発で行います…よね?
そこでタイトルの話ですよ。

たまにとれるって発信してはるところもありますが、MSDN Process Object の定義を引くと以下のようになってます。*1

IO Data Operations/sec
Shows the rate at which the process is issuing read and write I/O operations. This counter counts all I/O activity generated by the process to include file, network and device I/O's.

ネットワークとファイルとデバイスの IO を全部含んだ値です。
一方で、ディスクごとに取れるのは、当然ディスクに対するアクセスの合計値です。
詳細は以下参照です。
PhysicalDisk Object

ということで、Process ではいろんな IO が混ざった値がとれ、 Disk ではいろんなプロセスからのをまるっとまとめた値が取れるわけです。
なので、プロセスごとの Disk IOは、パフォーマンスカウンターではとれません。
とれないんですよ…

リソースモニターは?

とれます。
ただし、GUI のみです。

xperf は?

とれます。
でもインストールいるし、etl 形式で取り回しが辛いし…
1台2台とかならまだ良いんですけど、それ以上ってなってくるとプログラム展開やファイル回収が辛い…
性能テストがっつりなら、xperf を入れた専用マシンとシステムを用意ってところですかね。

ということで

解決を模索中

*1:メンテされてるんですかねこの辺。変わらないでしょうけども。