বাল্ক ট্রেস বিশ্লেষণ

একবার আপনি ProfilingManager ব্যবহার করে একাধিক ট্রেস সংগ্রহ করলে, পারফরম্যান্স সমস্যা খুঁজে বের করার জন্য পৃথকভাবে সেগুলি অন্বেষণ করা অবাস্তব হয়ে ওঠে। বাল্ক ট্রেস বিশ্লেষণ আপনাকে একই সাথে ট্রেসের একটি ডেটাসেট অনুসন্ধান করতে দেয়:

  • সাধারণ কর্মক্ষমতা হ্রাস চিহ্নিত করুন।
  • পরিসংখ্যানগত বিতরণ গণনা করুন (উদাহরণস্বরূপ, P50, P90, P99 ল্যাটেন্সি)।
  • বিভিন্ন ট্রেস জুড়ে প্যাটার্ন খুঁজুন।
  • পারফরম্যান্স সমস্যাগুলি বুঝতে এবং ডিবাগ করার জন্য বহিরাগত ট্রেসগুলি খুঁজুন।

এই বিভাগটি দেখায় যে কীভাবে পারফেটো পাইথন ব্যাচ ট্রেস প্রসেসর ব্যবহার করে স্থানীয়ভাবে সংরক্ষিত ট্রেসের একটি সেট জুড়ে স্টার্টআপ মেট্রিক্স বিশ্লেষণ করতে হয় এবং আরও গভীর বিশ্লেষণের জন্য বহিরাগত ট্রেসগুলি সনাক্ত করতে হয়।

কোয়েরি ডিজাইন করুন

একটি বাল্ক বিশ্লেষণ সম্পাদনের প্রথম ধাপ হল একটি PerfettoSQL কোয়েরি তৈরি করা।

এই বিভাগে, আমরা একটি উদাহরণ কোয়েরি উপস্থাপন করছি যা অ্যাপ স্টার্টআপ ল্যাটেন্সি পরিমাপ করে। বিশেষ করে, আপনি activityStart থেকে জেনারেট করা প্রথম ফ্রেম ( Choreographer#doFrame স্লাইসের প্রথম ঘটনা) পর্যন্ত সময়কাল পরিমাপ করতে পারেন যাতে আপনার অ্যাপের নিয়ন্ত্রণের মধ্যে থাকা অ্যাপ স্টার্টআপ ল্যাটেন্সি পরিমাপ করা যায়। চিত্র 1 কোয়েরি করার বিভাগটি দেখায়।

একটি ট্রেসের টাইমলাইন ভিউ, যা অ্যাক্টিভিটিস্টার্ট ইভেন্ট থেকে প্রথম কোরিওগ্রাফার#doFrame ইভেন্ট পর্যন্ত সময়কাল হাইলাইট করে।
চিত্র ১. `activityStart` থেকে প্রথম তৈরি করা ফ্রেম পর্যন্ত বিভাগটি ট্রেস করুন।
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)

আপনি Perfetto UI এর মধ্যে কোয়েরিটি কার্যকর করতে পারেন এবং তারপর কোয়েরি ফলাফল ব্যবহার করে একটি ডিবাগ ট্র্যাক তৈরি করতে পারেন (চিত্র 2) এবং টাইমলাইনের মধ্যে এটি কল্পনা করতে পারেন (চিত্র 3)।

Perfetto UI এর একটি স্ক্রিনশট যেখানে দেখানো হয়েছে কিভাবে একটি স্টার্টআপ কোয়েরির জন্য একটি ডিবাগ ট্র্যাক তৈরি করতে হয়।
চিত্র ২। একটি স্টার্টআপ কোয়েরির জন্য একটি ডিবাগ ট্র্যাক তৈরি করুন।
Perfetto UI-তে একটি টাইমলাইন ভিউ যা একটি স্টার্টআপ কোয়েরির জন্য একটি জেনারেট করা ডিবাগ ট্র্যাক দেখায়।
চিত্র ৩। একটি স্টার্টআপ কোয়েরির জন্য ডিবাগ ট্র্যাক তৈরি করা হয়েছে।

পাইথন পরিবেশ সেট আপ করুন

আপনার স্থানীয় মেশিন এবং এর প্রয়োজনীয় লাইব্রেরিতে পাইথন ইনস্টল করুন :

pip install perfetto pandas plotly

বাল্ক ট্রেস বিশ্লেষণ স্ক্রিপ্ট তৈরি করুন

নিম্নলিখিত নমুনা স্ক্রিপ্টটি Perfetto's Python BatchTraceProcessor ব্যবহার করে একাধিক ট্রেসে কোয়েরিটি কার্যকর করে।

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()

স্ক্রিপ্টটি বুঝুন

যখন আপনি পাইথন স্ক্রিপ্টটি চালান, তখন এটি নিম্নলিখিত ক্রিয়াগুলি সম্পাদন করে:

  1. স্ক্রিপ্টটি আপনার স্থানীয় ডিরেক্টরিতে .perfetto-trace এর সাথে যুক্ত সমস্ত Perfetto ট্রেস অনুসন্ধান করে এবং বিশ্লেষণের জন্য সেগুলিকে সোর্স ট্রেস হিসেবে ব্যবহার করে।
  2. এটি একটি বাল্ক ট্রেস কোয়েরি চালায় যা আপনার অ্যাপ দ্বারা তৈরি করা activityStart ট্রেস স্লাইস থেকে প্রথম ফ্রেম পর্যন্ত সময়ের সাথে সম্পর্কিত স্টার্টআপ সময়ের উপসেট গণনা করে।
  3. এটি স্টার্টআপ সময়ের বন্টন কল্পনা করার জন্য একটি বেহালা প্লট ব্যবহার করে মিলিসেকেন্ডে ল্যাটেন্সি প্লট করে।

ফলাফল ব্যাখ্যা করুন

একটি বেহালা প্লট যেখানে জিজ্ঞাসা করা স্টার্টআপ ল্যাটেন্সির বন্টন দেখানো হয়েছে।
চিত্র ৪. জিজ্ঞাসা করা স্টার্টআপ ল্যাটেন্সির বেহালা প্লট।

স্ক্রিপ্টটি কার্যকর করার পর, স্ক্রিপ্টটি একটি প্লট তৈরি করে। এই ক্ষেত্রে, প্লটটি দুটি স্বতন্ত্র শিখর সহ একটি দ্বি-মোডাল বিতরণ দেখায় (চিত্র 4)।

এরপর, দুটি পপুলেশনের মধ্যে পার্থক্য খুঁজুন। এটি আপনাকে পৃথক ট্রেসগুলি আরও বিশদে পরীক্ষা করতে সাহায্য করবে। এই উদাহরণে, প্লটটি এমনভাবে সেট আপ করা হয়েছে যাতে আপনি যখন ডেটা পয়েন্টগুলির (লেটেন্সি) উপর কার্সার রাখেন, তখন আপনি ট্রেস ফাইলের নামগুলি সনাক্ত করতে পারেন। তারপরে আপনি হাই-লেটেন্সি গ্রুপের অংশ এমন একটি ট্রেস খুলতে পারেন।

যখন আপনি হাই-লেটেন্সি গ্রুপ (চিত্র ৫) থেকে একটি ট্রেস খুলবেন, তখন আপনি স্টার্টআপের সময় MyFlaggedFeature নামে একটি অতিরিক্ত স্লাইস চালু দেখতে পাবেন (চিত্র ৬)। বিপরীতভাবে, নিম্ন-লেটেন্সি পপুলেশন (সবচেয়ে বাম দিকের শীর্ষ) থেকে একটি ট্রেস নির্বাচন করলে একই স্লাইসের অনুপস্থিতি নিশ্চিত হয় (চিত্র ৭)। এই তুলনাটি নির্দেশ করে যে ব্যবহারকারীদের একটি উপসেটের জন্য সক্ষম একটি নির্দিষ্ট বৈশিষ্ট্য পতাকা, রিগ্রেশনকে ট্রিগার করে।

একটি প্লট হাইলাইট করা হয়েছে উচ্চ ল্যাটেন্সি ট্রেস।
চিত্র ৫। একটি বেহালা প্লটে উচ্চ ল্যাটেন্সি ডেটা পয়েন্ট।
MyFlaggedFeature স্লাইসের কারণে উচ্চ লেটেন্সি স্টার্টআপ হাইলাইট করা একটি ট্রেস।
চিত্র ৬। অতিরিক্ত `MyFlaggedFeature` স্লাইস সহ উচ্চ ল্যাটেন্সি ট্রেস স্টার্টআপ।
MyFlaggedFeature স্লাইস ছাড়াই কম ল্যাটেন্সি স্টার্টআপ হাইলাইট করে এমন একটি ট্রেস।
চিত্র ৭। কম ল্যাটেন্সি ট্রেস স্টার্টআপ।

এই উদাহরণটি বাল্ক ট্রেস বিশ্লেষণ ব্যবহার করার অনেক উপায়ের মধ্যে একটি প্রদর্শন করে। অন্যান্য ব্যবহারের ক্ষেত্রে প্রভাব পরিমাপ করার জন্য ক্ষেত্র থেকে পরিসংখ্যান বের করা, রিগ্রেশন সনাক্তকরণ এবং আরও অনেক কিছু অন্তর্ভুক্ত।