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_percent
yardı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:
EDIT2: Daha fazla okumadan sonra kernel.perf_event_max_sample_rate
sı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_percent
25 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_percent
sı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_rate
1'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:
Burada kazanabileceğimi sanmıyorum. Boole formülü selected by
diyor 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?
CONFIG_HAVE_PERF_EVENTS=y
ve CONFIG_PERF_EVENTS=y
. Bunun engelli olduğunu düşünmüyorum.
-*-
, bazı alt sistemlerin perf modülüne bağlı olduğu anlamına gelir. Help
seç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]
.