يمكن أن يكون للطريقة التي ابتكرها مستخدمي YouTube وموظفو Google والباحث الأمني LaurieWired آثار كبيرة على عدد قليل جدًا من حالات الاستخدام المحددة وأحمال العمل الحساسة للغاية لـ “زمن الوصول الخلفي” أو زمن الوصول إلى الذاكرة في أسوأ الحالات تقريبًا. يُطلق على المشروع اسم TailSlayer، ويعمل بشكل أساسي على تعزيز الوصول إلى الذاكرة لتجنب الوقوع في أكشاك تحديث DRAM.
دون التعمق بشكل كامل، فإن نوع الذاكرة التي نستخدمها جميعًا، DRAM، له جانب سلبي خطير: يجب تحديثه باستمرار. الخلايا التي يخزن فيها DRAM بياناته هي في الأساس مكثفات صغيرة، وهي شديدة التسرب حسب تصميمها، لذلك يتعين علينا زيادة الشحن فيها باستمرار للتأكد من احتفاظها ببياناتها. يُعرف هذا باسم تحديث DRAM. تحدث دورة التحديث بمعدل يختلف بشكل كبير اعتمادًا على النظام ونوع DRAM المعني، ولكن بشكل عام سيحدث ذلك بفاصل زمني يتم قياسه بالميكروثانية، مما يعني أن ذاكرتك يتم تحديثها مئات المرات في الوقت الذي يستغرقه وميضك.
الآن، لا يتم إجراء تحديثات DRAM بشكل متزامن مع عمليات الوصول إلى الذاكرة. ولهذا السبب، من الممكن تمامًا أن يحاول نظامك الوصول إلى الذاكرة التي يتم تحديثها حاليًا. إذا حدث ذلك، يتوقف الطلب ببساطة حتى تنتهي دورة التحديث. يمكن أن يتسبب هذا في توقف يصل إلى مئات النانو ثانية، وهو وقت ليس طويلًا بالقيمة المطلقة، ولكن بسرعات الرقائق الحديثة، حتى التوقف الذي يبلغ 200 نانو ثانية يمكن أن يكون ألف دورة حيث لا ينجز نواة وحدة المعالجة المركزية أي عمل.
يستمر المقال أدناه
هذه ليست مشكلة كبيرة بالنسبة لمعظم حالات الاستخدام لأن لدينا جميع أنواع الاستراتيجيات المعمول بها للتعامل مع الأكشاك مثل هذه؛ هذه المشكلة معروفة منذ ستينيات القرن الماضي عندما تم اختراع ذاكرة الوصول العشوائي الديناميكية (DRAM)، لذلك من الطبيعي أن يقوم مئات الأشخاص الأذكياء جدًا بوضع عبقريتهم في العمل على تطوير الحلول البديلة. ومع ذلك، فإن بعض أعباء العمل المحددة جدًا تكون حساسة للغاية لزمن وصول الذاكرة غير الحتمي، وتعد أكشاك دورة تحديث DRAM هذه مصدرًا رئيسيًا لهذا النوع من السلوك بالضبط.
إذن ماذا يمكنك أن تفعل؟ قررت LaurieWired معالجة هذه المشكلة لأسباب لم تشرحها بشكل كامل أبدًا، ولكنها ربما تتلخص في “أنها كانت مثيرة للاهتمام”، نظرًا لعملها الآخر. تتضمن أفكارها الأولية محاولة التنبؤ بتحديثات DRAM والمزامنة حولها، لكن هذا مستحيل تمامًا لعدة أسباب تشرحها في الفيديو الخاص بها. كانت فكرتها التالية هي التوازي، ولكن تم إحباطها بسبب ذاكرة التخزين المؤقت لوحدة المعالجة المركزية وإعادة ترتيب المخازن المؤقتة – وهي ميزات وحدة المعالجة المركزية التي تتجنب المشكلة إلى حد كبير في المقام الأول.
كان إنجازها عندما أدركت أنها لا تحتاج بالضرورة إلى القيام بكل هذا على نواة وحدة المعالجة المركزية واحدة. في النهاية، ما فعلته هو اختيار تكرار مجموعة العمل بالكامل عبر حدود معالجة الذاكرة، مما يضمن وجود كل نسخة على قناة ذاكرة فعلية مختلفة مع سلوك توقيت مستقل، ثم تشغيل عملياتها في وقت واحد على مركزين مختلفين لوحدة المعالجة المركزية مع وصول كل منهما إلى قناة ذاكرة مختلفة. بعد ذلك، يمكنها ببساطة السماح لهم بالتسابق للانتهاء والحصول على نتيجة الشخص الذي أنهى أولاً؛ إذا وصل أحد النواة إلى الفاصل الزمني لتحديث DRAM، فإن احتمالية حدوث ذلك للنواة الأخرى أيضًا منخفضة جدًا. وقد أتاحت لها هذه الطريقة تقليل زمن الوصول إلى ذاكرة الوصول العشوائي الديناميكية (DRAM) على نظام سطح المكتب Ryzen للمستهلك الخاص بها بأكثر من النصف، وهو أمر ضخم.
من خلال استئجار وقت الخادم على مثيلات Amazon AWS، تمكنت من الاختبار على أجهزة خادم AMD وIntel وArm المتطورة. لقد تمكنت من تحقيق نتائج أكبر بكثير على هذه الأجهزة لعدة أسباب: لديها معدلات ساعة وحدة المعالجة المركزية أبطأ وذاكرة أبطأ، ولديها أيضًا توقيتات ذاكرة أكثر تحفظًا، مما يعني أن الأكشاك أسوأ من حيث الأداء. لكن الاختلاف الحقيقي يكمن في عدد قنوات الذاكرة المتوفرة. يحتوي معالج EPYC Turin على حوالي اثنتي عشرة قناة ذاكرة، ومن خلال تنفيذ استراتيجيتها هناك، والتحوط عبر جميع القنوات الاثنتي عشرة، تمكنت من تقليل زمن وصول الذاكرة (زمن الاستجابة الخلفي) تقريبًا في أسوأ الحالات بنسبة مذهلة بلغت 89%.
حقق المتسلل الذكي نتائج أفضل على أجهزة Intel وArm. في معالجات Intel Xeon من عائلات Sapphire Rapids وDiamond Rapids، تمكنت من تحقيق مكاسب تصل إلى 93.3%، أو بعبارة أخرى، خفضت زمن وصول الذاكرة إلى 99.99 دولارًا من 1697 نانو ثانية إلى 113 نانو ثانية. وبالنظر إلى أن أدنى قيمة على الرسم البياني هي حوالي 105ns، فهذا يعني أن Xeon تمكن من تحقيق زمن استجابة محدد للذاكرة بشكل لا يصدق.
لقد قلت عدة مرات أن “أعباء عمل معينة” تستفيد من TailSlayer. المكان الأكثر وضوحًا حيث تكون الحتمية في زمن وصول الذاكرة أمرًا بالغ الأهمية هو عالم التداول عالي التردد (HFT) السخيف قليلاً. إذا لم تكن مألوفًا، تخيل مجموعة من الخوارزميات المليئة بالكافيين في مباراة قفص حيث يكون الفائز هو من يمكنه شراء أو بيع سهم قبل أي شخص آخر ببضعة ميكروثانية. تنفق شركات HFT مبالغ فاحشة من المال على خوادم موجودة بجوار محرك البورصة المطابق مباشرةً، مما يقلل من أجزاء النانو ثانية باستخدام أجهزة مخصصة، وروابط الموجات الدقيقة بدلاً من الألياف الضوئية، والتعليمات البرمجية المُحسَّنة بشكل مهووس لدرجة أنها ستجعل المعلم الديمقراطي يحمر خجلاً.
تعمل هذه الأنظمة بتفاوتات صارمة لدرجة أنه إذا تم الوصول إلى الذاكرة في دورة تحديث DRAM، فمن المحتمل أن يتم تفويت الفرصة، مما قد يكلف الشركة ملايين الدولارات. ولهذا السبب، فإن عالم HFT هو المكان الأكثر وضوحًا حيث يمكن نشر مثل هذه التكنولوجيا، وهو تقريبًا أحد الأماكن الوحيدة التي يكون فيها ذلك منطقيًا. هناك أعباء عمل أخرى تستفيد من القضاء على أكشاك تحديث DRAM بالتأكيد؛ خدمات صغيرة عالية QPS، ومحركات مطابقة، وهياكل تصنيف في الوقت الفعلي، وأي شيء يستخدم قوائم انتظار متزامنة، وحتى أجهزة محاكاة أو خوادم ألعاب، خاصة تلك التي تعمل بمستوى عالٍ من الدقة.
ستكون مشكلة استخدام TailSlayer للعديد من أعباء العمل هذه واضحة بالفعل للعديد منكم الذين يقرؤون هذا، والأهم من ذلك أن طريقة Laurie تتطلب تكرارًا كاملاً لمجموعة عمل التطبيق لكل قناة ذاكرة تقوم بالتحوط عبرها. أنت تستبدل سعة الذاكرة ونوى وحدة المعالجة المركزية بحتمية زمن الوصول، حيث يؤدي ذلك إلى مضاعفة متطلبات الذاكرة بشكل فعال لأي تطبيق معين بعامل عدد عمليات التحوط التي ترغب في إجرائها. بالنسبة لبعض المهام – مثل HFT مرة أخرى – تكون متطلبات الذاكرة الفعلية متواضعة جدًا، وبالتالي فإن قبول زيادة في استخدام الذاكرة بمقدار اثني عشر ضعفًا مقابل انخفاض بمقدار 15 × في زمن وصول الذاكرة p99.99 أمر منطقي. بالنسبة لمعظم أعباء العمل، لا يحدث ذلك.
شاهد
بالطبع، تعترف LaurieWired بذلك في مقطع الفيديو الذي تبلغ مدته 54 دقيقة والذي يتحدث عن هذه التقنية. بشكل عام، على الرغم من أنها (أمر مفهوم!) سعيدة جدًا بتوصلها إلى TailSlayer، إلا أنها أيضًا صريحة تمامًا بشأن فائدتها المحدودة نسبيًا. يتعمق مقطع الفيديو الخاص بها بشكل كبير حول البحث الذي كان عليها القيام به، بما في ذلك الهندسة العكسية لسلوك تخليط الذاكرة غير الموثق، بالإضافة إلى ابتكار طريقة لجعل الطريقة تعمل على وحدات المعالجة المركزية المستندة إلى Graviton Arm من Amazon، نظرًا لأنها لا تكشف عن نفس مستوى عدادات الأجهزة التي تفعلها وحدات المعالجة المركزية x86-64. يوصى بشدة بالمشاهدة إذا كنت مهتمًا بالموضوع. وبدلاً من ذلك، يمكنك التوجه إلى مستودع GitHub الخاص بها للتحقق من الكود التجريبي بنفسك.
يتبع أجهزة توم على أخبار جوجل، أو أضفنا كمصدر مفضل، للحصول على آخر الأخبار والتحليلات والمراجعات في خلاصاتك.

التعليقات