2017-07-06 8 views
0

ブロックレイヤーを通過する各構造体bioのレイテンシ情報を描画します。 make_request_fnをオーバーライドするモジュールがあります。私はそのバイオがそこから要求待ち行列に到達するまでにどれくらいの時間がかかったのか、そこからドライバーに至るまでどれくらいの時間がかかったのかを知りたい。構造体バイオメトリックを使用するレイテンシ

私はmake_request_fnで受け取るバイオにカスタム構造を付けようとしましたが、それらを作成していないので、私はbi_privateフィールドを使用できません。これを回避する方法はありますか?

私が持っている選択肢の1つは、bio wrapper構造体を作成し、bio構造体を下位関数に渡す前にコピーして、container_ofを使用して時間を記録することです。

私はblktraceやbttのようなツールについて読んだことがありますが、私のモジュール内にその情報が必要です。これを達成する方法はありますか?

ありがとうございます。

答えて

0

私が使用した解決策は、drbdブロックドライバのソースに類似したものが見つかったら、一般的な回避策のようでした。 bi_privateフィールドは、それを割り当てる関数によってのみ使用できます。だから、私は次のようにbio_cloneを使った。

あなたはbi_end_io関数を書かなければならないだろう。この機能の中で元のバイオのためにbio_endioを呼び出すことを忘れないでください。 bio_endio(bio_source)を呼び出す前に、bi_errorフィールドをbio_sourceのbi_errorにコピーする必要があります。

これは誰かを助けることを望みます。

関連する問題