- يقوم جامع القمامة (GC) في لغة Go بقراءة بيانات التعريف أثناء توقفات التنفيذ المؤقتة، وإذا كانت هذه البيانات موجودة في منطقة تبديل القرص، يحدث تأخير لعدة عشرات من المللي ثانية.
- أظهرت تجربة في بيئة نواة لينكس 6.8 توقفات تصل إلى 40 مللي ثانية عند قراءة بيانات التعريف الخاصة بالـ GC المخزنة في التبديل، وكانت هذه المدة تقريباً 800 ضعف فترة التوقف الاعتيادية (الاختبار تم على سحابة Hetzner).
- يدير التبديل الصفحات بناءً على مجموعات cgroup، لذلك يمكن أن تُبدل ذاكرة عمليات أخرى مدمجة مع عملية Go أيضاً. وتم قياس توقفات GC 312 مرة خلال 30 دقيقة.
- خلافاً لتوقفات بيانات التعريف، زاد وقت معالجة الرسائل بحجم 511KiB من 3~5 مللي ثانية إلى 105 مللي ثانية على أقراص NVMe، ووصل إلى 903 مللي ثانية على تخزين الشبكة البعيد، لكن هذا أثر فقط على الجوروتين الذي ينفذ المهمة.
من اللافت كيف أن العديد من أخطاء الصفحات التي تحدث عندما تكون بيانات تعريف GC على السواب تزيد بشكل كبير من زمن توقف العالم stop-the-world. خاصة أن مدة 40 مللي ثانية تعتبر طويلة نسبيًا مقارنة بالفترات الاعتيادية لإيقاف GC، وقد تؤثر بشكل طفيف على الخدمات التي تعتمد على معالجة الشبكة أو الاستجابة في الوقت الحقيقي. أود معرفة المزيد عن الظروف التي تحدث فيها هذه الظاهرة بشكل متكرر.