Перейти к содержимому

لیٹنسی کی پیمائش اور PresentMon

На этой странице

PCBenchmarkX الگ سے اندرونی پروسیسنگ تاخیر اور فریم آؤٹ پٹ تاخیر کی پیمائش کرتا ہے۔ یہ سافٹ ویئر میٹرکس ماؤس کے کلک سے اسکرین پر پکسل کے چمکنے تک کے پورے راستے کو بیان نہیں کرتیں۔ مکمل پیمائشی چکر طریقہ کار میں بیان کیا گیا ہے۔

مستقل بہاؤ متعین وقفوں 8-12 مسیکنڈ کے ساتھ سگنلز پیدا کرتا ہے۔ اگر Windows اجازت دے تو یہ اعلیٰ درستگی کا انتظار کرنے والا ٹائمر بناتا ہے؛ ورنہ عام انتظار کرنے والا ٹائمر استعمال کرتا ہے۔ ایونٹ کا انتظار مسلسل پولنگ کے بغیر ہوتا ہے، جو کرنل کو مصروف رکھتی۔ اس دوران سسٹم ٹائمر کی عالمی ریزولیوشن تبدیل نہیں ہوتی۔

ہر سگنل کے لیے منصوبہ بند وقت، جنریٹر کی بیداری، اصل سگنل، وصول کنندہ کی بیداری، سمولیشن، کمانڈز کی ترسیل، GPU ٹائم اسٹیمپ اور پریزنٹ ایونٹس لاگ کیے جاتے ہیں۔ ایک مشترکہ فریم شناخت کنندہ تمام مراحل کو جوڑتا ہے۔

منصوبہ بند وقت → جنریٹر کی بیداری → سگنل
↓
وصول کنندہ کی بیداری
↓
CPU → کمانڈز → GPU
↓
Present → آؤٹ پٹ ایونٹ

ان ٹائم لائنوں میں ٹائمر کی تاخیر اور وصول کنندہ کی بیداری کی تاخیر الگ الگ نظر آتی ہیں۔ Core Latency کا آغاز اصل سگنل ہے، اس لیے اس میٹرک میں منصوبہ بند وقت سے سگنل تک کا مرحلہ شمار نہیں ہوتا۔

نتیجہ پیمائش شدہ راستے latency_path کی مرحلہ وار تقسیم پر مشتمل ہے — Baseline اور Loaded کے لیے الگ الگ۔ مراحل اصل سگنل سے شمار کیے جاتے ہیں:

مرحلہ کیا پیمائش کرتا ہے
signal_to_consumer_wake سگنل سے وصول کنندہ کی بیداری تک
cpu_processing CPU پروسیسنگ: سمولیشن اور فریم ڈیٹا کی تیاری
cpu_end_to_submit_start CPU کام کے اختتام سے ترسیل کی تیاری کے آغاز تک وقفہ
workload_submit_cpu_span گرافکس API کمانڈز کی تیاری اور تحریر
submit_start_to_gpu_begin تیاری کے آغاز سے GPU کام کے آغاز تک؛ یہ خالص قطار کی تاخیر نہیں ہے
gpu_execution خود GPU کام کی تکمیل، GPU ٹکس میں
presentation spans پریزنٹیشن: Present کا ریپر اور سگنل سے اور GPU کام کے اختتام سے ScreenTime تک کے وقفے

ہر مرحلہ اعداد و شمار اور پرسنٹائل کے ساتھ تقسیم کی صورت میں دیا جاتا ہے۔ سیگمنٹس ہر جوڑے کے نشانات کے لیے الگ الگ شمار کیے جاتے ہیں، نہ کہ دو میڈینز کو تفریق کر کے۔ اگر کسی مرحلے کا آخری نشان موجود نہ ہو یا ناقابل اعتماد ہو تو اس کی تقسیم خالی رہتی ہے — کوئی مصنوعی قدر نہیں ہوتی۔ ٹائمر کی تاخیر (منصوبہ بند وقت اور اصل سگنل کا فرق) سگنل سے پہلے ایک الگ تشخیص کے طور پر درج ہوتی ہے اور راستے کی مجموعی قدروں میں شامل نہیں ہوتی۔

CPU وقت QueryPerformanceCounter کے ذریعے درج ہوتا ہے۔ GPU کے لیے انجن پیمائش شدہ کام کے گرد دو timestamp query رکھتا ہے، GetTimestampFrequency کے ذریعے قطار کی فریکوئنسی حاصل کرتا ہے اور ٹک کے فرق کو مسیکنڈ میں تبدیل کرتا ہے:

GPU work, ms = (GPU_end − GPU_begin) × 1000 / GPU_frequency

Microsoft کی D3D12 timing دستاویزات کے مطابق، timestamp query پائپ لائن کے اختتام تک کام کی پیش رفت کو ظاہر کرتا ہے، اور GPU اور CPU کاؤنٹرز GetClockCalibration کے ذریعے منسلک ہوتے ہیں۔

GPU/QPC کیلیبریشن جوڑا GPU کام کی تکمیل کو اسی ٹائم اسکیل پر ظاہر کرنے کی اجازت دیتا ہے جس پر سگنل ہے:

GPU_completion_QPC = calibration_QPC +
(GPU_end − calibration_GPU) × QPC_frequency / GPU_frequency
Core Latency, ms =
(GPU_completion_QPC − signal_QPC) × 1000 / QPC_frequency

اس تخمینے کی درستگی بہت حد تک اس بات پر منحصر ہے کہ CPU اور GPU گھڑیاں کتنی درستگی سے ہم آہنگ کی گئی ہیں۔ یہ پھر بھی ماؤس کے USB راستے، میٹرکس کی اسکیننگ کے وقت یا پکسل کے ردعمل کا احاطہ نہیں کرتا۔ Microsoft الگ سے اعلیٰ درستگی QPC نشانات کی باریکیوں کو بیان کرتا ہے۔

Baseline اس لوڈ کی کم سے کم ترتیب میں تاخیر کی پیمائش کرتا ہے۔ Loaded 8.333333 مسیکنڈ پر کیلیبریٹ شدہ GPU لوڈ کے ساتھ کام کرتا ہے، یعنی تقریباً 120 ہرٹز کے کمپیوٹیشنل بجٹ پر۔ فزیکل مانیٹر کی فریکوئنسی مختلف ہو سکتی ہے۔

کیلیبریشن شیڈر کے اندر پیچیدگی کو 1-4096 کی حد میں تبدیل کرتی ہے۔ پاسز کی تعداد مقرر رہتی ہے: چار پوسٹ پاسز۔ پہلے ہدف کے وقت کے گرد ایک حد منتخب کی جاتی ہے، پھر اسے بہتر بنایا جاتا ہے اور منتخب ترتیب کی تصدیق کی جاتی ہے۔ تیز ویڈیو کارڈ پر وہی وقت لینے کے لیے زیادہ پیچیدہ کام درکار ہوتا ہے۔

Performance میں کام کا حجم مقرر ہوتا ہے۔ Loaded Latency میں لوڈ اس طرح کیلیبریٹ کیا جاتا ہے کہ GPU کام کا وقت مختلف ویڈیو کارڈز پر قریب قریب ہو۔ پیمائش کے بعد حاصل شدہ ٹائم اسٹیمپس کو نارملائز نہیں کیا جاتا۔

تاخیر کے ٹیسٹ کے فریموں کا آؤٹ پٹ ایک الگ پریزنٹیشن راستے سے ہوتا ہے: flip-discard موڈ میں بارڈر لیس ونڈو، زیادہ سے زیادہ فریم لیٹنسی (maximum frame latency) 1، متوقع DXGI آبجیکٹ اور tearing، اگر سسٹم اسے سپورٹ کرتا ہو۔ یہ راستہ فکسڈ پرفارمنس لوڈ سے الگ ہے، جو اسکرین بفر سے باہر چلتا ہے اور Present نہیں کرتا۔

پریزنٹ ایونٹس کے لیے PresentMon 2.5.1 لائبریری استعمال ہوتی ہے۔ یہ Windows میں گرافکس ایونٹس کے تجزیے کا ETW پروجیکٹ ہے، جسے اس کے مصنفین نے بیان کیا ہے۔ اس پیمائشی کنویئر میں Procmon / Process Monitor استعمال نہیں ہوتا۔

PCBenchmarkX اپنا الگ کلیکشن سیشن شروع کرتا ہے، اپنے پروسیس کے ایونٹس منتخب کرتا ہے اور فریموں کو سافٹ ویئر سگنلز سے جوڑتا ہے۔ اس کے لیے الگ سروس اور الگ PresentMon کے دستی آغاز کی ضرورت نہیں۔

اضافی وقفے محفوظ کیے جاتے ہیں:

  • سگنل سے Present تک؛
  • Present سے ScreenTime تک؛
  • سگنل سے ScreenTime تک۔

ScreenTime فریم پریزنٹ کا سافٹ ویئر ایونٹ ہے؛ اسکرین سے روشنی کی پیمائش کے لیے فوٹوڈایوڈ استعمال نہیں ہوتا۔ پریزنٹ میٹرکس PC Score میں شامل نہیں ہیں؛ اس میں کیا شامل ہے، اسکور کے حساب میں بیان کیا گیا ہے۔ ETW سیشن شروع کرنے کے لیے ایڈمنسٹریٹر کے طور پر چلانا یا «کارکردگی لاگ صارفین» گروپ کی رکنیت درکار ہو سکتی ہے۔ اگر سیشن شروع نہ ہو سکے تو اس تشخیص کا بلاک نہیں ہوگا، اور ناکامی نتیجے میں واضح طور پر درج ہوگی۔ ڈیٹا کی عدم موجودگی صفر تاخیر کے برابر نہیں۔

PresentMon کا GPU وقت بھی اپنے D3D12 وقت سے الگ محفوظ رہتا ہے۔ PresentMon کے ڈویلپرز HAGS کے ساتھ GPU میٹرکس کی درستگی کی حدود نوٹ کرتے ہیں۔ اس لیے انجن اپنے GPU timestamps کو ETW کے تخمینے سے تبدیل نہیں کرتا۔

PCBenchmarkX میں سگنل جنریٹر، فریم مراحل کی ہم آہنگی، CPU سمولیشن، D3D12 لوڈز، Loaded کیلیبریشن، دہرائے جانے والے بلاکس کی ترتیب، پیمائشوں کا جمع، شماریاتی پروسیسنگ اور اسکور ماڈل تیار کیے گئے۔ QPC اور D3D12 Windows فراہم کرتا ہے۔ ETW کے ذریعے گرافکس ایونٹس جمع کرنے کے لیے اوپن سورس PresentMon پروجیکٹ استعمال ہوتا ہے۔

تکنیکی معلومات اور بیرونی ذرائع 2026-09-20 کو انجن 0.5.2 کے لیے جانچے گئے۔