web-dev-qa-db-ja.com

使用頻度の高いnfsファイルを一覧表示するdtraceスクリプトを探しています

現在、NFSサーバー(Solaris 10)で最もアクティブなデータセットを識別するために https://github.com/siebenmann/cks-dtrace/blob/master/nfs3-mon.d を使用しています。

残念ながら、私はもっと深く掘り下げる必要があり、最も使用されているファイルを追跡できるようにしたいと思います。さまざまな操作の上位Xファイルを一覧表示する方法はありますか?

私はdtraceの第一人者ではなく、数時間で答えを見つけることができませんでした。

2
Samoo

NFS DTraceプロバイダーのドキュメントは Oracle Webサイト でかなり優れています。特に便利に見えるスクリプトは、_nfsv3fileio.d_または(後処理が必要になる可能性のあるlotより多くのデータを取得するため)です。 _nfsv3rwsnoop.d_。

「読み取り/書き込みの最大数」のように「最も使用されている」という意味であり、それらの比率や実行者の比率を気にしないと仮定すると、ファイル名とIOそれぞれのカウントは次のとおりです。

_nfsv3:::op-read-start, nfsv3:::op-write-start {
     @[args[1]->noi_curpath] = count();
}

tick-10sec {
    printa(@);
    trunc(@);
}
_

(NFS共有が設定されていないため、これを実行しませんでしたが、機能すると思います。)実行内容を要約すると次のようになります。

  1. _nfsv3:::op-{read|write}-start_は、NFSv3共有で読み取りまたは書き込みが開始されたときにトリガーされるイベントです。これらのいずれかが発生するたびに、イベントは変数_args[1]_を含む引数_noi_curpath_を取得します。これは、ファイルのパスを示します(使用可能な場合、キャッシュされないため、何も取得されない場合があります)。これをキーとして使用し、これが_@_という名前のマップの値として発生する回数のcount()を使用します。
  2. _tick-10sec_は、スクリプトの開始から10秒後に開始され、10秒ごとにトリガーされるイベントです。最初にprinta()を使用してマップを印刷し、次にtrunc()を使用してマップ内の値をクリアして、次の10秒のウィンドウの新しいデータを取得します。
1
Dan