ProfilingManager kullanarak birden fazla izleme topladıktan sonra performans sorunlarını bulmak için bunları tek tek incelemek pratik olmaz. Toplu iz analizi, aşağıdaki işlemleri yapmak için bir iz veri kümesini aynı anda sorgulamanıza olanak tanır:
- Yaygın performans gerilemelerini belirleme
- İstatistiksel dağılımları (ör. P50, P90, P99 gecikmesi) hesaplama
- Birden fazla izdeki kalıpları bulma
- Performans sorunlarını anlamak ve hata ayıklamak için aykırı izleri bulun.
Bu bölümde, yerel olarak depolanan bir dizi izdeki başlangıç metriklerini analiz etmek ve daha ayrıntılı analiz için aykırı izleri bulmak üzere Perfetto Python Batch Trace Processor'ın nasıl kullanılacağı gösterilmektedir.
Sorguyu tasarlama
Öncelikle, karşılaştırmak istediğiniz metriği çıkaran bir PerfettoSQL sorgusu oluşturun.
Aşağıdaki örnekte, Şekil 1'de gösterildiği gibi activityStart ile ilk oluşturulan kare (Choreographer#doFrame) arasındaki uygulama kontrollü başlatma gecikmesi ölçülmektedir.
activityStart ile oluşturulan ilk kare arasındaki izleme bölümü.CREATE OR REPLACE PERFETTO FUNCTION find_slices(pattern STRING) RETURNS
TABLE (name STRING, ts LONG, dur LONG) AS
SELECT name,ts,dur FROM slice WHERE name GLOB $pattern;
CREATE OR REPLACE PERFETTO FUNCTION generate_start_to_end_slices(startSlicePattern STRING, endSlicePattern STRING, inclusive BOOL) RETURNS
TABLE(name STRING, ts LONG, dur LONG) AS
SELECT name, ts, MIN(startToEndDur) as dur
FROM
(SELECT S.name as name, S.ts as ts, E.ts + IIF($inclusive, E.dur, 0) - S.ts as startToEndDur
FROM find_slices($startSlicePattern) as S CROSS JOIN find_slices($endSlicePattern) as E
WHERE startToEndDur > 0)
GROUP BY name, ts;
SELECT ts,name,dur from generate_start_to_end_slices('activityStart','*Choreographer#doFrame [0-9]*', true)
Sorguyu Perfetto kullanıcı arayüzünde çalıştırabilir, ardından sorgu sonuçlarını kullanarak bir hata ayıklama kanalı oluşturabilir (Şekil 2) ve bunu zaman çizelgesinde görselleştirebilirsiniz (Şekil 3).
Python ortamını ayarlama
Yerel makinenize Python'u ve gerekli kitaplıklarını yükleyin:
pip install perfetto pandas plotly
Toplu iz analizi komut dosyasını oluşturma
Aşağıdaki örnek komut dosyası, Perfetto'nun Python BatchTraceProcessor aracını kullanarak sorguyu birden fazla izlemede yürütür.
from perfetto.batch_trace_processor import BatchTraceProcessor
import glob
import plotly.express as px
# Collect all trace files in the local directory
traces = glob.glob('*.perfetto-trace')
if not traces:
print("No .perfetto-trace files found in the current directory.")
exit(1)
if __name__ == '__main__':
# Process all traces in parallel to aggregate metrics across runs
with BatchTraceProcessor(traces) as btp:
query = """
CREATE OR REPLACE PERFETTO FUNCTION find_slices(pattern STRING) RETURNS
TABLE (name STRING, ts LONG, dur LONG) AS
SELECT name,ts,dur FROM slice WHERE name GLOB $pattern;
CREATE OR REPLACE PERFETTO FUNCTION generate_start_to_end_slices(startSlicePattern STRING, endSlicePattern STRING, inclusive BOOL) RETURNS
TABLE(name STRING, ts LONG, dur LONG) AS
SELECT name, ts, MIN(startToEndDur) as dur
FROM
(SELECT S.name as name, S.ts as ts, E.ts + IIF($inclusive, E.dur, 0) - S.ts as startToEndDur
FROM find_slices($startSlicePattern) as S CROSS JOIN find_slices($endSlicePattern) as E
WHERE startToEndDur > 0)
GROUP BY name, ts;
SELECT ts,name,dur / 1000000 as dur_ms from generate_start_to_end_slices('activityStart','*Choreographer#doFrame [0-9]*', true)
"""
df = btp.query_and_flatten(query)
# Plot the distribution of startup times, tracking trace file paths on
# hover
violin = px.violin(df, x='dur_ms', hover_data='_path', title='startup time', points='all')
violin.show()
Komut dosyasını anlama
Python komut dosyasını çalıştırdığınızda aşağıdaki işlemler gerçekleştirilir:
- Komut dosyası, yerel dizininizde
.perfetto-traceson ekine sahip tüm Perfetto izlerini arar ve bunları analiz için kaynak izler olarak kullanır. activityStartizleme diliminden uygulamanız tarafından oluşturulan ilk kareye kadar geçen süreye karşılık gelen başlatma süresinin alt kümesini hesaplayan bir toplu izleme sorgusu çalıştırır.- Başlatma sürelerinin dağılımını görselleştirmek için keman grafiği kullanarak gecikmeyi milisaniye cinsinden gösterir.
Sonuçları yorumlama
Komut dosyası çalıştırıldığında, iki farklı gecikme zirvesi olan çift modlu bir dağılım gösteren bir keman grafiği oluşturulur (Şekil 4). _path dosya adını incelemek ve her bir zirvedeki izleri karşılaştırmak için grafikteki veri noktalarının üzerine gelin (Şekil 5):
- Yüksek gecikmeli izler (sağ tepe): Perfetto kullanıcı arayüzünde bu gruptan bir iz açıldığında, başlatma sırasında çalışan fazladan bir
MyFlaggedFeaturedilimi gösterilir (Şekil 6). - Düşük gecikmeli izler (sol tepe): Daha hızlı gruptan bir iz açıldığında
MyFlaggedFeature'nin olmadığı doğrulanır (Şekil 7). Bu durum, kullanıcıların bir alt kümesi için etkinleştirilen özellik bayrağının başlangıç gerilemesine neden olduğunu gösterir.
MyFlaggedFeature dilimiyle yüksek gecikmeli izleme başlatma.
Bu örnek, toplu izleme analizini kullanabileceğiniz birçok yöntemden birini gösterir. Diğer kullanım alanları arasında, etkiyi ölçmek için sahadan istatistikleri ayıklama, gerilemeleri tespit etme ve daha fazlası yer alır.