أحد الأسئلة الأكثر شيوعًا مؤخرًا هو كيف تؤثر الحماية ضد Meltdown / Specter ، والآن أيضًا ضد L1TF / Foreshadow ، على أداء Linux. أضافت بداية تطوير
نواة لينكس 4.19 هذا الشهر الوقود إلى النار ليس فقط لـ x86_64 ، ولكن أيضًا لـ POWER / s390 / ARM. للحصول على فكرة عامة عن تأثير التصحيحات على الأداء ، اختبرت ثلاثة أنظمة Intel Xeon ونظامين AMD EPYC ، بالإضافة إلى جهاز افتراضي على كل جانب ، لتقييم الأداء الافتراضي لـ Linux 4.19 kernel مع أو بدون تصحيحات مقابلة.

على جميع الأجهزة ، تم تثبيت نظام مع Linux kernel 4.19-rc1 الذي تم إصداره في نهاية الأسبوع الماضي. في Intel ، تتضمن التصحيحات المقابلة عزل جدول الصفحة (PTI / KPTI) للانهيار وتصحيحات Spectre المختلفة ضد التنفيذ المضاربي للأوامر ، بما في ذلك مسح مؤشر __user ، باستخدام retpoline عبر IBPB IBRS_FW ، التصحيح الخاص بهشاشة تجاوز المخزن الانتقائي باستخدام prctl و seccomp ، و أيضا عكس PTE ومسح ذاكرة التخزين المؤقت الشرطي في الأجهزة الافتراضية - هذا هو ل L1TF / Foreshadow.
بشكل افتراضي ، لا توفر نواة Linux حماية "كاملة" من الثغرات الأمنية من خلال تعطيل دعم Intel HT / SMT ، لذا ضع ذلك في الاعتبار إذا كنت تستخدم أجهزة افتراضية وتوفر رمزًا غير موثوق به أو وصول المستخدمين إلى الجهاز الظاهري. إذا حددت الحماية الكاملة وقمت بتعطيل SMT ، فإن
التأثير على الأداء يكون ملحوظًا أكثر بكثير بسبب انخفاض عدد سلاسل العمليات المتاحة إلى النصف. يبدو أن مزودي الخدمة السحابية يقومون ببساطة بتكوين الجدولة بحيث لا تمر تدفقات SMT عبر المستخدمين. هذا يتجنب التكلفة الهائلة الواضحة لتعطيل Hyper Threading. حتى الآن نحن فقط مقارنة حماية نواة المخزون / الافتراضي.

يوفر AMD EPYC ، افتراضيًا ، الحماية فقط لنقاط الضعف المناظرة التي تهمهم: هذا هو مسح مؤشر __user لـ Spectre V1 و AMD Retpoline IBPB لـ Spectre V2 وتعطيل تجاوز المخزن المضاربة (SSBD) لـ Spectre V4.

بعد اختبار جميع التكوينات على نواة أسهم Linux 4.19-rc1 ، تكررت الاختبارات باستخدام
مفاتيح حماية مختلفة في وقت التشغيل . تم اختبار جميع الأنظمة باستخدام Ubuntu 18.04.1 LTS x86_64 مع Linux kernel 4.19-rc1 عبر Ubuntu Mainline Kernel PPA ، وأحدث رمز مصغر / BIOS ، ونظام ملفات GCC 7.3 و EXT4.

تكوينات النظام في الاختبار:
- معالج Intel Xeon E3-1280 v5 Skylake على اللوحة الأم MSI Z170A SLI PLUS ، وذاكرة DDR4 بسعة 16 جيجابايت وذاكرة SSD Toshiba RD400 NVMe بسعة 256 جيجابايت.
- Intel Xeon E5-2687W v3 Haswell على اللوحة الأم MSI X299 SLI PLUS ، 32 جيجابايت DDR4 و 80 جيجابايت إنتل 530 ساتا 3.0 SSD.
- حاملان Intel Xeon Gold 6138 Tyan 1U مع 96 غيغابايت من ذاكرة الوصول العشوائي و Samsung 970 EVO NVMe SSD 256 غيغابايت.
- آلة افتراضية KVM على خادم Xeon Gold ثنائي المعالج المذكور أعلاه. كان هذا الجهاز الافتراضي هو العملية النشطة الوحيدة على الجهاز وتم تكوينه للوصول إلى 80٪ من نوى / سلاسل وحدة المعالجة المركزية (64 سلسلة) و 48 جيجابايت من ذاكرة الوصول العشوائي وقرصًا افتراضيًا يبلغ 118 جيجابايت. أثناء الاختبار ، تم تعطيل الحماية من الضعف على كل من المضيف و VM.
- AMD EPYC 7601 على خادم Tyan 2U مع 128 جيجابايت من ذاكرة الوصول العشوائي و 280 جيجابايت من Intel Optane 900p NVMe SSD.
- الجهاز الظاهري KVM الموجود على خادم AMD EPYC 7601 المذكور أعلاه ، ولديه حق الوصول إلى 80٪ من نوى / سلاسل وحدة المعالجة المركزية (52 سلسلة) و 48 جيجابايت من ذاكرة الوصول العشوائي و 120 جيجابايت قرص افتراضي.
- خادم AMD EPYC 7551 على لوحة أم Gigabyte MZ31-AR0 مع 32 غيغابايت من ذاكرة الوصول العشوائي و Samsung 960 EVO 256GB NVMe SSD.
من الواضح أن تكوينات الأجهزة مختلفة ولا يقصد منها أن تقارن مع بعضها البعض ، وبالتحديد ، للتحقق من حماية التشغيل / الإيقاف ضد نقاط ضعف المعالجات على Linux 4.19 kernel. لذلك ، من أجل الوضوح ، يتم تطبيع جميع البيانات لأداء كل نظام. جميع الاختبارات من
Phoronix Test Suite .
بالنسبة للمقال ، تم تحديد الاختبارات ذات الصلة بـ Spectre / Meltdown ، أي مع تفاعلات الإدخال والإخراج المكثفة أو النواة. الحمل فقط على وحدة المعالجة المركزية ولا يعتمد بشكل كبير على ذاكرة التخزين المؤقت للمعالج.

من المحتمل أن يكون ملف تعريف CompileBench هو أسهل طريقة لإظهار تأثير Spectre / Meltdown. على نواة Linux 4.19 ، عند تنشيط الحماية ، تظهر معالجات Intel انخفاضًا بنسبة 7-16٪ في الأداء ، بينما تظهر معالجات AMD انخفاضًا بنسبة 3-4٪.

موقف مماثل في الاختبارات الفرعية مع قراءة شجرة مترجمة. تنخفض معالجات Intel بنسبة 14-15٪ ، بينما تنخفض معالجات AMD بنسبة 4-5٪.

في المهام الحقيقية مثل تجميع نواة لينكس ، سيكون فرق الأداء حوالي 2٪.

يعاني مؤشر جدولة Hackbench kernel أيضًا من التنشيط الأمني. في معالجات Intel ، يتم تقليل الأداء بنحو 20٪ ، باستثناء Xeon Gold. أنظمة AMD EPYC لا تحدث فرقا كبيرا.

خادم قاعدة بيانات PostgreSQL هو أحد التطبيقات الحقيقية التي عانت من تدهور الأداء بعد تثبيت الحماية على المعالجات. في هذا الاختبار بالذات ، كان الفرق بالنسبة لمعالجات Intel 5-8٪ ، و EPYC - 1٪.



برنامج حقيقي آخر مع تدهور الأداء بسبب Spectre / Meltdown هو محرر الرسوم البيانية GIMP. الفرق بالنسبة إلى Intel هو 5-10٪ ، لـ AMD - 0−2٪.

يتباطأ Redis DBMS على نظام Intel Skylake E3 v5 بنسبة 11٪ ، وعلى معالجات Intel الأخرى - بنسبة 5-7٪ ، الفرق بين أنظمة AMD EPYC هو 1-5٪.

أظهر خادم Nginx على أنظمة Xeon التي تم اختبارها على Linux 4.19 kernel اختلافًا في الأداء يصل إلى 20٪ ، وعلى AMD EPYC - من 1-2٪ إلى 6٪.

وبالمثل ، يعمل خادم الويب Apache أثناء التثبيت الافتراضي بشكل أبطأ بكثير بعد تنشيط الحماية على معالجات Intel وعمليًا بدون تغييرات على معالجات AMD.

في اختبار سرعة إنشاء ملفات OSBench ، يتباطأ النظام على Intel Xeon بنسبة 13-16٪ ، وأنظمة EPYC بنسبة 6-9٪.

يظهر اختبار إنشاء سلاسل الرسائل أيضًا اختلافًا ملحوظًا بين معالجات Intel و AMD.


عند بدء البرامج وإنشاء العمليات ، هناك اختلاف أصغر ولكن ملحوظ في العملية الافتراضية لنواة Linux 4.19 مقارنة بالحماية المعطلة.
هكذا تسير الأمور مع أداء المعالجات على نواة Linux 4.19 بعد تثبيت التصحيحات. ضع في اعتبارك أنه إذا كان نظامك (أنظمةك) مفتوحًا أمام المستخدمين / الأكواد غير الموثوق بها ، خاصة في الأجهزة الافتراضية ، فقد يلزم اتخاذ إجراءات إضافية للحماية ، مثل l1tf = ممتلئًا ، حتى تعطيل SMT / HT أو مسح إلزامي لذاكرة التخزين المؤقت L1 ، وماذا أيضًا سيقلل أداء النظام أكثر. تم وصف تأثير هذه الحماية ضد L1TF / Foreshadow بمزيد من التفصيل في
مقال سابق .
ربما في المستقبل سنجري اختبارات مماثلة على Linux 4.19 مع معالجات سطح المكتب وأحمال العمل المقابلة.