Anda memiliki konfigurasi opsi kernel di mana CPU tidak akan digunakan oleh OS, itu disebut isolcpus
.
isolcpus - Mengisolasi CPU dari penjadwal kernel.
Synopsis isolcpus = cpu_number [, cpu_number, ...]
Deskripsi Lepaskan CPU yang ditentukan, seperti yang didefinisikan oleh nilai cpu_number, dari algroithms penjadwalan dan penjadwalan SMP kernel. Satu-satunya cara untuk memindahkan proses ke atau dari CPU "terisolasi" adalah melalui syscalls afinitas CPU. cpu_number dimulai pada 0, sehingga nilai maksimum adalah 1 kurang dari jumlah CPU pada sistem.
Konfigurasi ini saya akan menjelaskan cara men-setup, dapat memiliki lebih banyak kegunaan daripada untuk pengujian.
Meru misalnya, menggunakan teknologi ini di pengontrol AP berbasis Linux mereka, untuk menjaga lalu lintas jaringan dari mengganggu kerja bagian dalam OS, yaitu operasi I / O.
Saya juga menggunakannya di web frontend yang sangat sibuk, untuk alasan yang sama: Saya telah mengetahui dari pengalaman hidup bahwa saya kehilangan kontrol terlalu teratur untuk selera server itu; harus me-reboot dengan paksa sampai saya memisahkan daemon ujung depan pada CPU khusus itu sendiri.
Karena Anda memiliki 8 CPU, Anda dapat memeriksa dengan output dari perintah:
$ grep -c proc /proc/cpuinfo
8
atau
$ lscpu | grep '^CPU.s'
CPU(s): 8
Tambahkan di Debian / Ubuntu di file /etc/default/grub
ke opsi GRUB_CMDLINE_LINUX
:
GRUB_CMDLINE_LINUX="isolcpus=7"
(ini 7, karena dimulai pada 0, dan Anda memiliki 8 core)
Lalu lari,
sudo update-grub
Ini memberitahu kernel untuk tidak menggunakan salah satu core Anda.
Mulai ulang sistem.
Kemudian mulailah proses Anda.
Segera setelah memulainya, Anda dapat mengubah CPU ke-8 (7 karena 0 adalah yang pertama), dan pastikan Anda satu-satunya yang menggunakan CPU itu.
Untuk itu, gunakan perintah:
taskset -cp 7 PID_number
tasket - mengambil atau mengatur afinitas CPU suatu proses
RINGKASAN
taskset [options] [mask | list ] [pid | command [arg]...]
DESKRIPSI
tasket digunakan untuk mengatur atau mengambil afinitas CPU dari proses yang berjalan yang diberikan PID-nya atau untuk meluncurkan PERINTAH baru dengan afinitas CPU yang diberikan. Afinitas CPU adalah properti penjadwal yang "mengikat" suatu proses ke serangkaian CPU pada sistem. Penjadwal Linux akan menghormati afinitas CPU yang diberikan dan proses tidak akan berjalan pada CPU lain. Perhatikan bahwa penjadwal Linux juga mendukung afinitas CPU alami: penjadwal mencoba untuk menjaga proses pada CPU yang sama selama praktis untuk alasan kinerja. Oleh karena itu, memaksa afinitas CPU tertentu hanya berguna dalam aplikasi tertentu.
Untuk membaca lebih lanjut tentang itu, lihat: isolcpus, numactl dan tasket
Juga menggunakan ps -eF
Anda harus melihat di kolom PSR prosesor yang digunakan.
Saya memiliki server dengan CPU 2 dan 3 terisolasi, dan memang, itu dapat dilihat dengan ps -e
satu-satunya proses di userland sebagaimana dimaksud, adalah 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
Jika Anda membandingkannya dengan CPU yang tidak terisolasi, mereka menjalankan lebih banyak hal (jendela di bawah slide ):
# 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