proc_sys_vm(5)

الاسم
/proc/sys/vm/ - النظام الفرعي للذاكرة الافتراضية

الوصف

/proc/sys/vm/
    يحتوي هذا الدليل على ملفات لضبط إدارة الذاكرة، وإدارة المخازن المؤقتة والخبيئة.

/proc/sys/vm/admin_reserve_kbytes (منذ لينكس 3.10)
    يحدد هذا الملف مقدار الذاكرة الحرة (بـ KiB) في النظام التي ينبغي حجزها للمستخدمين الذين يمتلكون القدرة CAP_SYS_ADMIN.

    القيمة المبدئية في هذا الملف هي الحد الأدنى من [3% من الصفحات الحرة، 8MiB] معبرًا عنها بـ KiB. تهدف القيمة المبدئية إلى توفير مساحة كافية للمستخدم الفائق لتسجيل الدخول وقتل عملية، إذا لزم الأمر، تحت وضع التجاوز المبدئي 'التخمين' (أي 0 في /proc/sys/vm/overcommit_memory).

    الأنظمة التي تعمل في وضع "تجاوز أبدًا" (أي 2 في /proc/sys/vm/overcommit_memory) ينبغي أن تزيد القيمة في هذا الملف لمراعاة الحجم الكامل للذاكرة الافتراضية للبرامج المستخدمة للاسترداد (مثل login(1) وssh(1) وtop(1)). وإلا، قد لا يتمكن المستخدم الفائق من تسجيل الدخول لاسترداد النظام. على سبيل المثال، على x86-64 قيمة مناسبة هي 131072 (128MiB محجوزة).

    تغيير القيمة في هذا الملف يصبح ساريًا كلما طلب تطبيق ما ذاكرة.

/proc/sys/vm/compact_memory (منذ لينكس 2.6.35)
    عند كتابة 1 إلى هذا الملف، يتم ضغط جميع المناطق بحيث تصبح الذاكرة الحرة متاحة في كتل متجاورة حيثما أمكن. يمكن رؤية تأثير هذا الإجراء بفحص /proc/buddyinfo.

    موجود فقط إذا تم تكوين النواة مع CONFIG_COMPACTION.

/proc/sys/vm/drop_caches (منذ لينكس 2.6.16)
    تؤدي الكتابة إلى هذا الملف إلى قيام النواة بإسقاط الخبيئات النظيفة، ومدخلات الدليل، وعُقد الفهرس من الذاكرة، مما يجعل تلك الذاكرة حرة. يمكن أن يكون هذا مفيدًا لاختبار إدارة الذاكرة وإجراء معايير أداء نظام الملفات قابلة للتكرار. نظرًا لأن الكتابة إلى هذا الملف تتسبب في فقدان فوائد التخزين المؤقت، فقد يؤدي ذلك إلى تدهور أداء النظام العام.

    لتحرير خبيئة الصفحات، استخدم:

        echo 1 > /proc/sys/vm/drop_caches

    لتحرير مدخلات الدليل وعُقد الفهرس، استخدم:

        echo 2 > /proc/sys/vm/drop_caches

    لتحرير خبيئة الصفحات، ومدخلات الدليل، وعُقد الفهرس، استخدم:

        echo 3 > /proc/sys/vm/drop_caches

    نظرًا لأن الكتابة إلى هذا الملف هي عملية غير مدمرة والأشياء المتسخة غير قابلة للتحرير، ينبغي على المستخدم تشغيل sync(1) أولاً.

/proc/sys/vm/hugetlb_shm_group (منذ لينكس 2.6.7)
    يحتوي هذا الملف القابل للكتابة على معرف مجموعة يُسمح له بتخصيص ذاكرة باستخدام الصفحات الضخمة. إذا كانت العملية تمتلك معرف مجموعة نظام ملفات أو أي معرف مجموعة تكميلي يطابق معرف المجموعة هذا، فيمكنها إجراء تخصيصات الصفحات الضخمة دون امتلاك القدرة CAP_IPC_LOCK؛ انظر memfd_create(2) وmmap(2) وshmget(2).

/proc/sys/vm/legacy_va_layout (منذ لينكس 2.6.9)
    إذا كانت القيمة غير صفرية، فإن هذا يعطل التخطيط الجديد لتعيين الذاكرة 32-بت؛ ستستخدم النواة التخطيط القديم (2.4) لجميع العمليات.

/proc/sys/vm/memory_failure_early_kill (منذ لينكس 2.6.32)
    يتحكم في كيفية قتل العمليات عند اكتشاف خطأ ذاكرة غير مصحح (عادة خطأ ثنائي البت في وحدة ذاكرة) لا يمكن للنواة معالجته في الخلفية بواسطة العتاد. في بعض الحالات (مثل الصفحة التي لا تزال تمتلك نسخة صالحة على القرص)، ستتعامل النواة مع الفشل بشفافية دون التأثير على أي تطبيقات. ولكن إذا لم تكن هناك نسخة أخرى محدثة من البيانات، فستقتل العمليات لمنع انتشار أي تلف في البيانات.

    يحتوي الملف على إحدى القيم التالية:

    1   يقتل جميع العمليات التي تمتلك الصفحة التالفة وغير القابلة لإعادة التحميل بمجرد اكتشاف التلف. لاحظ أن هذا غير مدعوم لعدد قليل من أنواع الصفحات، مثل البيانات المخصصة داخليًا من النواة أو خبيئة المبادلة، ولكنه يعمل لغالبية صفحات المستخدم.

    0   يفصل الصفحة التالفة من جميع العمليات ويقتل عملية فقط إذا حاولت الوصول إلى الصفحة.

    يتم القتل باستخدام إشارة SIGBUS مع تعيين si_code إلى BUS_MCEERR_AO. يمكن للعمليات معالجة هذا إذا أرادت؛ انظر sigaction(2) لمزيد من التفاصيل.

    هذه الميزة نشطة فقط على البنى/المنصات التي تحتوي على معالجة متقدمة لفحص الآلة وتعتمد على قدرات العتاد.

    يمكن للتطبيقات تجاوز إعداد memory_failure_early_kill بشكل فردي باستخدام عملية prctl(2) PR_MCE_KILL.

    موجود فقط إذا تم تكوين النواة مع CONFIG_MEMORY_FAILURE.

/proc/sys/vm/memory_failure_recovery (منذ لينكس 2.6.32)
    تمكين استرداد فشل الذاكرة (عندما تدعمه المنصة).

    1   محاولة الاسترداد.

    0   الذعر دائمًا عند فشل الذاكرة.

    موجود فقط إذا تم تكوين النواة مع CONFIG_MEMORY_FAILURE.

/proc/sys/vm/oom_dump_tasks (منذ لينكس 2.6.25)
    يفعّل إنتاج تفريغ شامل لمهام النظام (باستثناء خيوط النواة) عندما تقوم النواة بقتل OOM. يتضمن التفريغ المعلومات التالية لكل مهمة (خيط، عملية): معرف الخيط، معرف المستخدم الحقيقي، معرف مجموعة الخيوط (معرف العملية)، حجم الذاكرة الافتراضية، حجم المجموعة المقيمة، وحدة المعالجة المركزية التي تم جدولة المهمة عليها، درجة oom_adj (انظر وصف /proc/pid/oom_adj)، واسم الأمر. هذا مفيد لتحديد سبب استدعاء قاتل OOM وتحديد المهمة المارقة التي تسببت فيه.

    إذا احتوى هذا على القيمة صفر، يتم كبت هذه المعلومات. على الأنظمة الكبيرة جدًا التي تحتوي على آلاف المهام، قد لا يكون من المجدي تفريغ معلومات حالة الذاكرة لكل منها. لا ينبغي إجبار هذه الأنظمة على تحمل عقوبة أداء في حالات OOM عندما لا تكون المعلومات مرغوبًا فيها.

    إذا عُين هذا إلى قيمة غير صفرية، تُعرض هذه المعلومات كلما قام قاتل OOM بقتل مهمة تستهلك الذاكرة بالفعل.

    القيمة المبدئية هي 0.

/proc/sys/vm/oom_kill_allocating_task (منذ لينكس 2.6.24)
    هذا يفعّل أو يعطّل قتل المهمة المسببة لـ OOM في حالات نفاد الذاكرة.

    إذا عُين هذا إلى صفر، سيقوم قاتل OOM بمسح قائمة المهام بأكملها واختيار مهمة بناءً على الاستدلال لقتلها. هذا يختار عادةً مهمة مارقة تستهلك الذاكرة وتحرر كمية كبيرة من الذاكرة عند قتلها.

    إذا عُين هذا إلى قيمة غير صفرية، يقوم قاتل OOM ببساطة بقتل المهمة التي تسببت في حالة نفاد الذاكرة. هذا يتجنب مسحًا محتملاً مكلفًا لقائمة المهام.

    إذا كان /proc/sys/vm/panic_on_oom غير صفري، فإنه يأخذ الأسبقية على أي قيمة تُستخدم في /proc/sys/vm/oom_kill_allocating_task.

    القيمة المبدئية هي 0.

/proc/sys/vm/overcommit_kbytes (منذ لينكس 3.14)
    هذا الملف القابل للكتابة يوفر بديلاً لـ /proc/sys/vm/overcommit_ratio للتحكم في CommitLimit عندما يكون /proc/sys/vm/overcommit_memory بالقيمة 2. يسمح بتحديد مقدار الإفراط في الالتزام بالذاكرة كقيمة مطلقة (بالكيلوبايت)، بدلاً من النسبة المئوية، كما هو الحال مع overcommit_ratio. هذا يسمح بالتحكم الدقيق في CommitLimit على الأنظمة ذات أحجام الذاكرة الكبيرة جدًا.

    يمكن لواحد فقط من overcommit_kbytes أو overcommit_ratio أن يكون له تأثير: إذا كان overcommit_kbytes له قيمة غير صفرية، فإنه يُستخدم لحساب CommitLimit، وإلا يُستخدم overcommit_ratio. كتابة قيمة لأي من هذين الملفين يؤدي إلى تعيين القيمة في الملف الآخر إلى صفر.

/proc/sys/vm/overcommit_memory
    يحتوي هذا الملف على وضع محاسبة الذاكرة الافتراضية للنواة. القيم هي:

        0: الإفراط في الالتزام الاستدلالي (هذا هو المبدئي)
        1: الإفراط في الالتزام دائمًا، لا تفحص أبدًا
        2: الفحص دائمًا، لا تفرط في الالتزام أبدًا

    في الوضع 0، لا يتم فحص استدعاءات mmap(2) مع MAP_NORESERVE، ويكون الفحص المبدئي ضعيفًا جدًا، مما يؤدي إلى خطر تعرض عملية للقتل بواسطة OOM.

    في الوضع 1، يتظاهر النواة بوجود ذاكرة كافية دائمًا، حتى تنفد الذاكرة فعليًا. أحد حالات الاستخدام لهذا الوضع هي تطبيقات الحوسبة العلمية التي تستخدم مصفوفات كبيرة متناثرة. قبل لينكس 2.6.0، أي قيمة غير صفرية تعني الوضع 1.

    في الوضع 2 (متاح منذ لينكس 2.6)، يتم حساب إجمالي مساحة العنوان الافتراضية التي يمكن تخصيصها (CommitLimit في /proc/meminfo) كالتالي

        CommitLimit = (total_RAM - total_huge_TLB) *
        	      overcommit_ratio / 100 + total_swap

    حيث:

    •   total_RAM هو إجمالي كمية الذاكرة العشوائية في النظام؛

    •   total_huge_TLB هو كمية الذاكرة المخصصة للصفحات الضخمة؛

    •   overcommit_ratio هو القيمة في /proc/sys/vm/overcommit_ratio؛ و

    •   total_swap هو كمية مساحة المبادلة.

    على سبيل المثال، في نظام بذاكرة عشوائية فعلية 16 جيجابايت، ومبادلة 16 جيجابايت، ولا مساحة مخصصة للصفحات الضخمة، و overcommit_ratio بقيمة 50، تنتج هذه الصيغة CommitLimit بقيمة 24 جيجابايت.

    منذ لينكس 3.14، إذا كانت القيمة في /proc/sys/vm/overcommit_kbytes غير صفرية، فإن CommitLimit يُحسب بدلاً من ذلك كالتالي:

        CommitLimit = overcommit_kbytes + total_swap

    انظر أيضًا وصف /proc/sys/vm/admin_reserve_kbytes و /proc/sys/vm/user_reserve_kbytes.

/proc/sys/vm/overcommit_ratio (منذ لينكس 2.6.0)
    يحدد هذا الملف القابل للكتابة نسبة مئوية يمكن بها الإفراط في التزام الذاكرة. القيمة المبدئية في الملف هي 50. انظر وصف /proc/sys/vm/overcommit_memory.

/proc/sys/vm/panic_on_oom (منذ لينكس 2.6.18)
    يُمكّن أو يُعطّل ذعر النواة في حالة نفاد الذاكرة.

    إذا عُين هذا الملف إلى القيمة 0، فإن قاتل OOM للنواة سيقتل بعض العمليات المارقة. عادةً، يكون قاتل OOM قادرًا على قتل عملية مارقة وسيبقى النظام على قيد الحياة.

    إذا عُين هذا الملف إلى القيمة 1، فإن النواة تصاب بالذعر عادةً عند حدوث نفاد الذاكرة. ومع ذلك، إذا حددت عملية التخصيصات لعقد معينة باستخدام سياسات الذاكرة (mbind(2) MPOL_BIND) أو مجموعات المعالجات (cpuset(7)) وتلك العقد تصل إلى حالة استنفاد الذاكرة، فقد تُقتل عملية واحدة بواسطة قاتل OOM. لا يحدث ذعر في هذه الحالة: لأن ذاكرة العقد الأخرى قد تكون حرة، وهذا يعني أن النظام ككل قد لا يكون قد وصل إلى حالة نفاد الذاكرة بعد.

    إذا عُين هذا الملف إلى القيمة 2، فإن النواة تصاب بالذعر دائمًا عند حدوث حالة نفاد الذاكرة.

    القيمة المبدئية هي 0. 1 و 2 مخصصتان للتبديل الاحتياطي للتجميع. اختر إحداهما وفقًا لسياسة التبديل الاحتياطي الخاصة بك.

/proc/sys/vm/swappiness
    تتحكم القيمة في هذا الملف في مدى عدوانية النواة في مبادلة صفحات الذاكرة. القيم الأعلى تزيد العدوانية، والقيم الأقل تقللها. القيمة المبدئية هي 60.

/proc/sys/vm/user_reserve_kbytes (منذ لينكس 3.10)
    يحدد كمية من الذاكرة (بـ KiB) لاحتياطها لعمليات المستخدم. هذا يهدف إلى منع المستخدم من بدء عملية واحدة تلتهم الذاكرة، بحيث لا يمكنه التعافي (قتل العملية الملتهمة). القيمة في هذا الملف لها تأثير فقط عندما يعُين /proc/sys/vm/overcommit_memory إلى 2 (وضع "عدم الإفراط في الالتزام أبدًا"). في هذه الحالة، يحتفظ النظام بكمية من الذاكرة هي الحد الأدنى لـ [3% من حجم العملية الحالي، user_reserve_kbytes].

    القيمة المبدئية في هذا الملف هي الحد الأدنى لـ [3% من الصفحات الحرة، 128 ميجابايت] معبرًا عنها بـ KiB.

    إذا عُينت القيمة في هذا الملف إلى الصفر، فسيُسمح للمستخدم بتخصيص كل الذاكرة الحرة بعملية واحدة (مطروحًا منها الكمية المحتجزة بواسطة /proc/sys/vm/admin_reserve_kbytes). أي محاولات لاحقة لتنفيذ أمر ستؤدي إلى "fork: Cannot allocate memory".

    تغيير القيمة في هذا الملف يصبح ساريًا كلما طلب تطبيق ما ذاكرة.

/proc/sys/vm/unprivileged_userfaultfd (منذ لينكس 5.2)
    يكشف هذا الملف (القابل للكتابة) عن علم يتحكم في ما إذا كان يُسمح للعمليات غير المميزة باستخدام userfaultfd(2). إذا كانت قيمة هذا الملف 1، فقد تستخدم العمليات غير المميزة userfaultfd(2). إذا كانت قيمة هذا الملف 0، فعندئذٍ فقط العمليات التي تمتلك قدرة CAP_SYS_PTRACE قد تستخدم userfaultfd(2). القيمة المبدئية في هذا الملف هي 1.

انظر أيضًا
proc(5)، ‏proc_sys(5)

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.