Cara mendeteksi apakah isolcpus diaktifkan dan pada cpus mana, ketika misalnya Anda terhubung untuk pertama kali pada server. Kondisi:
tidak menelurkan proses apa pun untuk melihat di mana ia akan dimigrasi.
Kasus penggunaan adalah bahwa isolcpus=1-7
pada core 6 i7, tampaknya tidak mengaktifkan isolcpus saat boot, dan saya ingin tahu apakah itu mungkin dari /proc/
, /sys
atau internal kernel yang dapat dibaca di userspace, untuk memberikan status aktivasi yang jelas dari isolcpus dan cpu mana yang terkait. Atau bahkan membaca pengaturan aktif penjadwal yang pertama kali diperhatikan oleh isolcpus.
Pertimbangkan uptime sangat besar, yang dmesg
tidak lagi menampilkan log boot untuk mendeteksi kesalahan saat startup. Jawaban dasar seperti " lihat kernel cmd line " tidak akan diterima :)
pidstat -C isolcpus
. pidstat berasal darisysstat
paket.pidstat
danisolcpus
. Bisakah Anda menguraikan lebih banyak?isolcpus
itu, tetapipidstat
dapat memberi tahu Anda apa proses CPU sedang berjalan jika Anda melewati-C process_name
flag. Misalnyapidstat -C top
menghasilkan yang berikut ini.10:56:52 AM PID %usr %system %guest %CPU CPU Command 10:56:52 AM 3457 0.00 0.00 0.00 0.00 6 top
isolcpus
adalah parameter kernel yang memaksa penjadwal untuk tidak memigrasi proses apa pun dengan sendirinya jika mereka terisolasi. Contohnya pada server 8 cpu,isolcpus=1-7
di baris perintah kernel, akan memaksa semua proses spawned yang bercabang oleh init dan segala jenis perintah di shell untuk berjalan hanya pada CPU0. Untuk menjalankan tugas pada cpu yang terisolasi, Anda harus menjalankannya dengantaskset
contoh. Jadi sehubungan dengan apa yang saya tanyakan, sepertinya jawaban Anda di luar topik. Terima kasih sudah mencoba menjawab sayaJawaban:
Apa yang Anda cari harus ditemukan di dalam file virtual ini:
dan sebaliknya
Dari
drivers/base/cpu.c
kita melihat bahwa sumber yang ditampilkan adalah variabel kernelcpu_isolated_map
:dan
cpu_isolated_map
persis seperti yang diaturkernel/sched/core.c
saat boot:Tetapi seperti yang Anda amati, seseorang dapat memodifikasi afinitas proses, termasuk yang dihasilkan daemon
cron
,,systemd
dan sebagainya. Jika itu terjadi, proses baru akan muncul mewarisi topeng afinitas yang dimodifikasi, bukan yang ditetapkan olehisolcpus
.Jadi di atas akan memberi Anda
isolcpus
seperti yang Anda minta, tetapi itu mungkin masih tidak membantu.Andaikata Anda mengetahui bahwa
isolcpus
itu telah dikeluarkan, tetapi belum "diambil", perilaku yang tidak diinginkan ini dapat diturunkan dengan suatu proses menyadari bahwa ia terikat hanya padaCPU=0
, meyakini bahwa ia berada dalam mode monoprosesor secara tidak sengaja, dan membantu mencoba "mengatur berbagai hal benar "dengan mengatur ulang topeng afinitas. Jika itu masalahnya, Anda dapat mencoba dan mengisolasi CPUS 0-5 bukannya 1-6, dan melihat apakah ini berhasil.sumber
/sys/devices/system/cpu/possible
tampaknya bukan 'terbalik' tergantung pada bagaimana Anda mengartikan 'terbalik'. Misalnya jika.../cpu/isolated
kembali2,4
karena mereka telah diisolasi,.../cpu/possible
akan kembali0-191
./sys/devices/system/cpu/present
yang menunjukkan CPU mana yang ada, daripada/sys/devices/system/cpu/possible
yang menunjukkan CPU mana yang mungkin ada (tetapi mungkin saat ini tidak ada). Pada beberapa sistem mereka sama, tetapi bahkan pada desktop yang cukup mendasar saya periksa, mereka tidak.Salah satu cara termudah untuk mendeteksi jika
isolcpus
berkonsultasiproc
untuk melihat parameter mana yang diteruskan ke kernel saat runtime.Untuk itu, Anda akan menggunakan:
Seperti yang Anda lihat, dalam contoh khusus
isolcpus=2,3
ini dilewatkan sebagai argumen untuk kernel yang sedang berjalan.Anda juga dapat menggunakan
taskset
menunjuk ke PID 1. Karena PID 1 adalah PID standar untuk tugas pertama yang diluncurkan oleh kernel, kita dapat menganggapnya sebagai indikasi yang cukup baik bahwa itu akan mencerminkan apakah kita telahisolcpus
bekerja. Seperti dalam:Membandingkan dengan
lscpu
perintah di server yang sama:Seperti dapat dilihat,
lscpu
menunjukkan 4 CPU / core, sementarataskset
hanya menunjukkan 0,1, jadi ini menunjukkanisolcpus
bekerja di sini.Lihat di: Bagaimana memastikan ketersediaan CPU eksklusif untuk proses yang berjalan?
sumber
/proc/cmdline
mana yang merupakan salinan tepat dari isigrub.conf
file. Ini bukan yang saya tanyakan! Bagaimanapun, terima kasih!Anda dapat memeriksa Cpus_allowed dan Cpus_allowed_list untuk proses shell saat ini untuk melihat cpus apa yang dipesan
untuk mis
berarti bahwa cpu = 2 dicadangkan oleh
isolcpus
pada server 6 cpussumber
ssh
dan seseorang secara manual membatasi afinitas induksshd
ke CPU 1, Anda akan selalu melihat CPU 1, apakahisolcpus
telah "diambil" atau tidak. The$$
cabang memberikan proses mewarisi nilai-nilai, bukan yang sistem yang asli.