Çok çekirdekli işlemciler sunucularda, dizüstü bilgisayarlarda veya masaüstü bilgisayarlarda ve hatta mobil cihazlarda gittikçe daha yaygın hale geldikçe, bu tür sistemler için daha fazla uygulama optimize edilmektedir. Bununla birlikte, bazen bir program veya işlemi bir veya daha fazla belirli çekirdeğe bağlamak yararlı olabilir. Bakalım nasıl elde edeceğiz ...
Görev kümesini yükleyin
Görev seti aracı, "util-linux" paketinin bir parçasıdır. Çoğu Linux dağıtımı, varsayılan olarak paket önceden yüklenmiş olarak gelir. Görev setinin mevcut olmaması durumunda, aşağıdaki şekilde kurmak mümkündür:
En Debian / Ubuntu ve türevler:
sudo apt-get kurulum util-linux
En Fötr şapka ve türevler:
sudo yum util-linux'u kurun
Çalışan bir işlemin CPU benzeşimini görüntüleyin
Bir işlem için CPU benzeşimi bilgilerini almak için aşağıdaki biçimi kullanın:
tasket -p PID
Örneğin, PID 2915 ile bir işlemin CPU yakınlığını kontrol etmek için:
tasket -p 2915
Sonucu verir:
pid 2915'in mevcut yakınlık maskesi: ff
tasket, geçerli CPU benzeşimini onaltılık bit maskesi biçiminde döndürür. Örnekte, yakınlık (onaltılık bit maskesiyle temsil edilir), ikili formatta "11111111" e karşılık gelir; bu, işlemin sekiz farklı CPU çekirdeğinden (0 ila 7) herhangi birinde çalışabileceği anlamına gelir.
Onaltılık bit maskesindeki en düşük bit çekirdek kimliği 0'a, ikinci en düşük bit sağdan çekirdek kimliği 1'e, üçüncü en düşük bit çekirdek kimliği 2'ye vb. Karşılık gelir. Dolayısıyla, örneğin bir CPU benzeşimi "0x11", çekirdek kimlikleri 0 ve 4'ü temsil eder.
görev kümesi, CPU benzeşimini bit maskesi yerine bir işlemci listesi olarak gösterebilir ve okunması çok daha kolaydır. Bu biçimi kullanmak için, görev kümesini "-c" seçeneğiyle çalıştırmanız gerekir. Örneğin:
tasket -cp 2915
Sonucu verir:
pid 2915'in mevcut yakınlık listesi: 0-7
Bir işlemi belirli bir çekirdekte çalışmaya zorlama
Görev setini kullanarak, belirli bir CPU çekirdeğine çalışan bir işlem atayabilirsiniz. Bunu yapmak için aşağıdaki formatı kullanmalısınız:
tasket -p COREMASK PID görev seti -cp CORE-LIST PID
Örneğin, 0 ve 4 numaralı çekirdeklere bir işlem atamak için şunu çalıştırırsınız:
tasket -p 0x11 9030
Sonuç ne döndürür:
pid 9030'un mevcut afinite maskesi: ff pid 9030'un yeni afinite maskesi: 11
Aynı şekilde, şunları çalıştırabilirsiniz:
tasket -cp 0,4 9030
"-C" seçeneğiyle, virgülle ayrılmış bir sayısal çekirdek kimlikleri listesi belirtebilir veya hatta aralıklar ekleyebilirsiniz (örneğin, 0,2,5,6-10).
Belirli bir kernel kullanarak bir program başlatın
tasket ayrıca bir dizi belirli çekirdeği kullanarak yeni bir program başlatmaya izin verir. Bunu yapmak için aşağıdaki formatta kullanılmalıdır:
UYGULANABİLİR COREMASK görev seti
Örneğin, VLC programını CPU çekirdek kimliği 0'da başlatmak için aşağıdaki komutu kullanın:
tasket -c 0 vlc
Bir çekirdeği yalnızca belirli bir programa ayırın
Görev kümesi bir programın belirli bir çekirdeğe atanmasına izin verse de, bu onu kullanan başka programların veya işlemlerin olmadığı anlamına gelmez. Bunu önlemek ve çekirdeğin tamamını belirli bir programa ayırmak için, başlatma sırasında bir çekirdeği ayırmanıza izin veren "isolcpus" çekirdek parametresini kullanmalısınız.
Bunu yapmak için, GRUB'daki çekirdek satırına "isolcpus =" parametresini eklemeniz gerekir. Örneğin, 0 ve 1 kimlik çekirdeklerini ayırmak için "isolcpus = 0,1" ekleyin.
Bu yapıldıktan sonra, Linux zamanlayıcı, özel olarak görev kümesiyle atanmadıkça, ayrılmış çekirdeğe herhangi bir normal işlem atamaz.
kaynak: xmodule & tasket man sayfaları.
İyi yazı :).
İyi gönderi ama trolleme niyeti olmadan ...
Bir programı belirli bir çekirdeğe atamanın ne faydası var ???
Demek istediğim; 12 çekirdekli bir bilgisayarınız varsa, mantıklı olan, belirli bir programın bu 12 çekirdeği kullanarak çalıştırılması ve onu sınırlamamasıdır, çünkü bu şekilde mümkün olan en yüksek performansı elde ederiz.
Gördüğüm şey, belirli bir çekirdeğe herhangi bir işlem atamamamıza izin veren ve özel kullanımını belirli bir programa bırakmamıza izin veren seçenektir.
Planlayıcının tüm çekirdekleri kullanmasına izin vererek, bahsettiğiniz şey mantıklı geliyor, kaynaklar daha iyi dengeleniyor, ancak bazen belirli bir göreve sahip bir sanal makineyi çalıştırmak gibi özel bir çekirdek gereklidir, bu makinenin performansı önemli ölçüde artar. atanan çekirdekte çalışan daha fazla işlem.
atte
jvk85321
Kesin! Teşekkürler jvk! 🙂
Ancak sanal makineyi oluştururken, tahsis edilen CPU miktarını seçmenizi ister ... eğer sonunda işletim sistemi bunu atlar ve tüm CPU'larda çalıştırırsa bu değeri seçmenin ne faydası var ... Bunun için örnek en iyisi değil ...
Flash'ın Windows 8.1 x64, AMD ve Firefox'ta çalışması için Flash'ın sadece bir CPU üzerinde çalışmasının seçilmesi önerildi, ancak benim için çalışmadı. Ayrıca, onu farklı DE'nin veya en azından KDE'nin görev yöneticilerine eklerseniz (zaten orada değilse) uygun olacaktır.
ah, yorumun sonunu anlamadım ... Ama bunun için sanal makineyi çalıştıran CPU'daki tüm işlemlerin yasaklanması gerekiyordu. Veya onları diğer CPU'lara atayın. İlginç ve çok güzel bir yorum.
Dahi süper bilgisayarlar yaratmak için kullanılır
Anlaşıldı.
Açıklama için teşekkürler.
Çekirdeği belirli bir program için ayırırken, yürütme evrelerine ne olur? Bunu HT'li bir çekirdek ile yapmanız durumunda, program için 2 yürütme evresi ayırır.
Bu komut birkaç çekirdekli bilgisayarlarda pek kullanışlı görünmeyebilir, ancak Çift Çekirdekli olanlarımız için oldukça pratiktir. Örneğin, açtığımda tüm işlemci çekirdeklerini kullanan bir oyunum var ve CPU'ya ihtiyaç duyan başka programlar da varsa (büyük dosyalarda grep ile bazı aramalar gibi) sistem yavaşlıyor. Çözüm, oyunu çekirdeklerden yalnızca birini kullanacak şekilde sınırlamak kadar basit.
Ayrıca, bunu gerçekten görev yöneticilerine (şimdiye kadar Gentoo'da denediklerim, sanırım hiçbirinde sahip olmadıklarım) gerçekten entegre etmeleri gerektiğine katılıyorum, özellikle Windows'ta XP'den beri var olan bir şey olduğunda (bir işleme sağ tıklayın> "Yakınlığı ayarla ..."), ancak bir süre önce görev setini biraz daha sezgisel bir şeye dönüştüren aşağıdaki komut dosyasını buldum (orijinal olarak yayınlandı burada ve hatta çekirdeklerin kullanımını yönetmenin gerekli olduğu bazı durumlar vardır):
#!/bin/bash
read -p 'Ingrese el ID del proceso en cuestión: ' ID
read -p 'Ingrese la lista de procesadores separados por comas: ' P
echo 'Su ID es '$ID' y los procesadores son '$P
sudo taskset -p -c $P $ID
read -p 'Listo, presione enter para finalizar' P
Bazı değişikliklerle, PID yerine sürecin adını gösterebilir (ya da her ikisini de kabul ettiğini ve bu parametrenin ne zaman biri ya da diğeri olduğuna karar verir).
yeni kullanıcılar için görev seti için grafik arayüz yok, bu güzel olurdu