كيفية منع الترحيل لبرنامج / عملية واحدة؟
سؤال
لدي برنامج يتطلب الكثير من الذاكرة ، مثل 2/3 من جميع ذاكرة الوصول العشوائي المادية. بعد وقت تشغيل نظام التشغيل الخاص بي ، يبدأ نظام التشغيل في تبديل البرنامج إلى HDD. لكنني بحاجة إلى أن يستجيب البرنامج بسرعة كبيرة طوال الوقت ، لذلك أحتاج إلى منع الترحيل لهذه العملية.
كيف يمكنك منع نظام التشغيل من تبديل عملية واحدة؟
شكرا على اي مساعدة!
المحلول
في بداية البرنامج ، اتصل:
mlockall(MCL_CURRENT | MCL_FUTURE);
(إذا لم يكن لديك المصدر للبرنامج ، فسوف يتعين عليك تفريغ العملية ptrace
لفعل هذا).
انتبه إلى أن هذا سيزيد من فرص تخصيص الذاكرة التي يتم إجراؤها من قبل العملية التي تفشل.
نصائح أخرى
حسنًا ، هناك موك لقفل الذاكرة (إخبار النواة التي قد لا يتم تبديلها) ، ولكن هذا مخصص لكميات صغيرة نسبيًا من الذاكرة ، وسيتطلب تعديل البرنامج.
قد يكون الخيار الآخر هو ضبط "Swappiness" Linux ، أي ميله إلى تبديل الصفحات. يرى هنا لمناقشة مثيرة للاهتمام. هذا غير ممكن لكل عملية ، ولكن.
لست على علم بأي حل لكل عملية لمشكلتك.
استخدم MMAP () بدلاً من Malloc ، واستخدم علامة "map_locked". (يعمل على Linux> 2.5.37)