هذا هو الاستمرار المنطقي لمنهجية قياس الأداء ، والتي يتم تطبيقها هذه المرة على مقياس محدد. للحصول على تفاصيل حول بنية وظائف Edge لدينا، راجع مقالتنا الأساسية حولبنية Rust لـ Aurabaseأو مقارنتنا Wasmtime vs Wasmer للتعرف على الاختلافات المعمارية بين وقتي التشغيل.
الأساسيات
تضيف البداية الباردة لـ WebAssembly عدة مراحل (التحميل، أو الالتزام، أو الترجمة، أو الارتباط، أو إنشاء مثيل، أو الاستدعاء الأول) ولا يمكن مقارنة الشكلين اللذين لا يتضمنان نفس المراحل، حتى لو كانا يعرضان نفس الوحدة. يقوم Wasmer بتسويق Instaboot كاستجابة تسويقية مباشرة للموضوع، ولكن لم يتم تضمين شخصياته العامة هنا دون منهجية مفصلة. تقوم Aurabase بتشغيل الإصدار 43 من wasmtime باعتباره تبعية إنتاج لوظائف Edge الخاصة بها (تم التحقق منها في aura-functions/Cargo.toml)، ولكنها لم تنشر أي معايير بداية باردة قابلة للتكرار حتى الآن. لا توجد أرقام Aurabase مذكورة في هذه المقالة: الطريقة هي الموضوع.
لماذا أصبحت البداية الباردة لـ WebAssembly مرة أخرى حجة تسويقية متنازع عليها
أصبحت البداية الباردة مرة أخرى محورًا للتمييز التجاري بين أوقات تشغيل WebAssembly، وليست مجرد موضوع للبحث الأكاديمي. يجعل Wasmer هذه نقطة بيع واضحة من خلال ميزة تسمى Instaboot، والتي يتم تقديمها كإجابة مباشرة لمشكلة التمهيد البارد.
هذا الانعكاس يذكرنا تمامًا بالديناميكية الموثقة بالفعل في مقالتنا حول منهجية قياس الواجهة الخلفية : يعرض العديد من البائعين المتنافسين أرقام الأداء على صفحة منتجاتهم الخاصة، دون تحديد البروتوكول الذي أنتجها دائمًا. رقم البداية الباردة بدون طريقة لا يثبت شيئًا أكثر من رقم الكمون بدون طريقة.
رقم البداية الباردة المنشور على صفحة التسويق، بدون مادة، بدون عبء عمل وبدون تعريف واضح لنقطة البداية ونقطة النهاية للقياس، لا يمكن تمييزه عن الشعار. وينطبق هذا على جميع أوقات التشغيل المذكورة في هذه المقالة، بما في ذلك Aurabase في يوم إصدار الرقم.
ما هي البداية الباردة التي تقيسها في الواقع، ولماذا يغير التعريف كل شيء
البداية الباردة ليست عملية واحدة: إنها مجموع مراحل متميزة، ولا يقوم الموردان بالضرورة بقياس نفس المراحل تحت نفس الاسم.
| جاري التحميل | استرداد وحدة .wasm: الشبكة أو القرص أو الموجودة بالفعل في الذاكرة |
|---|---|
| التحقق من الصحة | التحقق من بنية رمز بايت WebAssembly قبل التنفيذ |
| تجميع أو ربط | JIT سريعًا (Cranelift، LLVM) أو ربط قطعة أثرية مجمعة مسبقًا (AOT) |
| إنشاء مثيل | تخصيص الذاكرة الخطية والجداول والمجموعات العالمية وتنفيذ وظيفة البدء المحتملة |
| المكالمة الأولى | معالجة الطلب نفسه، أحيانًا يكون متضمنًا في الرقم المعلن، وأحيانًا مستبعدًا |
الشكل الذي يحسب فقط إنشاء وحدة نمطية تم تحميلها بالفعل وتم تجميعها بالفعل في الذاكرة سيبدو ميكانيكيًا أفضل من الشكل الذي يتضمن تحميل الشبكة وتجميعها. وكلاهما ليس خطأ في حد ذاته: وتظهر المشكلة عندما نقارنهما دون تحديد أي منهما تم قياسه.
ما الذي تظهره الأدبيات الأكاديمية، ولماذا لا تتم مقارنة أرقامها مع بعضها البعض
قام العمل الأكاديمي المنشور كطبعة أولية على arXiv في السنوات الأخيرة بقياس وقت إنشاء وحدات WebAssembly في أوقات تشغيل مختلفة. النقطة المشتركة بين هذه الأعمال ليست رقمًا متقاربًا: بل هناك فرق كبير اعتمادًا على وقت التشغيل الذي تم اختباره وحجم الوحدة والأجهزة المستخدمة.
نحن طوعًا لا ندرج أي أرقام دقيقة مأخوذة من هذه المنشورات في هذه المقالة. ومن دون إجراء فحص دقيق لمنهجية كل ورقة بحثية في وقت كتابة هذا التقرير، فإن إعادة نشر رقم معزول من شأنه أن يعيد إنتاج المشكلة التي توثقها هذه المقالة بالضبط: رقم بدون سياق يسمح لنا بمعرفة ما يقيسه بالفعل.
من ناحية أخرى، فإن ما يتعلمه هذا التباين مفيد بشكل مباشر: تعتمد البداية الباردة بشدة على سياق القياس، تمامًا كما يشير إلى نظام تكافؤ البيئة الموضح في مقالتنا المنهجية العامة (أجهزة متطابقة، نفس المنطقة، نفس حالة ذاكرة التخزين المؤقت لجميع الأنظمة التي تمت مقارنتها).
Wasmtime، Wasmer، WasmEdge: أولويات التجميع المختلفة
أوقات تشغيل WebAssembly الثلاثة المستقلة التي تم ذكرها في هذا النقاش لا توازن بين سرعة التجميع وأداء التنفيذ بنفس الطريقة، وهو ما يفسر جزئيًا سبب عدم مقارنة أرقام البداية الباردة الخاصة بها من مصطلح إلى آخر.
| واسمتايم | الواجهة الخلفية لتجميع Cranelift، مع وجود مسار تجميع مسبق محتمل تاريخيًا قبل النشر | يُستخدم في الإنتاج بواسطة Aurabase لوظائف Edge |
|---|---|---|
| واسمر | قام بتوثيق العديد من الواجهات الخلفية القابلة للتبديل منذ فترة طويلة، بما في ذلك الواجهة الخلفية المصممة لسرعة الترجمة بدلاً من أداء وقت التشغيل | Markets Instaboot، إعادة التشغيل عن طريق لقطة لمثيل تمت تهيئته بالفعل |
| WasmEdge | ركز الموقف العام على البداية السريعة، مع حجتها التنافسية الخاصة | وقت التشغيل البديل نشط أيضًا في مجال التسويق هذا |
يتم توثيق هذه البنى علنًا بواسطة المشاريع نفسها. لم نقم بإعادة التحقق منها إصدارًا تلو الآخر لهذه المقالة، ولا تشكل تصنيفًا للأداء. إنها تشرح فقط لماذا يمكن أن تكون أرقام البداية الباردة الثلاثة المعروضة في ثلاثة أوقات تشغيل مختلفة دقيقة ولكنها غير قابلة للمقارنة مع بعضها البعض.
للحصول على التفاصيل المعمارية الكاملة بين وقتي التشغيل اللذين غالبًا ما يتعارضان في المناقشات التي لا تحتوي على خادم، راجع المقارنة المخصصة لدينا Wasmtime vs Wasmer.
ما يعرضه Instaboot، وما لا تثبته صفحة المنتج الخاصة به وحدها
وفقًا لوضع المنتج الذي يعلنه Wasmer علنًا، يستعيد Instaboot مثيلًا تمت تهيئته بالفعل بواسطة آلية لقطة، بدلاً من إعادة بدء التشغيل بالكامل مع كل طلب. إنه اختيار معماري حقيقي يتوافق مع المشكلة التي يستهدفها.
لكن ما لا تفعله هذه المقالة هو تكرار رقم الأداء المعروض على صفحة منتج Wasmer. وبدون معرفة الأجهزة وعبء العمل وبروتوكول القياس الذي أنتج هذا الرقم، فإن إعادة نشره ستؤدي إلى ارتكاب الخطأ الموثق أعلاه تمامًا: التعامل مع رقم التسويق كنتيجة مرجعية مستقلة.
لقد تم بالفعل تداول رقم مثل "البداية الباردة أقل من 1 مللي ثانية" علنًا، بما في ذلك محتوى Aurabase السابق، دون دعمه بمعيار قياسي قابل للتكرار. يتم التعامل معه الآن داخليًا على أنه غير مدعوم. تنطبق نفس القاعدة على أي رقم يتم عرضه في وقت تشغيل منافس، بما في ذلك Instaboot، طالما لا تصاحبه منهجية مفصلة.
ما يمكن أن تقوله Aurabase اليوم عن بدايتها الباردة، وما لا يمكنها قوله
تقوم Aurabase بتشغيل وظائف Edge الخاصة بها على Wasmtime في مرحلة الإنتاج، وليس في مشروع تجريبي. إليك بالضبط ما يسمح به التسجيل، وأين تنتهي هذه المطالبة.
تم الإعلان عن التبعية بشكل صارم، مع تنشيط الميزات async وcranelift، في تبعيات الإنتاج للخدمة، وليس في dev-dependency ولا تعليق:
ما لا يقوله هذا الملف: لا توجد أرقام بداية باردة تم قياسها وفقًا للبروتوكول الموضح في منهجية قياس الأداء اليوم في المستودع الخاص بوقت التشغيل هذا. وإلى أن يتم نشر قياس مؤرخ، مع نسب مئوية مفصلة، والأجهزة وعبء العمل، لا ينبغي الاستشهاد بأي رقم Aurabase كخاصية تم قياسها للمنتج. للتعرف على البنية العامة للمنصة، راجع مقالتنا الأساسية بنية Aurabase Rust. للحصول على مقارنة ملموسة بين حاوية البداية الباردة WASM وحاوية البداية الباردة، بغض النظر عن السؤال المنهجي المطروح هنا، راجع مقالتنا المخصصة حاويات WASM vs.
كيفية قراءة رقم البداية الباردة قبل أن تصدقه
سبعة أسئلة يجب طرحها على أي شخصية بداية باردة، بما في ذلك سؤالنا في اليوم الذي نصدر فيه واحدًا.
- ما هي المراحل المضمنة؟ تحميل الشبكة، والتحقق من الصحة، والتجميع، وإنشاء مثيل، والاتصال الأول: الرقم الذي يحسب جزءًا منه فقط لا يمكن مقارنته بالرقم الذي يحصيها جميعًا.
- هل كانت الوحدة "باردة" حقًا؟ الوحدة النمطية الموجودة بالفعل في الذاكرة أو ذاكرة التخزين المؤقت على القرص لا تختبر نفس الشيء الذي تختبره الوحدة التي تم تحميلها لأول مرة.
- تجميع JIT أو قطعة أثرية مجمعة مسبقًا (AOT)؟ لكل من الاستراتيجيتين تكاليف بدء تشغيل مختلفة من الناحية الهيكلية.
- رقم واحد أم توزيع؟ أفضل تشغيل خلال عشرة ليس له نفس قيمة p95 في ألف تشغيل.
- المعدات والمنطقة المحددة؟ لا يمكن لجهة خارجية إعادة إنتاج الشكل الذي لا يحتوي على مواصفات الأجهزة.
- مقارنة عند التحميل المتساوي والطوبولوجيا؟ تؤدي مقارنة وقت تشغيل مستضاف ذاتيًا بخدمة مُدارة دون الإبلاغ عنها إلى تشويه القراءة.
- تاريخ وإصدار وقت التشغيل الذي تم اختباره؟ رقم غير مؤرخ لمشروع يتطور بسرعة لا يعني شيئًا بعد بضعة أشهر.
الأسئلة الشائعة
تم الاستشهاد بالمصادر الخارجية: وثائق المنتج العام Wasmer (Instaboot)، وثائق المشروع العام Wasmtime (Bytecode Alliance)، التي تمت استشارتها أثناء التحضير لهذه المقالة، دون التحقق المزدوج المستقل من أرقام الأداء التي تعرضها.