Linux'ta, bir işlem için CPU benzeşimini ayarlamak için sistem çağrısı yapılır sched_setaffinity
. Sonra komut satırında bunu yapmak için bir taskset
araç var .
Bu tek bir programın tek bir CPU'da çalışmasını sağlamak için,
taskset -c 1 ./myprogram
(herhangi bir CPU numarasını -c
anahtara bağımsız değişken olarak ayarlayın .)
Diğer işlemleriniz ölçmek istediğiniz işlemle karşılaştırıldığında çok fazla çalışmadığı veya diğer CPU'lara programlandığı sürece, bu tek işlemcili bir sisteme yeterince yakın olmalıdır. Bir CPU'yu yalnızca bu tek işleme ayırmak ve diğer işlemlerin bu CPU'da çalışmasını önlemek istiyorsanız, bunların benzeşimlerini de ayarlamanız gerekir.
Yani, ben yok düzgün nasıl yapılacağını biliyorum. init
Sistemdeki tüm işlemlere devralındığından emin olmak için önyükleme işleminde işlemci benzeşimini çok erken ayarlamanız gerekir . Geçici bir çözüm olarak, taskset -c -p 0 $PID
diğer işlemlerin tümünü yalnızca CPU # 0'da çalışmaya zorlamak için kullanabilirsiniz.
systemd da vardırCPUAffinity=
birim dosyalarında yakınlık kontrol etmek ve orada birkaç ait sorular unix.SE burada varsayılan yakınlık ayarlama konusunda, ama iyi bir çözüm ile herhangi bulamadık.
@Kamil Maciorowski'nin superuser.com'daki başka bir soruya yorum yapması ve cevap vermesine rağmen isolcpus=1
, çekirdek komut satırında ayar yapmak "bu CPU'yu genel programlama algoritmalarından ayırmalıdır", ki bu da isteyebileceğiniz bir şeydir.