2013-08-05 38 views
5

C programcılarının bildiği gibi libc, iş parçacığı cpu afinite ayarı (pthread_attr_setaffinity_np()) için taşınabilir olmayan işlevler sağlar. Ancak, gerçekten bilmediğim şey, bu, çekirdek modülünü uygularken nasıl yapılabilir. Bazı gerçek örneklerden bahseden ya da yönlendiren herhangi bir cevap oldukça yararlı olacaktır.bir linux çekirdek modülünde iş parçacığı afinitesini

+0

Daha ayrıntılı olarak açıklayabilir misiniz: Mevcut bir parçanın ilgisini değiştirmek mi yoksa çekirdek modülünüzden belirli bir yakınlıkla yeni bir iş parçacığı mı üretmek istiyorsunuz? Bu şekilde yapmaya ne çalışıyorsunuz? Bu bilgi, uzmanların size cevap vermesine yardımcı olabilir. – Eugene

+0

Gecikmiş cevap için özür dilerim. Yapmak istediğim, her biri farklı çekirdeklerde iki iş parçacığı oluşturmaktır, böylece önbellek tutarlılığı sorunu hakkında bazı ölçümler yapabilirim. Ölçümlerimi hassas hale getirmek için, düzlemsel birleştirme eklemem gerekiyor ama aynı zamanda önleme işlemini de devre dışı bırakmalıyım. Bunu yapmak için, görev için bir linux çekirdek modülüne sahip olmalıyım. Bununla birlikte, böyle bir modül için libc kütüphanesi görünmezdir ve bu nedenle, hangi fonksiyonun LKM'deki bir PROSES'in hiçbiri, THREAD'in afinitesini değiştirdiğini görmek istiyorum. Umarım bu şimdi açıktır ... – user1533288

cevap

3

kthreads, çekirdek konuları anlamına gelir. Belirtilen cpu'da oluşturmak için, kthread_create_on_cpu()'u çağırmalısınız. include/linux/kthread.h'da tanımlanmıştır. İş parçacığı uyku durumunda oluşturulacak, bu yüzden üzerine wake_up_process() numaralı telefonu aramalısınız. Bu kadar.

this sorusundaki cevabımda kthreads kullanmanın bir örneğini alabilirsiniz.

0

kthread_bind() işlevini kullanabilirsiniz.

İlgili konular