ProfilingManager kullanarak birden fazla izleme topladığınızda performans sorunlarını bulmak için bunları tek tek incelemek pratik olmaz. Toplu izleme analizi, aşağıdaki amaçlarla aynı anda bir izleme veri kümesini sorgulamanıza olanak tanır:
- Yaygın performans gerilemelerini belirleyin.
- İstatistiksel dağılımları (örneğin, P50, P90, P99 gecikmesi) hesaplayın.
- Birkaç izleme arasında kalıplar bulma
- Performans sorunlarını anlamak ve hatalarını 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
Toplu analiz yapmak için ilk adım, PerfettoSQL sorgusu oluşturmaktır.
Bu bölümde, uygulamanın başlatılma gecikmesini ölçen bir örnek sorgu sunuyoruz.
Özellikle, uygulamanızın kontrolü dahilinde olan uygulama başlangıç gecikmesini ölçmek için activityStart ile oluşturulan ilk kare arasındaki süreyi (Choreographer#doFrame diliminin ilk oluşumu) ölçebilirsiniz. 1. şekilde, 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 bir hata ayıklama izi oluşturabilir (Şekil 2) ve bunu zaman çizelgesinde görselleştirebilirsiniz (Şekil 3).
Python ortamını ayarlama
Yerel makinenize Python'ı ve gerekli kitaplıklarını yükleyin:
pip install perfetto pandas plotly
Toplu izleme analizi komut dosyasını oluşturma
Aşağıdaki örnek komut dosyası, Perfetto'nun Python BatchTraceProcessor'ını kullanarak sorguyu birden fazla izde yürütür.
from perfetto.batch_trace_processor import BatchTraceProcessor
import glob
import plotly.express as px
traces = glob.glob('*.perfetto-trace')
if __name__ == '__main__':
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)
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-traceile biten tüm Perfetto izlerini arar ve bunları analiz için kaynak izler olarak kullanır. - Bu işlev, başlangıç süresinin alt kümesini hesaplayan toplu bir izleme sorgusu çalıştırır. Bu alt küme,
activityStartizleme diliminden uygulamanız tarafından oluşturulan ilk kareye kadar geçen süreye karşılık gelir. - Başlangıç sürelerinin dağılımını görselleştirmek için keman grafiği kullanarak gecikmeyi milisaniye cinsinden çizer.
Sonuçları yorumlama
Komut dosyasını yürüttükten sonra bir grafik oluşturulur. Bu durumda, grafikte iki farklı zirveye sahip iki modlu bir dağılım gösterilir (Şekil 4).
Ardından, iki popülasyon arasındaki farkı bulun. Bu sayede tek tek izleri daha ayrıntılı bir şekilde inceleyebilirsiniz. Bu örnekte, imleçle veri noktalarının (gecikmeler) üzerine geldiğinizde izleme dosyalarını tanımlayabilmeniz için grafik ayarlanmıştır. Ardından, yüksek gecikme süresi grubunun parçası olan izlerden birini açabilirsiniz.
Yüksek gecikme süreli gruptan bir izleme açtığınızda (Şekil 5), başlatma sırasında çalışan MyFlaggedFeature adlı ek bir dilim görürsünüz (Şekil 6).
Buna karşılık, daha düşük gecikmeli popülasyondan (en soldaki tepe) bir iz seçmek aynı dilimin olmadığını doğrular (Şekil 7). Bu karşılaştırma, bir kullanıcı alt kümesi için etkinleştirilen belirli bir özellik işaretinin regresyona neden olduğunu gösterir.
Bu örnekte, toplu izleme analizini kullanabileceğiniz birçok yöntemden biri gösterilmektedir. Diğer kullanım alanları arasında etkiyi ölçmek için sahadan istatistikleri çıkarma, gerilemeleri tespit etme ve daha fazlası yer alır.