私はオペレーティングシステムに関するプロジェクトを進めており、オペレーティングシステムのプロセススケジューリングデータが必要です。データには、各プロセスのCPUタイムスライスとメモリー要件とともに、短期スケジューラーと長期スケジューラーのすべてのプロセスのリストを含める必要があります。また、他のプロセスがいつ、どのプロセスによって先取りされたかについてのデータも必要です。 Linuxでこれらすべてのデータを収集する方法はありますか?どうすればいいですか?
Linuxソースコードには構造体がありますtask_struct
。include/linux/sched.h
構造体内の各オブジェクトの状態を取得する方法はありますか?
答え1
詳細なスケジュール情報が必要な場合は、次のいずれかのツールを使用できます。
- パフォーマンス
- システムクリック
- dtrace(Linuxポートの状態がどうかわかりません)
- システムマイニング
これらのすべては、カーネルフックを利用して、コンテキスト切り替え、割り込み、I / O、システムコールなどのイベントを公開できます。
答え2
次のコマンドを使用して、プロセス、スケジューラ、オペレーティングシステム、およびハードウェアの他のコンポーネントに関する豊富な内部情報を取得できます。
cat /proc/...
どこに…たくさんのことがあるかもしれません。たとえば、プロセスIDの後にいくつかの特定の情報要求がある場合、または次のスケジューラのデバッグ情報要求があります。
cat /proc/sched_debug
完全なオプションのリストを表示するには、を入力しますls /proc
。 sched_debug、cpuinfo、meminfo、uptimeなどの興味深い名前を含む長いプロセスID番号のリストが表示されます。
すべて仮想ファイルシステムのおかげですプロセスファイルシステム これについてもっと読むことができます。ここ。
別の便利なコマンドは次のとおりです。
top
プロセス予約方法、メモリ使用量などのリアルタイム情報が表示されます。
答え3
このps
コマンドは良い出発点です。選択した一連のプロセス(おそらくすべてのプロセス)について表示される情報を指定できます。man
optionsのフラグで指定されて取得できる利用可能な情報の詳細については、そのページを読むことができます-O
。
始めたい内容は次のとおりです。
ps -O "%mem nice state upr pri cpu"