سؤال

لدي برنامج يتطلب الكثير من الذاكرة ، مثل 2/3 من جميع ذاكرة الوصول العشوائي المادية. بعد وقت تشغيل نظام التشغيل الخاص بي ، يبدأ نظام التشغيل في تبديل البرنامج إلى HDD. لكنني بحاجة إلى أن يستجيب البرنامج بسرعة كبيرة طوال الوقت ، لذلك أحتاج إلى منع الترحيل لهذه العملية.

كيف يمكنك منع نظام التشغيل من تبديل عملية واحدة؟

شكرا على اي مساعدة!

هل كانت مفيدة؟

المحلول

في بداية البرنامج ، اتصل:

mlockall(MCL_CURRENT | MCL_FUTURE);

(إذا لم يكن لديك المصدر للبرنامج ، فسوف يتعين عليك تفريغ العملية ptrace لفعل هذا).

انتبه إلى أن هذا سيزيد من فرص تخصيص الذاكرة التي يتم إجراؤها من قبل العملية التي تفشل.

نصائح أخرى

حسنًا ، هناك موك لقفل الذاكرة (إخبار النواة التي قد لا يتم تبديلها) ، ولكن هذا مخصص لكميات صغيرة نسبيًا من الذاكرة ، وسيتطلب تعديل البرنامج.

قد يكون الخيار الآخر هو ضبط "Swappiness" Linux ، أي ميله إلى تبديل الصفحات. يرى هنا لمناقشة مثيرة للاهتمام. هذا غير ممكن لكل عملية ، ولكن.

لست على علم بأي حل لكل عملية لمشكلتك.

استخدم MMAP () بدلاً من Malloc ، واستخدم علامة "map_locked". (يعمل على Linux> 2.5.37)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top