2013-08-05 30 views
5

由於大多數C程序員都知道libc爲線程cpu關聯性調優(pthread_attr_setaffinity_np())提供了非可移植函數。但是,我不知道的是在實現內核模塊時如何實現這一點。任何提及或重定向到某些實例的答案都會很有幫助。在Linux內核模塊中設置線程關聯

+0

能否請你詳細解釋一下:你想改變一些現有線程的親和性,或者從你的內核模塊產生一個給定的親和力的新線程?你想以這種方式完成什麼?這些信息可能會幫助這裏的專家給你答案。 – Eugene

+0

對不起,延遲的答案。我想要做的是在不同的內核上分別建立兩個線程,以便對緩存一致性問題進行一些測量。爲了使我的測量精確,我需要添加內聯彙編,但我也必須禁用搶佔。要做到這一點,我必須擁有一個用於該任務的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()函數。