Linuxはスレッドが実行されるコアをどのように決定しますか?

Linuxはスレッドが実行されるコアをどのように決定しますか?

私はLinuxがスレッドが実行されるコアを決定するので、コアごとのタスクのバランスが保証されることを知っています。ところで、紹介文書はどこで見ることができますか?

具体的な実装方法を知りたいです。

-----2022-2-14----

スケジューリングアルゴリズムはすべてスケジューリング戦略に関するものであり、プロセス内でスレッドを割り当てて移行する方法とほとんど関係がありません。 go実装と同様のスレッド盗難技術があることを知っています。

ほとんどのオペレーティングシステムの本では、プロセスとスレッドについてのみ説明し、マルチコアでそれを予約する方法も省略しています。

ベストアンサー1

コアにプロセスキャッシュがある場合、カーネルは同じコアでスレッドのスケジュールを変更しようとしますが、これは保証されず、通常使用可能なコアで実行されるようにスケジュールを変更できます。たとえば、カーネルは通常、コアのプライマリスレッドとセカンダリスレッドの間でプロセスを交互に予約するため、コアが飽和してもセカンダリスレッドのプロセスは中断されません。

ただし、スレッドは特定のコアセットでのみ実行するようにスケジュールするように要求することもできます。これは、プロセスがキャッシュに問題があることがわかっている場合に要求される可能性がありますが、より一般的には、特定のソケットがプロセスがアクセスする必要がある特定のI / Oデバイスにアクセスできる場合に行われ、ソケット全体でWord I / Oを行うことができます。高価です。

一例は、特定のCPUスロットにマップされたPCIスロットのGPUにアクセスすることです。

おすすめ記事