Bagaimana cara menonaktifkan subs subsistem di kernel Linux?

15

Saya menjalankan beberapa tolok ukur. Runner benchmark saya memantau buffer dmesg di antara eksperimen, mencari apa saja yang dapat memengaruhi kinerja. Hari ini ia melemparkan ini:

[2015-08-17 10:20:14 PERINGATAN] dmesg tampaknya telah berubah! Diff berikut:
--- 2015-08-17 09:55:00
+++ 2015-08-17 10:20:14
@@ -825,3 +825,4 @@
 [3.802206] [drm] Mengaktifkan status RC6: RC6 on, RC6p off, RC6pp off
 [7.900533] r8169 0000: 06: 00.0 eth0: ditautkan
 [7.900541] IPv6: ADDRCONF (NETDEV_CHANGE): eth0: tautan menjadi siap
+ [236832.221937] interupsi terlalu lama (2504> 2500), menurunkan kernel.perf_event_max_sample_rate menjadi 50.000

Setelah beberapa pencarian, saya sekarang tahu ini berkaitan dengan subsistem profil di kernel linux yang disebut "perf". Saya rasa kami tidak memerlukan ini, jadi saya ingin menonaktifkannya sama sekali.

Mencari lagi, saya menemukan bahwa sysctl perf_cpu_time_max_percentdapat membantu. Di sini seseorang menyarankan untuk menonaktifkan dengan menetapkannya ke 0. Membacanya lagi di sini :

perf_cpu_time_max_percent:

Petunjuk ke kernel berapa banyak waktu CPU yang harus diizinkan untuk digunakan untuk menangani peristiwa pengambilan sampel perf. Jika subsistem informasi diinformasikan bahwa sampelnya melebihi batas ini, ia akan menurunkan frekuensi samplingnya untuk mencoba mengurangi penggunaan CPU-nya.

Beberapa contoh perf terjadi di NMI. Jika sampel-sampel ini secara tak terduga membutuhkan waktu terlalu lama untuk dieksekusi, NMI dapat menjadi bertumpuk di samping satu sama lain sehingga tidak ada hal lain yang diizinkan untuk dieksekusi.

0: nonaktifkan mekanismenya. Jangan memantau atau memperbaiki laju pengambilan sampel perf, tidak peduli berapa lama waktu yang diperlukan CPU.

1-100: upaya untuk membatasi laju sampel perf ke persentase CPU ini. Catatan: kernel menghitung panjang "yang diharapkan" dari setiap peristiwa sampel. 100 di sini berarti 100% dari panjang yang diharapkan. Bahkan jika ini diatur ke 100, Anda mungkin masih melihat pelambatan sampel jika panjang ini terlampaui. Set ke 0 jika Anda benar-benar tidak peduli berapa banyak CPU yang dikonsumsi.

Bagi saya ini seperti 0 berarti laju sampel profiling tidak lagi diperiksa, tetapi subsistem freq tetap berjalan (?).

Adakah yang bisa menjelaskan bagaimana cara menonaktifkan profil kernel dengan freq?

EDIT: Seseorang menyarankan saya mencoba membangun kernel tanpa perf, tapi saya rasa ini tidak mungkin. Opsi ini tampaknya tidak dapat dialihkan:

menuconfig

EDIT2: Setelah lebih banyak membaca, saya memutuskan saya mungkin dapat mengatur kernel.perf_event_max_sample_rateke nol. Yaitu tidak ada sampel per detik. Namun, Anda tidak dapat melakukan ini ( sumber ):

komit 02f98e3e36da106338b7c732fed516420fb20e2a
Penulis: Knut Petersen 
Tanggal: Rab 25 Sep 14:29:37 2013 +0200

perf: Menerapkan 1 sebagai batas bawah untuk perf_event_max_sample_rate

EDIT 3: FWIW, perf_cpu_time_max_percentdiatur ke 25, yang berarti kernel menghabiskan lebih dari 25% dari register perangkat keras pengambilan sampel waktunya. Ini tidak dapat diterima untuk mesin pembandingan.

Saya sekarang yakin bahwa pengaturan perf_cpu_time_max_percentke nol hanya akan memperburuk situasi, karena kernel akan terus menggunakan lebih dari 25% dari waktunya membaca register perangkat keras. Kesalahan menyala untuk menyesuaikan laju sampel, sehingga berusaha memastikan bahwa kernel memenuhi kuota penggunaan <25% dari waktunya dalam perf. 25% IMHO masih terlalu tinggi.

Jika saya benar-benar tidak dapat menonaktifkan perf, mungkin kompromi terbaik adalah mengatur perf_event_max_sample_rateke 1.

EDIT4: Seorang teman menyarankan agar saya salah mengartikan makna perf_cpu_time_max_percent, jadi pernyataan di atas mungkin salah. Nilai 25 menunjukkan bahwa kernel menggunakan lebih dari 25% dari beberapa panjang sewenang-wenang yang telah dicadangkan untuk melayani gangguan inter.

EDIT5:

Seperti yang ditunjukkan dalam komentar, opsi -*-menentang perf menunjukkan bahwa fitur dipaksa oleh fitur diaktifkan lainnya. Jika saya melihat ke dalam help, ia mengatakan fitur mana yang adalah:

Tolong

Saya tidak berpikir saya bisa menang di sini. Formula Boolean selected bymengatakan

Jika Anda menargetkan X86, atau ...

Saya baru saja memeriksa bahwa penargetan X86_64 memang memungkinkan CONFIG_X86. Jadi sepertinya begitu Anda menargetkan X86 atau X86_64, Anda mendapatkan perf.

Jadi saya ingin sedikit mengubah pertanyaan saya menjadi:

Pengaturan perf mana yang dapat saya gunakan untuk meminimalkan waktu yang dihabiskan oleh kernel dalam rutinitas perf?

Ingatlah bahwa tujuan keseluruhan adalah untuk mengendalikan sumber variasi acak untuk pembandingan. Jika saya tidak dapat menonaktifkan perf, bagaimana saya bisa meminimalkan dampaknya pada tolok ukur?

Edd Barrett
sumber
1
Anda harus dapat menonaktifkan perf pada layar sebelumnya.
Michael Hampton
1
Apakah maksud Anda "Dukungan profiling"? Jika saya menonaktifkan ini, saya masih tidak bisa menghapus centang opsi yang digambarkan di atas. Juga jika saya memeriksa .config, saya punya CONFIG_HAVE_PERF_EVENTS=ydan CONFIG_PERF_EVENTS=y. Saya tidak berpikir ini cacat perf.
Edd Barrett
2
Pesannya bersifat informasi. Kernel secara otomatis menentukan laju sampel yang dapat digunakan tanpa memengaruhi kinerja sistem dan mencatatnya bahkan ketika perf tidak aktif atau bahkan diinstal. Ketika beban sistem lebih tinggi atau ada penskalaan frekuensi Anda akan sering mendapatkan pesan-pesan itu.
Brian
1
Simbol -*-berarti bahwa beberapa subsistem tergantung pada modul perf. Helpmemperlihatkan pohon dependensi yang harus Anda nonaktifkan untuk mengubah opsi menjadi [*]atau [M].
Rufo El Magufo
4
Saya telah merevisi pertanyaan untuk memperhitungkan ini. Singkatnya, perf tampaknya wajib pada X86_64.
Edd Barrett

Jawaban:

2

Nonaktifkan opsi kernel [HAVE_PERF_EVENTS] dan kompilasi ulang kernel Linux.

John Greene
sumber