پروفایل‌سازی DCN و PCIe

هنگام عیب‌یابی عملکرد در یک محیط توزیع‌شده، ارتباط شبکه مرکز داده (DCN) (بین ماشین‌های میزبان مختلف) و ارتباط PCIe (بین یک CPU میزبان و دستگاه TPU محلی آن) ارتباط نزدیکی با هم دارند. از آنجا که داده‌های شبکه از DCN باید از طریق گذرگاه PCIe محلی به TPU منتقل شوند، گلوگاه‌های شبکه اغلب به صورت تراکم PCIe یا گلوگاه‌های CPU میزبان ظاهر می‌شوند.

برای تجزیه و تحلیل جامع این گلوگاه‌ها، باید معیارهای عملکرد را از هر دو دیدگاه دستگاه (PCIe) و CPU میزبان (رویدادهای DCN/PCIe driver/OS) جمع‌آوری کنید.

۱. سمت دستگاه: شمارنده‌های استفاده از PCIe در FW

برای ردیابی انتقال‌های محلی میزبان به دستگاه از دیدگاه کارت شتاب‌دهنده (موجود در TPU v6e و پلتفرم‌های جدیدتر)، شمارنده‌های PCIe میان‌افزار سمت دستگاه را فعال کنید. این مقدار داده‌ای را که میان‌افزار TPU از طریق گذرگاه PCIe منتقل می‌کند، اندازه‌گیری می‌کند.

برای جمع‌آوری این معیارها، مطمئن شوید که پروفایل را با پرچم --tpu_enable_fw_pcie_utilization_event=true جمع‌آوری می‌کنید.

استفاده از PCIe در FW

۲. سمت میزبان: شمارنده‌های عملکرد میزبان

برای مشاهده نحوه مدیریت ترافیک شبکه و PCIe توسط دستگاه میزبان، XProf می‌تواند شمارنده‌های عملکرد میزبان (مثلاً خطاهای حافظه پنهان CPU سمت میزبان، پهنای باند حافظه و معیارهای استاندارد سیستم عامل که در perf-stat(1) موجود هستند) را جمع‌آوری کند.

در باطن، XProf از زیرسیستم نظارت بر عملکرد لینوکس با استفاده از دو رابط کلیدی بهره می‌برد:

(1) رویدادهای سمت میزبان سفارشی از طریق libpfm(3)

کتابخانه libpfm(3) رشته‌های رویداد پیکربندی‌شده توسط کاربر (مثلاً شمارنده‌های سخت‌افزاری استاندارد یا رویدادهای خاص درایور شبکه/PCIe) را به ویژگی‌های خام شمارنده عملکرد سخت‌افزار/هسته ترجمه می‌کند. اگر نیاز به تعیین رویدادهای DCN یا PCIe سفارشی سمت میزبان دارید، مطمئن شوید که رشته‌های رویداد شما طبق سینتکس libpfm معتبر هستند.

مثالی از تعیین رویدادهای سفارشی سمت میزبان:

jax.profiler.start(
    # ... Some other flags...
    advanced_configuration={'tpu_cpu_perf_counter_profile_events': 'branch-misses,cycles,L1-dcache-load-misses,L1-dcache-loads'})

رویدادهای پروفایل شمارنده عملکرد CPU

(2) پیکربندی‌های خام ویژگی‌های عملکرد از طریق perf_event_open(2)

برای پیکربندی‌های رویداد پیشرفته‌تر/خام (مثلاً مالتی‌پلکسینگ در سطح هسته یا کنترل‌کننده‌های حافظه):

فراخوانی سیستمی perf_event_open(2) توسط XProf برای نمونه‌برداری و شمارش این رویدادهای میزبان استفاده می‌شود.

برای پیکربندی هر ویژگی perf_event_open :

jax.profiler.start(
    # ... Some other flags...
    advanced_configuration={'tpu_cpu_perf_counter_configs': '<config1>:<type1>:<name1>,<config2>:<type2>:<name2>'})

کجا:

  • config و type با پارامترهای ساختار perf_event_attr در perf_event_open(2) مطابقت دارند.
  • name یک نام نمایشی رشته‌ای تعریف‌شده توسط کاربر برای Trace Viewer است.

فاصله نمونه‌برداری شمارنده عملکرد CPU

برای پیکربندی بازه زمانی (برحسب میلی‌ثانیه) که در آن شمارنده‌های عملکرد CPU جمع‌آوری می‌شوند، از دستور زیر استفاده کنید:

jax.profiler.start(
    # ... Some other flags...
    advanced_configuration={'tpu_cpu_perf_counter_interval_ms': <int_value>})

این مقدار را برای ایجاد تعادل بین فرکانس نمونه‌برداری و سربار تنظیم کنید. یک بازه کوچکتر، نمونه‌های مکررتری را برای ثبت رفتار دقیق در مراحل کوتاه جمع‌آوری می‌کند، در حالی که یک بازه بزرگتر از حجم زیاد فایل ردیابی و سربار CPU در طول اجرای طولانی پروفایلینگ جلوگیری می‌کند. اگر tpu_cpu_perf_counter_interval_ms مشخص نشده باشد، XProf به حداقل دوره نمونه‌برداری پشتیبانی شده خود یعنی 10 میلی‌ثانیه برمی‌گردد.