Bir CPU'nun işletim sistemi tarafından kullanılmayacağı bir çekirdek seçenek yapılandırmasına sahipsiniz isolcpus
.
isolcpus - İşlemcileri çekirdek zamanlayıcıdan ayırın.
Özet: isolcpus = cpu_number [, cpu_number, ...]
Tanım cpu_number değerleri tarafından tanımlanan belirli CPU'ları genel çekirdek SMP dengeleme ve zamanlayıcı algoritmalarından kaldırın. Bir işlemi "yalıtılmış" bir işlemciye taşımanın veya kapatmanın tek yolu CPU benzeşimi sistemleridir. cpu_number 0 ile başlar, bu yüzden maksimum değer sistemdeki CPU sayısından 1 daha azdır.
Nasıl kurulacağını açıklamak üzere olduğum bu yapılandırma, test etmekten çok daha fazla kullanıma sahip olabilir.
Örneğin Meru, ağ trafiğinin işletim sisteminin iç işleyişine, yani G / Ç işlemlerine karışmasını engellemek için Linux tabanlı AP denetleyicilerinde bu teknolojiyi kullanır.
Aynı zamanda çok yoğun bir web arayüzünde de aynı sebeplerle kullanıyorum: Yaşam deneyiminden, o sunucunun zevkine göre kontrolümü çok düzenli kaybettiğimi öğrendim; Ön uç daemon'unu kendi özel işlemcileriyle ayırana kadar zorla yeniden başlatmak zorunda kaldım.
8 işlemciniz olduğu için komutun çıktısını kontrol edebilirsiniz:
$ grep -c proc /proc/cpuinfo
8
veya
$ lscpu | grep '^CPU.s'
CPU(s): 8
/etc/default/grub
İsteğe bağlı olarak Debian / Ubuntu dosyasına ekleyin GRUB_CMDLINE_LINUX
:
GRUB_CMDLINE_LINUX="isolcpus=7"
(7'dir, çünkü 0'da başlar ve 8 çekirdeğiniz vardır)
O zaman koş,
sudo update-grub
Bu, çekirdeğe çekirdeklerinden birini kullanmamasını söylüyor.
Sistemi yeniden başlatın.
O zaman işlemine başla.
Başlattıktan hemen sonra, 8. CPU için değişiklik yapabilirsiniz (7, çünkü 0'dır) ve bu CPU'yu kullanan tek kişi siz olduğunuzdan emin olabilirsiniz.
Bunun için şu komutu kullanın:
taskset -cp 7 PID_number
tasket - bir işlemcinin CPU benzeşimini al veya ayarla
ÖZET
taskset [options] [mask | list ] [pid | command [arg]...]
AÇIKLAMA
Taslaklar, PID'leri verilen çalışan bir işlemin CPU afinitesini ayarlamak veya almak veya verilen bir CPU afinitesi ile yeni bir COMMAND başlatmak için kullanılır. CPU benzeşimi, bir işlemi sistemdeki belirli bir CPU kümesine "bağlayan" bir zamanlayıcı özelliğidir. Linux zamanlayıcısı, verilen CPU benzeşimini onurlandıracak ve işlem diğer CPU'larda çalışmaz. Linux zamanlayıcısının ayrıca doğal CPU benzeşimini de desteklediğini unutmayın: Zamanlayıcı, performans açısından aynı işlemleri mümkün olduğu sürece aynı CPU üzerinde tutmaya çalışır. Bu nedenle, belirli bir CPU benzeşimini zorlamak sadece belirli uygulamalarda yararlıdır.
Bununla ilgili daha fazla bilgi için, bakınız: isolcpus, numactl ve tasket
Ayrıca ps -eF
PSR sütununda kullanılan işlemciyi görmelisiniz.
CPU 2 ve 3 ile izole edilmiş bir sunucum var ve gerçekten de, kullanıcı alanındaki amaçlanan ps -e
tek işlem ile görülebiliyor .pound
# ps -eo psr,command | tr -s " " | grep "^ [2|3]"
2 [cpuhp/2]
2 [watchdog/2]
2 [migration/2]
2 [ksoftirqd/2]
2 [kworker/2:0]
2 [kworker/2:0H]
3 [cpuhp/3]
3 [watchdog/3]
3 [migration/3]
3 [ksoftirqd/3]
3 [kworker/3:0]
3 [kworker/3:0H]
2 [kworker/2:1]
3 [kworker/3:1]
3 [kworker/3:1H]
3 /usr/sbin/pound
İzole olmayan CPU'larla karşılaştırırsanız, çok daha fazla şey çalıştırıyorlar (aşağıdaki pencerede slaytlar ):
# ps -eo psr,command | tr -s " " | grep "^ [0|1]"
0 init [2]
0 [kthreadd]
0 [ksoftirqd/0]
0 [kworker/0:0H]
0 [rcu_sched]
0 [rcu_bh]
0 [migration/0]
0 [lru-add-drain]
0 [watchdog/0]
0 [cpuhp/0]
1 [cpuhp/1]
1 [watchdog/1]
1 [migration/1]
1 [ksoftirqd/1]
1 [kworker/1:0]
1 [kworker/1:0H]
1 [kdevtmpfs]
0 [netns]
0 [khungtaskd]
0 [oom_reaper]
1 [writeback]
0 [kcompactd0]
0 [ksmd]
1 [khugepaged]
0 [crypto]
1 [kintegrityd]
0 [bioset]
1 [kblockd]
1 [devfreq_wq]
0 [watchdogd]
0 [kswapd0]
0 [vmstat]
1 [kthrotld]
0 [kworker/0:1]
0 [deferwq]
0 [scsi_eh_0]
0 [scsi_tmf_0]
1 [vmw_pvscsi_wq_0]
0 [bioset]
1 [jbd2/sda1-8]
1 [ext4-rsv-conver]
0 [kworker/0:1H]
1 [kworker/1:1H]
1 [bioset]
0 [bioset]
1 [bioset]
1 [bioset]
1 [bioset]
1 [bioset]
1 [bioset]
1 [bioset]
0 [jbd2/sda3-8]
1 [ext4-rsv-conver]
1 /usr/sbin/rsyslogd
0 /usr/sbin/irqbalance --pid=/var/run/irqbalance.pid
1 /usr/sbin/cron
0 /usr/sbin/sshd
1 /usr/sbin/snmpd -Lf /dev/null -u snmp -g snmp -I -smux -p /var/run/snmpd.pid
1 /sbin/getty 38400 tty1
1 /lib/systemd/systemd-udevd --daemon
0 /usr/sbin/xinetd -pidfile /run/xinetd.pid -stayalive
1 [kworker/1:2]
0 [kworker/u128:1]
0 [kworker/0:2]
0 [bioset]
1 [xfsalloc]
1 [xfs_mru_cache]
1 [jfsIO]
1 [jfsCommit]
0 [jfsCommit]
0 [jfsCommit]
0 [jfsCommit]
0 [jfsSync]
1 [bioset]
0 /usr/bin/monit -c /etc/monit/monitrc
1 /usr/sbin/pound
0 sshd: rui [priv]
0 sshd: rui@pts/0,pts/1
1 -bash
1 -bash
1 -bash
1 [kworker/u128:0]
1 -bash
0 sudo su
1 su
1 bash
0 bash
0 logger -t cmdline root[/home/rui]
1 ps -eo psr,command
0 tr -s
0 grep ^ [0|1]
0 /usr/bin/vmtoolsd
nice -19 process