Perf- Linux için Performans İzleme ve Analiz Aracı


Bilgi işlem performansından bahsettiğimizde, kaynaklarımız ile bunların belirli bir sürede tamamlamamıza izin verdiği görevler arasındaki ilişkiyi kastediyoruz.

Şirketler arasında amansız bir rekabetin olduğu bir günde, sahip olduklarımızı kapasitesinin en iyi şekilde nasıl kullanacağımızı öğrenmemiz önemlidir. Donanım veya yazılım kaynaklarının israfı veya bunları nasıl daha verimli kullanacağımızı bilememek, oyunumuzun zirvesinde olmak istiyorsak karşılayamayacağımız bir kayıpla sonuçlanır.

Aynı zamanda kaynaklarımızı, sürekli kullanımın onarılamaz zararlara yol açacağı bir sınıra kadar götürmemeye de dikkat etmeliyiz.

Bu yazıda size nispeten yeni bir performans analiz aracını tanıtacağız ve donanım ve uygulamalar da dahil olmak üzere Linux sistemlerinizi izlemek için kullanabileceğiniz ipuçları vereceğiz. Bu, kaynakları veya kendi enerjinizi boşa harcamadan istediğiniz sonuçları üretebilmeniz için çalıştıklarından emin olmanıza yardımcı olacaktır.

Perf'in Linux'ta tanıtılması ve kurulması

Linux, diğerlerinin yanı sıra, rahatlıkla perf olarak adlandırılan bir performans izleme ve analiz aracı sağlar. Peki perf'i zaten aşina olduğunuz diğer iyi bilinen araçlardan ayıran şey nedir?

Bunun yanıtı, perf'in CPU'daki Performans İzleme Birimi'ne erişim sağlaması ve bu sayede donanımın davranışına ve bununla ilgili olaylara yakından bakmamıza olanak sağlamasıdır.

Ayrıca yazılım olaylarını izleyebilir ve toplanan verilerden raporlar oluşturabilir.

RPM tabanlı dağıtımlara perf'i aşağıdakilerle yükleyebilirsiniz:

yum update && yum install perf     [CentOS / RHEL / Fedora]
dnf update && dnf install perf     [Fedora 23+ releases]

Debian'da ve türevlerinde:

sudo aptitude update && sudo aptitude install linux-tools-$(uname -r) linux-tools-generic

Yukarıdaki komutta uname -r asıl sürümün yanı sıra ekstra dizeler döndürürse (benim durumumda 3.2.0-23-generic), yazmanız gerekebilir uname çıktısını kullanmak yerine linux-tools-3.2.0-23.

perf'in VirtualBox veya VMWare üzerinde bir konukta çalıştırıldığında, diğer sanallaştırma teknolojilerinin (KVM veya XEN gibi) yaptığı gibi donanım sayaçlarına erişime izin vermediğinden eksik sonuçlar verdiğini unutmamak da önemlidir. .

Ayrıca, bazı perf komutlarının varsayılan olarak root ile sınırlandırılabileceğini ve bunun aşağıdakileri yaparak devre dışı bırakılabileceğini (sistem yeniden başlatılana kadar) unutmayın:

echo 0 > /proc/sys/kernel/perf_event_paranoid

Paranoyak modunu kalıcı olarak devre dışı bırakmanız gerekiyorsa /etc/sysctl.conf dosyasında aşağıdaki ayarı güncelleyin.

kernel.perf_event_paranoid = 0

Alt komutlar

perf'i yükledikten sonra, mevcut alt komutların bir listesi için man sayfasına başvurabilirsiniz (alt komutları, sisteme belirli bir pencere açan özel seçenekler olarak düşünebilirsiniz). En iyi ve daha eksiksiz sonuçlar için perf'i ya root olarak ya da sudo aracılığıyla kullanın.

Mükemmel liste

perf listesi (seçenekler olmadan) tüm sembolik olay türlerini (uzun liste) döndürür. Belirli bir kategorideki mevcut etkinliklerin listesini görüntülemek istiyorsanız, perf listesini ve ardından kategori adını kullanın ([hw|sw|cache|tracepoint|pmu|event_glob) ]), örneğin:

Linux'ta yazılım tarafından önceden tanımlanmış olayların listesini görüntüleyin:

perf list sw 

Mükemmel istatistik

perf stat bir komutu çalıştırır ve bu komutun yürütülmesi sırasında Linux performans istatistiklerini toplar. dd komutunu çalıştırdığımızda sistemimizde ne olur?

perf stat dd if=/dev/zero of=test.iso bs=10M count=1

Yukarıda gösterilen istatistikler diğer şeylerin yanı sıra şunları da gösterir:

  1. dd komutunun yürütülmesi 21,812281 milisaniyelik CPU harcadı. Bu sayıyı aşağıdaki "geçen saniye süresi" değerine (23,914596 milisaniye) bölersek, 0,912 (kullanılan CPU) sonucunu elde ederiz.
  2. Komut yürütülürken, 15 bağlam anahtarı (işlem anahtarları olarak da bilinir), CPU'ların bir işlemden (veya iş parçacığından) diğerine 15 kez değiştirildiğini gösterir.
  3. 2 CPU geçişi, 2 çekirdekli bir CPU'da iş yükünün çekirdek sayısı arasında eşit olarak dağıtılması durumunda beklenen sonuçtur.
    Bu süre boyunca (21,812281 milisaniye), tüketilen toplam CPU döngüsü sayısı 62,025,623 idi ve bu, 0,021812281 saniyeye bölündüğünde elde edilir. 2,843 GHz.
  4. Döngü sayısını toplam talimat sayısına bölersek, Talimat Başına 4,9 Döngü elde ederiz; bu, her talimatın tamamlanmasının (ortalama olarak) neredeyse 5 CPU döngüsü aldığı anlamına gelir. Bunun (en azından kısmen) CPU döngülerinin israfına veya yanlış kullanılmasına yol açan dallanmaların ve kaçırılan dalların (aşağıya bakın) sayısını suçlayabiliriz.
  5. Komut yürütüldüğünde toplam 3.552.630 dalla karşılaşıldı. Bu, koddaki karar noktalarının ve döngülerin CPU düzeyinde temsilidir. Ne kadar çok dal olursa performans o kadar düşük olur. Bunu telafi etmek için tüm modern CPU'lar kodun alacağı akışı tahmin etmeye çalışır. 51.348 dallanma hatası, tahmin özelliğinin %1,45 oranında hatalı olduğunu gösteriyor.

Aynı prensip, bir uygulama çalışırken istatistiklerin toplanması (veya başka bir deyişle profil oluşturma) için de geçerlidir. İstenilen uygulamayı başlatmanız ve makul bir süre sonra (bu size kalmış) kapatmanız yeterlidir; perf, istatistikleri ekranda görüntüleyecektir. Bu istatistikleri analiz ederek olası sorunları tanımlayabilirsiniz.

Mükemmel üst

perf top, neredeyse gerçek zamanlı bir sistem profili (canlı analiz olarak da bilinir) göstermesi bakımından top komutuna benzer.

-a seçeneğiyle bilinen tüm olay türlerini görüntülersiniz, oysa -e seçeneği belirli bir olay kategorisini seçmenize olanak tanır ( tarafından döndürüldüğü gibi) performans listesi):

Tüm döngü olaylarını görüntüleyecektir.

perf top -a 

CPU saatiyle ilgili tüm olayları görüntüler.

perf top -e cpu-clock 

Yukarıdaki çıktıdaki ilk sütun, Sembol ve Paylaşılan Nesne işlevine göre gruplandırılmış şekilde çalışmanın başlangıcından bu yana alınan örneklerin yüzdesini temsil eder. man perf-top'ta daha fazla seçenek mevcuttur.

Mükemmel rekor

perf kaydı bir komutu çalıştırır ve istatistiksel verileri geçerli çalışma dizinindeki perf.data adlı bir dosyaya kaydeder. Perf stat'a benzer şekilde çalışır.

Perf kaydı yazın ve ardından bir komut yazın:

perf record dd if=/dev/null of=test.iso bs=10M count=1

Mükemmel rapor

perf raporu, yukarıdaki perf.data'da toplanan verileri bir performans raporu halinde biçimlendirir:

sudo perf report

Yukarıdaki alt komutların tümü, şu şekilde çağrılabilecek özel bir kılavuz sayfasına sahiptir:

man perf-subcommand

burada alt komut, liste, stat, top, record veya olabilir >rapor et. Bunlar en sık kullanılan alt komutlardır; diğerleri belgelerde listelenmiştir (bağlantı için Özet bölümüne bakın).

Özet

Bu kılavuzda size Linux için bir performans izleme ve analiz aracı olan perf'i tanıttık. https://perf.wiki.kernel.org adresinde bulunan belgelerine aşina olmanızı önemle tavsiye ederiz.

Yüksek oranda kaynak tüketen uygulamalar bulursanız kaynak kodunu değiştirmeyi veya diğer alternatifleri kullanmayı düşünebilirsiniz.

Bu makaleyle ilgili sorularınız veya iyileştirme önerileriniz varsa hepimiz kulaklarımızdadır. Aşağıdaki yorum formunu kullanarak bize ulaşmaktan çekinmeyin.