Bütün bu konu faydalı olmalı.
'İnit' işlemini cpu 1'de çalıştırmakla sınırlandırmanın bir yolunu arardım.
Genel durumda, son sözler "tüm CPU'larda çalışıyor ancak 1" olmalı. Sanırım birileri kullanabilir çekirdek parametreleri ; irqaffinity
, isolcpus
umut verici görünüyorsun.
DÜZENLE:
hakkında isolcpus
içinde çekirdek parametreleri dokümantasyonu :
Bu seçenek CPU'ları izole etmenin tercih edilen yoludur. Alternatif olarak - sistemdeki tüm görevlerin CPU maskesinin manuel olarak ayarlanması - sorunlara ve en düşük yük dengeleyici performansına neden olabilir.
Bazı testler yaptım. Sonuçlar:
Çekirdek parametresi isolcpus
sınırlandırmak için kullanabileceğiniz init
CPU'ları işler ve izole eder.
Bana bu çekirdek parametresi gibiydi irqaffinity
izole edilmiş CPU'ları etkilemedi. Muhtemelen bu parametreye ihtiyacınız yoktur.
İzole ettiğimde CPU0 tamamen boşta gitmedi. Bu sistem veya donanım, izolasyona rağmen onunla bir miktar hesaplama yapmak zorunda mı? - Bilmiyorum.
İzole ettiğimde CPU1 veya CPU7 öyleydi kadar sağlam bir kaya gibi boşta.
İzole etmek CPU1 eklemek isolcpus=1
senin içinde grub.cfg
, bunun gibi:
linux /vmlinuz-
(… Burada tüm geçerli parametreleriniz…) isolcpus=1
ORİJİNAL CEVAP DEVAM EDİYOR:
Alternatif olarak, sistem başladıktan sonra, çalışmakta olan tüm işlemlerin yakınlığını yeniden atayabilirsiniz, ancak bu daha az zarif görünüyor.
Daha az zarif görünüyor, ancak yeterince iyi çalışabileceğini kabul ediyorum (EDIT: yukarıda belirtildiği gibi sorunlara ve en düşük yük dengeleyici performansına neden olabilir). Debian'ımda çalışan hızlı ve kirli bir gömlek var:
sudo bash -c 'cd /proc ; for i in [1-9]* ; do taskset -a -p fffffffe $i ; done'
Bazı hatalar aldım pid s, yine de htop
Bir çekirdeğin bundan sonra neredeyse boşta olduğunu gösterir. Elbette komut dosyanızı daha sonra çalıştırmanız, bir şekilde dışlamanız veya yeniden atama yapmanız gerekir:
taskset -a -p 1 PID
İşlemci benzeşimi kalıtımsal olduğu için yeni işlemleri kapsayacak tek bir lineri tekrar etmeniz gerekmeyeceğini umuyorum.