ProfilingManager kullanarak birden fazla izleme topladıktan sonra performans sorunlarını bulmak için bunları tek tek incelemek pratik olmaz. Toplu iz analizi, iz veri kümesini aynı anda sorgulayarak şunları yapmanı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 bulma
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 Toplu İzleme İşlemcisi'nin nasıl kullanılacağı gösterilmektedir.
Sorguyu tasarlama
Toplu analiz yapmanın ilk adımı, PerfettoSQL sorgusu oluşturmaktır.
Bu bölümde, uygulama başlatma gecikmesini ölçen örnek bir sorgu sunuyoruz.
Özellikle, uygulamanızın kontrolündeki uygulama başlatma gecikmesini ölçmek için activityStart ile oluşturulan ilk kare (Choreographer#doFrame diliminin ilk örneği) arasındaki süreyi ölçebilirsiniz. Şekil 1'de sorgulanacak
bölüm gösterilmektedir.
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 yürütebilir, ardından sorgu sonuçlarını kullanarak hata ayıklama izi oluşturabilir (Şekil 2) ve bunu zaman çizelgesinde görselleştirebilirsiniz (Şekil 3).
Python ortamını ayarlama
Yerel makinenize Python'u yükleyin ve gerekli kitaplıklarını ekleyin:
pip install perfetto pandas plotly
Toplu iz analizi komut dosyasını oluşturma
Aşağıdaki örnek komut dosyası, Perfetto'nun Python BatchTraceProcessor modülü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ını çalıştırdıktan sonra komut dosyası bir grafik oluşturur. Bu durumda, grafikte iki farklı zirveye sahip çift modlu bir dağılım gösterilir (Şekil 4).
Ardından, iki popülasyon arasındaki farkı bulun. Bu sayede, her bir izi daha ayrıntılı bir şekilde inceleyebilirsiniz. Bu örnekte, grafik, veri noktalarının (gecikmeler) üzerine geldiğinizde izleme dosyası adlarını tanımlayabileceğiniz şekilde ayarlanmıştır. Ardından, yüksek gecikme grubunun parçası olan izlerden birini açabilirsiniz.
Yüksek gecikme grubundan bir iz açtığınızda (Şekil 5), başlangıç sırasında çalışan MyFlaggedFeature adlı ek bir dilim görürsünüz (Şekil 6).
Buna karşılık, daha düşük gecikme süreli popülasyondan (en soldaki tepe noktası) bir iz seçildiğinde aynı dilimin olmadığı doğrulanır (Şekil 7). Bu karşılaştırma, kullanıcıların bir alt kümesi için etkinleştirilen belirli bir özellik bayrağının gerilemeyi tetiklediğini gösterir.
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.