تشخیص و رفع مشکل کارایی خطای صفحه با اتمیکهای Arm64
در حین اجرای یک بنچمارک مصنوعی که کش را پیشگرم میکرد، تأثیر عملکرد غیرعادی روی پردازندههای Ampere مشاهده شد. با بررسی عمیقتر، مشخص شد که خطاهای صفحه بیشتری در پردازندههای Ampere نسبت به x86 رخ میدهد.
مشکل کارایی اتمیکهای Arm64
در حین اجرای یک بنچمارک مصنوعی برای پیشگرم کردن کش، تأثیر عملکرد غیرعادی روی پردازندههای Ampere مشاهده شد. با بررسی دقیقتر، مشخص گردید که تعداد خطاهای صفحه در این پردازندهها به طور قابل توجهی بیشتر از معماری x86 است. مشکل به استفاده از دستورات اتمیک خاصی مانند ldadd مرتبط بود که در شرایط خاص باعث ایجاد دو خطای صفحه میشوند.
- دستورات اتمیک Arm64 مانند ldadd به طور منطقی باید یک عملیات تمام یا هیچ باشند
- این دستورات در واقع باعث ایجاد خطای خواندن و نوشتن جداگانه میشوند
- استفاده از صفحات بزرگ شفاف تحت تأثیر این رفتار قرار میگیرد
- فرآیند پیشگرم کردن حافظه با تکهتکه شدن صفحات بزرگ مواجه میشود
- کارایی سیستم به دلیل نگهداری TLB و تخصیص حافظه کاهش مییابد
"این دستورات اتمیک ابتدا یک خطای خواندن و سپس یک خطای نوشتن جداگانه ایجاد میکنند" "پیشگرم کردن حافظه با اتمیکها باعث 512 خطای صفحه به جای یک خطا میشود"
راهحلهای پیشنهادی شامل استفاده از system call madvise با پرچم MADV_POPULATE_WRITE و همکاری با جامعه کرنل لینوکس برای بهبود رفتار خطای صفحه است.
