Linux çekirdeğinde perf alt sistemi nasıl devre dışı bırakılır?


15

Bazı ölçütler kullanıyorum. Kıyaslama koşucum, deneyler arasındaki dmesg arabelleğini izleyerek performansı etkileyebilecek herhangi bir şey arar. Bugün bunu attı:

[2015-08-17 10:20:14 UYARI] dmesg değişmiş gibi görünüyor! Diff şöyle:
--- 2015-08-17 09:55:00
+++ 2015-08-17 10:20:14
@@ -825,3 +825,4 @@
 [3.802206] [drm] RC6 durumlarını etkinleştirme: RC6 açık, RC6p kapalı, RC6pp kapalı
 [7.900533] r8169 0000: 06: 00.0 eth0: bağlantı kurma
 [7.900541] IPv6: ADDRCONF (NETDEV_CHANGE): eth0: bağlantı hazır hale geliyor
+ [236832.221937] mükemmel kesinti çok uzun sürdü (2504> 2500), çekirdeği düşürdü. Perf_event_max_sample_rate 50000'e düşürüldü

Biraz arama yaptıktan sonra, bunun linux çekirdeğinde "perf" adı verilen bir profil oluşturma alt sistemi ile ilgili olduğunu biliyorum. Buna ihtiyacımız olduğunu düşünmüyorum, bu yüzden tamamen devre dışı bırakmak istiyorum.

Tekrar arama yaparak, sysctl'in perf_cpu_time_max_percentyardımcı olabileceğini düşünüyorum. İşte birileri biraz daha bu işe 0. Reading olarak ayarlayarak devre dışı bırakmak için önermektedir burada :

perf_cpu_time_max_percent:

Çekirdeğe, mükemmel örnekleme olaylarını işlemek için ne kadar CPU süresine izin verilmesi gerektiğini gösterir. Perf alt sistemi, örneklerinin bu sınırı aştığı konusunda bilgilendirilirse, CPU kullanımını azaltmaya çalışmak için örnekleme frekansını düşürür.

NMI'larda bazı mükemmel örneklemeler olur. Bu örneklerin beklenmedik bir şekilde yürütülmesi çok uzun sürerse, NMI'ler birbirlerinin yanında istiflenerek başka hiçbir şeyin yürütülmesine izin verilmeyebilir.

0: mekanizmayı devre dışı bırakır. İşlemcinin süresi ne olursa olsun perf'in örnekleme oranını izlemeyin veya düzeltmeyin.

1-100: perf'in örnek hızını bu CPU yüzdesine düşürmeye çalışın. Not: çekirdek, her bir örnek olayın "beklenen" uzunluğunu hesaplar. Burada 100, beklenen uzunluğun% 100'ü anlamına gelir. Bu 100 olarak ayarlanmış olsa bile, bu uzunluk aşılırsa yine de örnek azaltmayı görebilirsiniz. Ne kadar CPU tüketildiğini gerçekten umursamıyorsanız 0 olarak ayarlayın.

Bu bana 0 gibi geliyor, profil oluşturma örnekleme hızı artık kontrol edilmiyor, ancak frekans alt sistemi çalışıyor (?).

Herkes frek ile çekirdek profili tamamen devre dışı bırakma ışık tutabilir?

EDIT: Birisi mükemmel bir çekirdek oluşturmayı denemek önerdi, ama bunun bile mümkün olduğunu düşünmüyorum. Seçenek değiştirilebilir görünmüyor:

menuconfig

EDIT2: Daha fazla okumadan sonra kernel.perf_event_max_sample_ratesıfıra ayarlayabileceğime karar verdim . Yani saniyede numune yok. Ancak, bunu da yapamazsınız ( kaynak ):

taahhüt 02f98e3e36da106338b7c732fed516420fb20e2a
Eser Sahibi: Knut Petersen 
Tarih: Çar 25 Eyl 14:29:37 2013 +0200

perf: perf_event_max_sample_rate için alt sınır olarak 1'i zorla

EDIT 3: FWIW, perf_cpu_time_max_percent25 olarak ayarlanmıştır, bu da çekirdeğin zaman örnekleme donanım kayıtlarının% 25'inden fazlasını harcadığı anlamına gelir. Bir kıyaslama makinesi için bu kabul edilemez.

Artık perf_cpu_time_max_percentsıfıra ayarlamanın durumu daha da kötüleştireceğinden eminim çünkü çekirdek, donanım kayıtlarını okuma zamanının% 25'inden fazlasını kullanmaya devam edecektir . Hata, örnek hızını ayarlamak için tetiklenir, böylece çekirdeğin zamanının <% 25'ini kullanma kotasına tam olarak uyduğundan emin olun. % 25'i hala çok yüksek IMHO.

Perf'i gerçekten devre dışı bırakamazsam, muhtemelen en iyi uzlaşma perf_event_max_sample_rate1'e ayarlamak olacaktır.

EDIT4: Bir arkadaş anlamını yanlış yorumlamış olabilir önerdi perf_cpu_time_max_percent, bu nedenle yukarıdaki ifadeler yanlış olabilir. 25 değeri, çekirdeğin mükemmel kesintilere hizmet etmek için ayırdığı rasgele bir uzunluğun% 25'inden fazlasını kullandığını gösterir.

EDIT5:

Yorumlarda belirtildiği gibi -*-, perf seçeneğine karşı, özelliğin başka bir etkin özellik tarafından zorlandığını gösterir. Eğer bakarsam help, bunların hangi özellikler olduğunu söylüyor:

Yardım

Burada kazanabileceğimi sanmıyorum. Boole formülü selected bydiyor ki:

X86'yı hedefliyorsanız veya ...

Az önce X86_64 hedeflemenin gerçekten mümkün olduğunu kontrol ettim CONFIG_X86. Görünüşe göre X86 veya X86_64'ü hedeflediğinizde mükemmel hale geliyorsunuz.

Bu yüzden sorumu hafifçe değiştirmek istiyorum:

Mükemmel rutinlerde çekirdeğin harcadığı zamanı en aza indirmek için hangi mükemmel ayarları kullanabilirim?

Genel amacın kıyaslama için rastgele varyasyon kaynaklarını kontrol etmek olduğunu unutmayın. Perf'i devre dışı bırakamazsam, karşılaştırmalar üzerindeki etkisini nasıl en aza indirebilirim?


1
Önceki ekranda perf'i devre dışı bırakabilmelisiniz.
Michael Hampton

1
Şunu mu demek istediniz: "Profiling support"? Bunu devre dışı bırakırsam, yukarıda gösterilen seçeneğin işaretini hala kaldıramıyorum. Ayrıca .config incelerseniz, CONFIG_HAVE_PERF_EVENTS=yve CONFIG_PERF_EVENTS=y. Bunun engelli olduğunu düşünmüyorum.
Edd Barrett

2
Mesaj bilgilendirme amaçlıdır. Çekirdek, sistem performansını etkilemeden kullanılabilecek bir örnekleme hızını otomatik olarak belirler ve perf etkin olmasa veya hatta kurulmasa bile günlüğe kaydeder. Sistem yükü daha yüksek olduğunda veya frekans ölçeklendirme olduğunda bu mesajları sıklıkla alırsınız.
Brian

1
Sembol -*-, bazı alt sistemlerin perf modülüne bağlı olduğu anlamına gelir. Helpseçeneği [*]veya olarak değiştirmek için devre dışı bırakmanız gereken bağımlılık ağacını gösterir [M].
Rufo El Magufo

4
Bunu dikkate almak için soruyu gözden geçirdim. Kısacası, X86_64'te perf zorunlu görünüyor.
Edd Barrett

Yanıtlar:


2

[HAVE_PERF_EVENTS] çekirdek seçeneğini devre dışı bırakın ve Linux çekirdeğini yeniden derleyin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.