Görev kümesini kullanarak bir CPU çekirdeğine bir program nasıl atanır

Ç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ı.


Yorumunuzu bırakın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar ile işaretlenmiştir *

*

*

  1. Verilerden sorumlu: Miguel Ángel Gatón
  2. Verilerin amacı: Kontrol SPAM, yorum yönetimi.
  3. Meşruiyet: Onayınız
  4. Verilerin iletilmesi: Veriler, yasal zorunluluk dışında üçüncü kişilere iletilmeyecektir.
  5. Veri depolama: Occentus Networks (AB) tarafından barındırılan veritabanı
  6. Haklar: Bilgilerinizi istediğiniz zaman sınırlayabilir, kurtarabilir ve silebilirsiniz.

  1.   Petercheco dijo

    İyi yazı :).

  2.   Luis dijo

    İ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.

    1.    jvk85321 dijo

      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

      1.    hadi linux kullanalım dijo

        Kesin! Teşekkürler jvk! 🙂

      2.    lf dijo

        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.

      3.    lf dijo

        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.

    2.    Fernando dijo

      Dahi süper bilgisayarlar yaratmak için kullanılır

  3.   Luis dijo

    Anlaşıldı.

    Açıklama için teşekkürler.

  4.   Teck dijo

    Ç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.

  5.   swicher dijo

    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).

  6.   Jorss dijo

    yeni kullanıcılar için görev seti için grafik arayüz yok, bu güzel olurdu