Önsöz için Debian Wheezy'i AMD64 yonga setinde çekirdek 3.2 ile kullanıyorum. Makinemin iki Xeon E5-2690 çekirdeği var. Önyükleme parametrelerini bir CPU'daki tüm çekirdekler tek bir işleme ayrılacak şekilde ayarladım. Bunu yapmak için grub içinde isolcpus = 8,9,10,11,12,13,14,15 ayarladım.
Çok uzak çok iyi. Şimdi diyelim ki belirli bir komut için izole edilmiş CPU'ları kullanmak istiyorum, basit olmak için basit bir sonsuz döngü kullanacağım:
$ tasket -c 8-15 bash -c 'doğru; yankı merhaba> / dev / null; bitti '&
Şimdiye kadar iyi olan top, çekirdek 8'in% 100'e yakın kullanıma döndüğünü gösteriyor. Şimdi bu komutu tekrar başlattığımı varsayalım:
$ tasket -c 8-15 bash -c 'doğru; yankı merhaba> / dev / null; bitti '&
Şimdi üst 9-15 nolu çekirdeklerin boş kaldığını ve iki işlemin çekirdek 8'i paylaştığını gösteriyor.
$ tasket -c 8 bash -c 'doğru; yankı merhaba> / dev / null; bitti '&
$ tasket -c 9 bash -c 'doğru; yankı merhaba> / dev / null; bitti '&
Çekirdek 8 ve 9'un her biri gerektiği gibi% 100 kullanım elde eder. Bu yalnızca isolcpus için geçerlidir, çünkü çekirdek 1-7 ile aynı görev kümesi işlemleri ilgili çekirdekler üzerine düzgün bir şekilde yayar. Ayrıca "tasket -p", 8-15 işlem için benzeşim maskesinin doğru ayarlandığını gösterir. Çekirdek zamanlayıcı, bir isolcpus yakınlık maskesinde belirtilen en düşük çekirdek dışında bir şey kullanmayı reddetti.
Şimdi normalde bu benim yukarıdaki örnekleri ile büyük bir anlaşma olmaz, sadece her işlem için bireysel çekirdek belirtin. Ancak, özel CPU'da çok iş parçacıklı bir uygulama çalıştırmak istiyorum. Çekirdek kümesi belirtmek istiyorum ve işlenen her iş parçacığı için işlemci benzeşim ayrı ayrı sıfırlamak zorunda kalmadan, otomatik olarak iş parçacığı havuzu kullanmak istiyorum.
Herhangi bir zamanlayıcı bana isolcpu setinden birden fazla çekirdek vermek için nasıl bir fikrim var mı?