مؤقت أحداث عالي الدقة

مؤقت الأحداث عالي الدقة ( HPET ) هو مؤقت مادي متوفر في أجهزة الكمبيوتر الشخصية الحديثة المتوافقة مع معمارية x86 . بالمقارنة مع أنواع المؤقتات القديمة المتوفرة في معمارية x86، يتيح HPET معالجة أكثر كفاءة للتطبيقات الحساسة للتوقيت، مثل تشغيل الوسائط المتعددة وتبديل مهام نظام التشغيل . طُوّر هذا المؤقت بالتعاون بين شركتي إنتل ومايكروسوفت ، وتم دمجه في شرائح الكمبيوتر الشخصي منذ عام 2005. كان يُشار إليه سابقًا من قِبل إنتل باسم " مؤقت الوسائط المتعددة" ، [ 1 ] وقد تم اختيار مصطلح HPET لتجنب الخلط بينه وبين مؤقتات الوسائط المتعددة البرمجية التي تم تقديمها في ملحقات الوسائط المتعددة لنظام التشغيل ويندوز 3.0 . [ 2 ]

لا تستطيع أنظمة التشغيل القديمة التي لا تدعم جهاز HPET المادي استخدام سوى تقنيات التوقيت القديمة، مثل مؤقت الفاصل الزمني القابل للبرمجة (PIT) أو ساعة الوقت الحقيقي (RTC). ويمكن لنظام التشغيل Windows XP ، عند تزويده بأحدث طبقة تجريد للأجهزة (HAL)، استخدام عداد الطابع الزمني للمعالج (TSC) أو مؤقت إدارة طاقة ACPI (ACPI PMTIMER) بالإضافة إلى ساعة الوقت الحقيقي (RTC) لتوفير ميزات نظام التشغيل التي يوفرها جهاز HPET المادي في إصدارات Windows اللاحقة. ومن المثير للارتباك أن أنظمة Windows XP هذه تُظهر اتصال "HPET" في مدير برامج تشغيل الأجهزة على الرغم من عدم استخدام جهاز Intel HPET.

سمات

تتكون شريحة HPET من عداد تصاعدي 64 بت (العداد الرئيسي) يعمل بتردد لا يقل عن 10  ميجاهرتز، ومجموعة من المقارنات (ثلاثة على الأقل، وحتى 256). يبلغ عرض هذه المقارنات 32 أو 64 بت. تتم برمجة HPET عبر نافذة إدخال/إخراج مُرتبطة بالذاكرة، ويمكن اكتشافها عبر ACPI . تُدمج دائرة HPET في أجهزة الكمبيوتر الحديثة ضمن شريحة الجسر الجنوبي .

يُبرمج كل مُقارِن بقيمة، ويُمكنه توليد مقاطعة عندما تتطابق قيمة العداد الرئيسي مع القيمة المُبرمجة، أو في وضع 32 بت، في كل مرة يعود فيها النصف الأدنى من قيمة العداد الرئيسي (32 بت) إلى الصفر. يُمكن وضع المُقارِنات في وضع التشغيل لمرة واحدة أو الوضع الدوري، مع دعم مُقارِن واحد على الأقل للوضع الدوري ودعم جميعها لوضع التشغيل لمرة واحدة. في وضع التشغيل لمرة واحدة، يُطلق المُقارِن مقاطعة مرة واحدة عندما يصل العداد الرئيسي إلى القيمة المُخزنة في سجل المُقارِن، بينما في الوضع الدوري، تُولّد المقاطعات على فترات زمنية مُحددة.

يمكن تشغيل المقارنات بواسطة نظام التشغيل، على سبيل المثال لتوفير مؤقت واحد لكل وحدة معالجة مركزية للجدولة، أو بواسطة التطبيقات.

التطبيقات

يُمكن لـ HPET توليد مقاطعات دورية بدقة أعلى بكثير من RTC، ويُستخدم غالبًا لمزامنة تدفقات الوسائط المتعددة، مما يوفر تشغيلًا سلسًا ويقلل الحاجة إلى استخدام حسابات الطوابع الزمنية الأخرى، مثل تعليمات وحدة المعالجة المركزية x86RDTSC . يُحسّن هذا من الكفاءة، حيث لا تحتاج وحدة المعالجة المركزية إلى إهدار دورات لتعويض الدقة المنخفضة للمؤقتات، ويُمكّن من استخدام حالات السكون بشكل أكثر فعالية ، مما يُقلل من استهلاك الطاقة. بالإضافة إلى متطلبات التطبيقات لساعة عالية الدقة، توجد فوائد على مستوى نظام التشغيل في المُجدول ومن خلال توفير قاعدة ساعة مستقرة لأنظمة المعالجات المتعددة . [ 3 ]

مقارنة بالسابقين

صُممت وحدة HPET لتكملة واستبدال مؤقت الفاصل الزمني القابل للبرمجة 8254 ووظيفة المقاطعة الدورية لساعة الوقت الحقيقي (RTC). بالمقارنة مع دوائر المؤقتات القديمة هذه، تتميز وحدة HPET بتردد أعلى وعدادات 64 بت أوسع (مع إمكانية تشغيلها في وضع 32 بت). [ 1 ]

لا تحدد مواصفات HPET تردد المؤقت، بل تشترط فقط حدًا أدنى قدره 10  ميجاهرتز؛ ويتم تزويد نظام التشغيل بالتردد الفعلي من خلال سجل مادي يحدد عدد الفيمتو ثانية لكل دورة (بحد أقصى قدره100000000 fs  ). القيمة الشائعة هي 14.3 18 ميجاهرتز، أي  12 ضعف تردد 8254 القياسي البالغ 1.193 18 ميجاهرتز  .

على الرغم من إمكانية وضع المؤقتين 8254 وRTC في وضع التشغيل الأحادي المشابه لتقنية HPET، إلا أن عملية الإعداد بطيئة للغاية، مما يجعل هذا الوضع غير عملي للمهام التي تتطلب جدولة دقيقة. [ 4 ] بدلاً من ذلك، يُستخدم المؤقتان 8254 وRTC عادةً في الوضع الدوري بفواصل زمنية قصيرة جدًا. على سبيل المثال، إذا احتاج تطبيق ما إلى تنفيذ عدة فترات انتظار قصيرة (بضع ميلي ثانية مثلاً)، فمن الأفضل استخدام مؤقت دوري يعمل باستمرار بفترة 1  ميلي ثانية، نظرًا لتكلفة الإعداد العالية لمؤقت التشغيل الأحادي 8254 أو RTC. يتسبب هذا في حدوث مقاطعة كل ميلي ثانية حتى لو كان التطبيق يحتاج إلى تنفيذ العمل الفعلي بوتيرة أقل. مع تقنية HPET، يمكن تجنب المقاطعات الإضافية، لأن تكلفة إعداد مؤقت التشغيل الأحادي HPET أقل بكثير.

الاستخدام والتوافق

سجل إقلاع نظام لينكس يُظهر التبديل من HPET إلى TSC كمصدر لساعة النظام

لا تستطيع أنظمة التشغيل المصممة قبل وجود تقنية HPET استخدامها، لذا فهي تستخدم تقنيات مؤقت أخرى. أما أنظمة التشغيل الأحدث، فتميل إلى استخدام أيٍّ منهما. بعض الأجهزة تجمع بينهما. في الواقع، تحتوي معظم رقاقات الجسر الجنوبي الحالية على نسخ داعمة للتقنيات القديمة، مثل PIT وPIC و APIC وRTC، مدمجة في رقائقها، سواءً استخدمها نظام التشغيل أم لا، مما يُسهّل تشغيل أنظمة التشغيل القديمة على أجهزة الكمبيوتر الحديثة جدًا.

من المعروف أن أنظمة التشغيل التالية لا تستطيع استخدام HPET: Windows XP SP1، [ ب ] والإصدارات الأقدم من Windows ، ونواة Linux قبل الإصدار 2.6. [ ج ]

من المعروف أن أنظمة التشغيل التالية قادرة على استخدام HPET: Windows XP SP3، [ d ] Windows Server 2003 SP2 ، Windows Server 2008 ، Windows Server 2008 R2 ، Windows Vista ، Windows 7 ، إصدارات x86 من OS X ، أنظمة تشغيل Linux التي تستخدم نواة 2.6 (أو أحدث)، FreeBSD [ 5 ] و OpenSolaris .

يمكن لنواة لينكس أيضًا استخدام HPET كمصدر للساعة. تشير وثائق Red Hat MRG الإصدار 2 إلى أن TSC هو مصدر الساعة المفضل نظرًا لانخفاض تكلفته، ولكنه يستخدم HPET كخيار احتياطي. وقد أظهر اختبار معياري في تلك البيئة، شمل 10 ملايين حدث، أن TSC استغرق حوالي 0.6 ثانية، بينما استغرق HPET ما يزيد قليلاً عن 12 ثانية، واستغرق مؤقت إدارة طاقة ACPI حوالي 24 ثانية. [ 6 ]

في عام 2019، تقرر حظر برنامج HPET في نواة لينكس الأحدث عند تشغيله على بعض معالجات إنتل ( Coffee Lake ) بسبب عدم استقراره. [ 7 ]

مشاكل

مؤقت HPET هو مؤقت يعمل باستمرار ويعدّ تصاعديًا، وليس جهازًا يعمل لمرة واحدة يعدّ تنازليًا إلى الصفر، ويُسبب مقاطعة واحدة ثم يتوقف. ولأن HPET يقارن قيمة المؤقت الفعلية بالقيمة المستهدفة المبرمجة على أساس التساوي وليس على أساس "أكبر من أو يساوي"، فقد تُفقد المقاطعات إذا كان الوقت المستهدف قد انقضى بالفعل عند كتابة قيمة المُقارن في سجل الشريحة. [ 8 ] في هذه الحالة، لا تُفقد المقاطعة المقصودة فحسب، بل تُضبط في الواقع على فترة زمنية مستقبلية بعيدة (حوالي 232 أو 264 عدّة ). [ 9 ] في وجود مقاطعات غير قابلة للإخفاء (مثل مقاطعة إدارة النظام (SMI)) التي ليس لها حد أقصى ثابت لوقت تنفيذها، تتطلب حالة التزامن هذه إعادة فحص المؤقت بعد الإعداد، وهي عملية تستغرق وقتًا طويلاً، ويصعب تجنبها تمامًا. وتتفاقم الصعوبات إذا لم تتم مزامنة قيمة المُقارن مع المؤقت فورًا، بل تأخرت بمقدار عدّة أو عدّتين، كما هو الحال في بعض الشرائح. [ 8 ]

إلى جانب الإشارة إلى حالة التزامن المذكورة أعلاه، تُدرج وثيقة VMware أيضًا بعض العيوب الأخرى: "لا تشترط المواصفات أن يكون المؤقت دقيقًا للغاية، أو أن يكون انحرافه منخفضًا، أو أن يكون سريع القراءة. تعمل بعض التطبيقات النموذجية على تشغيل العداد بتردد حوالي 18  ميجاهرتز، وتتطلب نفس الوقت تقريبًا (1-2  ميكروثانية) لقراءة HPET كما هو الحال مع مؤقت ACPI. وقد لوحظت تطبيقات يكون فيها سجل الفترة غير دقيق بمقدار 800 جزء في المليون أو أكثر." [ 9 ]

ملحوظات

  1. في هذه الرقاقات عالية التكامل، غالبًا ما يقوم نظام الإدخال والإخراج الأساسي (BIOS) بإعداد HPET بشكل غير صحيح في واجهة ACPI، ولا يتم تهيئته بشكل صحيح إلا في وضع Intel 8253. إذا لم يتم إعداد ACPI بشكل صحيح، فلن يتمكن نظام التشغيل من عرض HPET. ولا يرى مطورو BIOS ونظام التشغيل ضرورةً لدعم الوقت الحقيقي. لذا، فإن HPET موجود فقط لتلبية احتياجات النظام من السرعة العالية. إذا تم إعداد HPET بشكل صحيح في ACPI من BIOS، فيجب أن تكون صفحة ACPI MMIO لشريحة HPET الأولى عند 0xFED00000، وشريحة HPET الثانية عند الصفحة 0xFED80000 (راجع المناقشة لمزيد من المعلومات).
  2. يتعرف نظام التشغيل Windows XP ، الإصدار SP2،مؤقت HPET (كجهاز يحمل المعرّف ACPI\PNP0103). عند اكتشافه (على سبيل المثال، على اللوحة الأم Intel DQ45CB)، يعرض مدير الأجهزة (ابدأ / الإعدادات / لوحة التحكم / النظام / مدير الأجهزة) جهاز "مؤقت الأحداث عالي الدقة" في فرع "أجهزة النظام". ولكن هذا الجهاز غير مستخدم إطلاقًا.
  3. مع نواة لينكس ، أنت بحاجة إلى برنامج تشغيل جهاز ساعة الأجهزة RTC-CMOS الأحدث بدلاً من برنامج تشغيل RTC الأصلي.
  4. يحاكي نظام التشغيل ويندوز إكس بي SP3 معظم مواصفات HPET كما وُضعت عام 2002 تحسبًا لظهور جهاز في أجهزة الكمبيوتر المصممة لنظام ويندوز فيستا بحلول عام 2005. ويُستخدم مصطلح "مؤقت الأحداث عالي الدقة" في مدير برامج التشغيل لوصف أنظمة التوقيت الفرعية TSC (عداد الطابع الزمني) أو ACPI Power Management Timer (PMTimer)، حتى عند عدم استخدام جهاز Intel HPET بتردد 15 ميجاهرتز. صحيح أن ويندوز فيستا والإصدارات اللاحقة فقط هي التي تستخدم جهاز Intel HPET الفعلي بتردد 15 ميجاهرتز، إلا أن ميزات نظام التشغيل التي كان من المفترض أن يوفرها HPET كانت موجودة بالفعل إلى حد كبير في ويندوز إكس بي، وإن كان ذلك بمواصفات مختلفة (مواصفات عام 2002 بدلًا من 2005) وبالتالي بقدرات أقل. في نظام التشغيل Windows XP SP3، يتم عادةً ربط مقاطعتي IRQ0 وIRQ8 بـ "مؤقت أحداث عالي الدقة" عند استخدام ACPI HAL (الإصدار 5.1.2600.5512)، مع العلم أن استدعاء واجهة برمجة التطبيقات QueryPerformanceFrequency يُرجع قيمةً مرتبطةً بسرعة ساعة المعالج المُصنّفة (على سبيل المثال، 2.6 جيجاهرتز) أو PMTIMER (3.579545 ميجاهرتز)، بدلاً من قيمة HPET المُحددة من Intel والبالغة 15 ميجاهرتز، والتي تُستخدم في نظام Windows Vista. يُثير هذا التناقض بعض اللبس حول المقصود بـ "HPET" في هذه الأنظمة، ولكن من الواضح أنه لا يُشير إلى جهاز Intel بتردد 15 ميجاهرتز في هذه الحالات. تجدر الإشارة إلى أن ربط مقاطعات IRQ بـ "HPET" وعلاقة الساعة غير المُعتمدة على HPET موجودان في أنظمة Intel وAMD على حدٍ سواء، سواءً تم استخدام خيار /USEPMTIMER لتجاوز إعدادات بدء التشغيل أم لا. بما أن المواصفات الأصلية لـ HPET (في عام 2002) تتطلب عدادًا عالي الدقة، والذي يتم عرضه من خلال استدعاءات واجهة برمجة التطبيقات QueryPerformanceFrequency وQueryPerformanceCounter (المتوفرة منذ Windows 2000)، فإن QueryPerformanceFrequency هي التي توضح كيفية توفير هذا العداد "عالي الدقة". تشير القيمة العالية (في نطاق 1 إلى 4 جيجاهرتز) إلى أن عداد الطابع الزمني (TSC) الخاص بوحدة المعالجة المركزية هو المصدر. كشفت وحدات المعالجة المركزية متعددة النوى المبكرة من AMD عن مشكلة في قراءات QueryPerformanceCounter المشتقة من TSC، حيث كانت تتأثر بتغيرات سرعة الطيف المنتشر وإدارة الطاقة. على الرغم من حل هذه المشكلة لاحقًا في تصميمات المعالجات اللاحقة بجعل ساعة TSC مستقلة عن ساعة وحدة المعالجة المركزية، أصبح مؤقت إدارة الطاقة (PM Timer) في أنظمة ACPI هو مصدر العداد المفضل، مما يتطلب تجاوز /USEPMTIMER في ملف BOOT.INI الخاص بنظام Windows لفرض استخدامه. في كل من أجهزة Intel و AMD التي تستخدم ACPI HAL مع مفتاح التمهيد /USEPMTIMER، ستظل مقاطعات IRQ 0 و 8 تُبلغ عن HPET، ولكن الآن سيُبلغ QueryPerformanceFrequency عن 3.579545 ميغاهرتز، وهو تردد مؤقت PMTIMER. يتميز هذا التردد بميزة فريدة، وهي استقلاليته عن تردد وحدة المعالجة المركزية، مع الحفاظ على دقة ووضوح معقولين للغاية يصلان إلى أجزاء من الميكروثانية. ومن المفارقات أن معدلات العد العالية جدًا التي تُحققها آليات TSC (مقارنةً بـ PMTIMER أو جهاز Intel HPET) قد تُسبب مشكلة تتمثل في قصر الفترات الزمنية القابلة للقياس: فهناك حد أقصى لفائدة العداد الذي يفيض مبكرًا. كما أن السرعات المتزايدة باستمرار للمعالجات الحديثة قد تُقلل من هذه الفترة الزمنية القابلة للاستخدام. لذلك، ليس من المستغرب أن تستخدم أنظمة PMTIMER و Intel HPET معدلًا ثابتًا محددًا بوضوح، مُصمم خصيصًا لإنتاج دقة في نطاق أجزاء من الميكروثانية، مما يسمح لها بالقياس لفترات أطول مما هو ممكن مع TSC. سواءً مع تفعيل خيار /PMTIMER أو بدونه، لا يمكن محاكاة جزء "الحدث" من مواصفات HPET إلا باستخدام مصدر توقيت إضافي، إذ لا يتضمن أيٌّ من حلول TSC أو PMTIMER الأساسية مكونات مادية ضمنية لتشغيل الأحداث غير الدورية كما هو موضح في المواصفات، ومع ذلك، يتوفر هذا عبر واجهة برمجة تطبيقات المؤقت في نظام التشغيل Windows XP (بأفضل دقة ممكنة تبلغ 0.9766  مللي ثانية عند استخدام استدعاءات واجهة برمجة التطبيقات timeBeginPeriod - timeEndPeriod). ولا يزال جهاز RTC يُلبي هذا الجزء من المواصفات بمساعدة البرمجيات، على الرغم من أن مدير الأجهزة يُشير إلى HPET في الموضعين IRQ0 وIRQ8.

مراجع

  1. 1 2 شركة إنتل (أكتوبر 2004)، مواصفات IA-PC HPET (مؤقتات الأحداث عالية الدقة) (المراجعة 1.0a) (ملف PDF) ، تم الاطلاع عليه بتاريخ 15-06-2012
  2. "مؤقتات الوسائط المتعددة" . مايكروسوفت. 10 ديسمبر 2007. تم الاسترجاع في 20 أكتوبر 2010 .
  3. "مواصفات IA-PC HPET (مؤقتات الأحداث عالية الدقة)" (ملف PDF) . إنتل. أكتوبر 2004. تم الاطلاع عليه بتاريخ 30 أغسطس 2022 .
  4. إرشادات لتوفير دعم مؤقت الوسائط المتعددة ، 2002-09-20 ، تم الاطلاع عليها بتاريخ 2009-11-10
  5. "صفحات دليل FreeBSD: hpet(4)" . www.freebsd.org .
  6. "الفصل 15. ختم الوقت" . Access.redhat.com. مؤرشف من الأصل بتاريخ 2016-05-07 . تم الاطلاع عليه بتاريخ 2014-02-14 .
  7. "تعطيل HPET في نواة لينكس لمعالجات إنتل كوفي ليك" . فورونيكس .
  8. 1 2 توماس غليكسنر، x86: hpet: حل لمشكلة في العتاد. رابط قديم مؤرشف بتاريخ 9 يوليو 2012 على archive.today ، تم دمج التحديث لنواة لينكس 2.6.36-rc5
  9. 1 2 ضبط الوقت في الأجهزة الافتراضية VMware (لـ VMware vSphere 5.0، وWorkstation 8.0، وFusion 4.0) مؤرشف بتاريخ 26-06-2016 في Wayback Machine ، الصفحة 9