Memberitahu kernel Linux * bukan * untuk menggunakan CPU tertentu

8

Saya mencoba menjalankan beberapa tolok ukur pada mesin multicore dan saya ingin memberi tahu kernel Linux untuk hanya menghindari inti tertentu kecuali secara tegas disuruh menggunakannya.

Idenya adalah bahwa saya dapat menyisihkan beberapa core (mesin memiliki 6 core fisik) untuk benchmark dan menggunakan cpu mask untuk memungkinkan hanya proses benchmark ke core yang diberikan.

Apakah ini layak?

Lajos Nagy
sumber
Apa tolok ukur aktual yang ingin Anda jalankan?
Basile Starynkevitch

Jawaban:

5

Anda dapat mengisolasi beberapa core cpu dari penjadwalan kernel menggunakan isolcpusparameter. Tambahkan parameter ini ke grub.conf Anda dan mulai ulang untuk menjalankannya.

VenkatC
sumber
2
Tautannya sudah mati. Mungkin sebaiknya memasukkan contoh secara langsung dalam jawabannya.
pchaigno
4

Anda menginginkan afinitas prosesor (atau afinitas CPU ).

Syscall yang relevan adalah sched_setaffinity (2) , tetapi Anda harus menggunakannya melalui pthread_set_affinity_np (3) jika Anda ingin kode tolok ukur Anda untuk itu.

Perintah terkait adalah tasket (1) dan Anda mungkin menggunakannya pada perintah yang ingin Anda tolak (atau di shell Anda).

Jika memungkinkan, berhati-hatilah agar mesin tidak dimuat banyak dengan tugas-tugas lain yang tidak terkait dengan tolok ukur.

Atau, gunakan beberapa hypervisor seperti Xen , dan boot Linux Anda sebagai OS tamu untuk hypervisor itu. Kemudian konfigurasikan xenuntuk menggunakan hanya beberapa set core CPU yang terbatas (saya tidak tahu detail pastinya, Anda perlu mencari tahu). Pada Debian (dan terkait) distribusi, Anda mungkin menginstal paket seperti xen-linux-system-amd64, xen-hypervisor-amd64, xen-utilsdll (aku menggunakan Debian / Sid xen-hypervisor-4.5-amd64, xen-linux-system-4.0.0-1-amd64, xen-utils-4.5 dll ...).

Mungkin ada beberapa cara untuk mengkonfigurasi (mungkin pada saat kompilasi kernel, atau dengan memberikan argumen spesifik ke kernel melalui Grub loader) kernel Linux Anda untuk membatasi jumlah core yang dapat digunakan.

Tentu saja, lebih baik, ketika benchmarking beberapa program yang-misalnya di desktop Linux PC-, untuk berhati-hati untuk menghindari banyak proses di luar berjalan (gunakan ps auxw, pstree -p, topuntuk menemukan ini). Paling tidak, tutup dan tutup sebagian besar aplikasi interaktif (browser seperti firefox, email, editor, IDE seperti Eclipse) dan simpan hanya sejumlah kecil terminal sebagai tolok ukur. Anda bahkan dapat melakukan benchmark dalam mode batch (menggunakan batchatau atmenjalankan benchmark) saat Anda bahkan belum login (jadi tidak memiliki sesi GUI à la Gnome atau KDE atau Xfce , dll ... berjalan).

Basile Starynkevitch
sumber
Mengatur afinitas tugas ke benchmark tidak cukup. Anda juga harus menjauhkan tugas-tugas lain. Yang saran hypervisor Anda lakukan, tetapi dengan cara yang sangat berat.
Gilles 'SO- berhenti bersikap jahat'
@Gilles: mengapa menjauhkan tugas lain yang diperlukan untuk tujuan pembandingan? Dalam prakteknya, ketika melakukan benchmarking, PC seringkali cukup menganggur ... Untuk server yang mahal, semuanya berbeda!
Basile Starynkevitch
Misalnya karena Anda melakukan benchmark pada PC desktop Anda yang juga menghabiskan sumber daya untuk Firefox, Eclipse, dan tugas-tugas lain yang sangat menuntut.
Gilles 'SANGAT berhenti menjadi jahat'
Pada PC desktop Anda sendiri, Anda dapat dengan mudah menghentikan sebagian besar tugas yang memakan waktu (mis. Tutup & keluar dari firefox & gerhana) saat melakukan benchmarking. Anda bahkan dapat menjalankan tolok ukur dalam mode batch (menggunakan atatau batch) saat Anda tidak masuk (jadi jangan jalankan sesi yang memakan waktu).
Basile Starynkevitch