33

straceを使用しているアプリケーションのパフォーマンスをプロファイリングする必要があります。ただし、straceが発行するさまざまなシステムコールを解釈する方法はよくわかりません。それらのいくつかの例を以下に示します。

(A) lseek(3, 1600, SEEK_SET)                = 1600
(B) write(3, "G_DATA    300        0          "..., 800) = 800
(C) close(3)                                = 0
(D) mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b600b179000
(E) munmap(0x2b600b179000, 4096)            = 0
(F) fstat(3, {st_mode=S_IFREG|0644, st_size=1600, ...}) = 0

(A)から(F)までのこれらの行がI / O、転送されたデータ、パフォーマンスの重要性などの観点から実際に何を意味するのかを簡単な英語で簡単に説明していただければ幸いです。

私はstraceのマニュアルページを調べましたが、それでもあまり自信がありません。私が読むための他のポインタがあれば、それは素晴らしいことです。

私はオペレーティングシステムのバックグラウンドを持っており、システムコール、メモリ、仮想メモリ、スケジューリングなどが何であるかを理解しています。

4

2 に答える 2

28

これらを理解するには、POSIXシステムコールに精通している必要があります。これらは、ユーザースペースプログラムがカーネルと対話するために使用するインターフェイスです。

lseek、、、、、およびはすべてシステムコールでありwrite、Linuxマニュアルのセクション2に記載されています。closemmapmunmapfstat

簡単に説明すると、指定されたファイル記述子の内部ポインターを、 (開始)、(現在の位置)、または(終了)lseekから開始して、2番目の引数が指す位置のバイトに移動します。同じ記述子に対する連続した呼び出しは、この位置からアクションを開始します。これは、すべての種類の記述子に実装されているわけではないことに注意してください。ディスク上のファイルには意味がありますが、ソケットやパイプには意味がありません。SEEK_SETSEEK_CURSEEK_ENDreadwritelseek

write提供されたバッファをカーネルスペースにコピーし、実際に書き込まれたバイト数を返します。記述子の種類に応じて、カーネルはデータをディスクに書き込んだり、ネットワーク経由で送信したりする場合があります。このバッファをカーネルに転送する必要があるため、これは一般にコストのかかる操作です。

close提供された記述子を閉じ、カーネル内でそれに関連するすべてのリソースが解放されます。各プロセスには同時に開く記述子の数に制限があるため、この制限に達しないように記述子を閉じる必要がある場合があることに注意してください。

mmapは複雑なシステムコールであり、共有メモリを含む多くの目的で使用されます。ただし、一般的な使用法は、プロセスにより多くのメモリを割り当てることです。mallocおよびcallocライブラリ関数は通常、内部で使用します。

munmapmmap'pedメモリを解放します。

fstatファイルシステムがファイルに関して保持するさまざまな情報(サイズ、最終変更日、アクセス許可など)を返します。

于 2011-06-13T18:26:47.527 に答える
3

manコマンドごとにマニュアルページがあり、C関数の名前を入力して読むことができます(例man lseek:(チェックもapropos))。また、渡されたパラメーターの説明もあります。

簡単な要約は次のとおりです。

  • lseek-ファイル記述子の読み取り/書き込みファイルオフセットを再配置します
  • write-バッファからファイル記述子に書き込みます
  • close-プロセスごとのオブジェクト参照テーブルから記述子を削除します
  • mmap-メモリを割り当てるか、ファイルまたはデバイスをメモリにマップします
  • munmap-指定されたアドレス範囲のマッピングを削除します
  • fstat-パスが指すファイルステータスを取得します

シングル/ランダムsyscalの解釈は、パフォーマンスの観点からは意味がないことに注意してください。これらのシステムコールのパフォーマンスの有意性をテストするに-cは、各システムコールの時間、呼び出し、およびエラーをカウントし、要約を報告できるパラメーターを使用する必要があります。次に、最も時間がかかっているこれらについて詳しく読むことができます。

出力とstraceパラメーターの詳細については、を確認してくださいman strace

参照:シェル内のstraceをプレーンテキストに解析する方法は?

于 2016-04-11T20:19:54.633 に答える