8
  1. 次回このファイルの更新された内容を取得するためにファイルを再度開くのではなく、ファイルを使用lseek(fd,0)してから使用するのは安全ですか?read(fd,buf)/proc/stat
  2. そして、mmap()このファイルを開いた後の呼び出しは実際に何をしますか(以下を参照)?

私が直面している問題は、トップレポートのCPU使用率が低すぎることです(ソフトウェア割り込みの場合は10%対100%)。straceは、topがこのファイルを再度開かず、代わりに最初に探してもう一度読み取ることを示します。そして、どういうわけか、次回このファイルから読み取られる内容は、catforfileだけを実行したときに得られる内容と一致しません/proc/stat

また、topとcat/proc/statを同時にループで実行すると、topは正しいCPU使用率を報告し始めます。

私が見つけたもう1つの違いは、topはファイルmmap()を開いた直後にcallを使用しますが、それを行わないことです。これも私の問題に関連している可能性があるかどうかはわかりません(ここにあるため):/proc/statcatfilesdes=-1

mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f7b37649000

2.6.32-27サーバーイメージでUbuntu10.04.1デスクトップエディションを使用しています。CPUはIntelQ6600です。

4

1 に答える 1

4

あなたが尋ねることは非常に興味深いです...私は自分のマシンをチェックインし始めましたが、cat / proc/statとexecutetopの違いはわかりません。とにかく、私は仕事をしていて、テストをするのに完全に「自由」ではありません。

開いたファイルを「更新」して新しいデータを読み取る方法は正しいです...[f| l] seek()を呼び出してファイルの最後に移動し、次にファイルの最初に移動すると、EOFと新しいデータが更新されます。データが読み込まれます。

mmap()呼び出しがあなたが言及した問題を引き起こすとは思わない、それは読み取りをより速くすることができるが、他には何もない(私は100%確信していない)。

/ proc / statを開いて、それを読み、探して、もう一度読んで、どのように更新されるかを確認する小さなアプリをCで作成することをお勧めします。また、ストレステストを行う必要がある場合も役立ちます。

今、あなたの本当の質問に答えます:

  1. はい、確かに、ファイルの新しいデータを「待機」しているので、ファイルを常に開いたり閉じたりするよりも優れているはずです。

  2. ファイルをプロセスアドレス空間にマップします。ここにいくつかの情報と例があります。

http://www.gnu.org/s/libc/manual/html_node/Memory_002dmapped-I_002fO.html http://www.linuxquestions.org/questions/programming-9/mmap-tutorial-cc-511265/

于 2011-01-25T13:22:42.030 に答える