2013-08-05 8 views
5

でスレッドアフィニティを設定するほとんどのCプログラマーは、libcがスレッドcpuアフィニティ調整(pthread_attr_setaffinity_np())のための移植性のない関数を提供することを知っています。しかし、私が実際には分かっていないのは、カーネルモジュールを実装するときにどのようにこれを行うことができるかということです。実際の例に言及したり、リダイレクトしたりする答えは、むしろ参考になります。linuxカーネルモジュール

+0

もっと詳しく説明してください:既存のスレッドのアフィニティを変更するか、カーネルモジュールから特定のアフィニティを持つ新しいスレッドを生成しますか?あなたはこのようにして何をしようとしていますか?この情報は専門家があなたに答えを与えるのを助けるかもしれません。 – Eugene

+0

遅れて申し訳ありません。私がしたいのは、それぞれ異なるコアに2つのスレッドを確立することです。そのため、キャッシュの一貫性の問題についていくつかの測定を行うことができます。私の測定を正確にするために、私はインラインアセンブリを追加する必要がありますが、プリエンプションも無効にする必要があります。これを行うには、タスク用のLinuxカーネルモジュールが必要です。しかし、そのようなモジュールの場合、libcライブラリは見えません。このため、どの関数がTHREADの親和性を変更しているのか、LKMのPROCESSの変更は見たくなります。これが今はっきりしていることを願って – user1533288

答えて

3

kthreadsは、カーネルスレッドの略です。指定したCPU上にそのようなものを作成するには、kthread_create_on_cpu()を呼び出す必要があります。 include/linux/kthread.hで定義されています。スレッドはスリープ状態で作成されるので、wake_up_process()を呼び出す必要があります。それで全部です。

私の答えはthisの質問でkthreadsを使用する例があります。

0

kthread_bind()関数を使用できます。

関連する問題