単純なアプリケーションを作成して10分間実行すると、10スレッドを1回(pthreads)起動し、ループ中に1msの間スリープします。 。 44%(top
はそれを報告している)。 450 MHzのARM9 CPU、Linux 2.6.37がOSとして使用されています。実行中の他のプログラムはありません。異なるカーネル設定(Dynamic Ticks、Soft/Hard IRQ、High Resolution Timer、...、...)、異なる優先順位(最大99)を試しましたが、同じ。 /usr/bin/time -v
はca.任意のコンテクストスイッチとca. 3分はカーネル空間で費やされます。 caのための各スレッドのSleepin 5ミリ秒、CPU使用率はca.に低下します。 IMOはまだ狂っている9%(40'500'000サイクルが安全ないくつかのレジスタに)。 clock_nanosleepはスリープに使用されました(CLOCK_REALTIME/CLOCK_MONOTONICは何も変更しませんでした)。Linux上でのARM9でのスレッディング速度の遅さ
キャッシュをクリアする必要があるため、ARM9では完全なコンテキストスイッチが高価であることに気付いています。しかし、簡単なスレッドスイッチやOSへの切り替えは、高価なIMHO(アドレス空間は同じで、キャッシュ/ TLBフラッシングは不要)であってはいけません。これはよくあることですか、カーネルのボトルネックを見つけようとするべきですか?
「スリープ」にはどのプリミティブを使用していますか? (私はあなたの質問については考えていませんが、多分興味のあるようです) – Mat
@Matはそれを忘れた、変更しました – azraiyl