.\" -*- coding: UTF-8 -*- .\" Copyright 2003-2004, Andi Kleen .\" Copyright 2003-2004, SuSE GmbH .\" Copyright 2007, Lee Schermerhorn .\" Copyright 2007, Hewlett-Packard Development Company, L.P. .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft-var .\" .\" FIXME .\" Linux 3.8 added MPOL_MF_LAZY, which needs to be documented. .\" Does it also apply for move_pages()? .\" .\" commit b24f53a0bea38b266d219ee651b22dba727c44ae .\" Author: Lee Schermerhorn .\" Date: Thu Oct 25 14:16:32 2012 +0200 .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH mbind 2 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم mbind \- تعيين سياسة الذاكرة لنطاق ذاكرة .SH المكتبة مكتبة سياسات NUMA (الوصول غير الموحد للذاكرة) (\fIlibnuma\fP،\ \fI\-lnuma\fP) .SH موجز .nf \fB#include \fP .P \fBlong mbind(\fPunsigned long size, unsigned long maxnode; \fB void \fP\fIaddr\fP\fB[\fP\fIsize\fP\fB], unsigned long \fP\fIsize\fP\fB, int \fP\fImode\fP\fB,\fP \fB const unsigned long \fP\fInodemask\fP\fB[(\fP\fImaxnode\fP\fB + ULONG_WIDTH \- 1)\fP \fB/ ULONG_WIDTH],\fP \fB unsigned long \fP\fImaxnode\fP\fB, unsigned int \fP\fIflags\fP\fB);\fP .fi .SH الوصف تضبط \fBmbind\fP() سياسة ذاكرة NUMA، التي تتكون من وضع سياسة وصفر أو أكثر من العقد، لنطاق الذاكرة الذي يبدأ بـ \fIaddr\fP ويستمر لـ \fIsize\fP بايت. تحدد سياسة الذاكرة من أي عقدة يتم تخصيص الذاكرة. .P إذا تضمن نطاق الذاكرة المحدد بواسطة وسيطتي \fIaddr\fP و \fIsize\fP منطقة ذاكرة "مجهولة"\[em]أي منطقة ذاكرة تم إنشاؤها باستخدام استدعاء النظام \fBmmap\fP(2) مع \fBMAP_ANONYMOUS\fP\[em]أو ملف معين للذاكرة، تم تعيينه باستخدام استدعاء النظام \fBmmap\fP(2) مع العلم \fBMAP_PRIVATE\fP، سيتم تخصيص الصفحات فقط وفقًا للسياسة المحددة عندما يكتب التطبيق (يخزن) إلى الصفحة. بالنسبة للمناطق المجهولة، سيستخدم الوصول الأولي للقراءة صفحة مشتركة في النواة تحتوي على أصفار. بالنسبة لملف تم تعيينه باستخدام \fBMAP_PRIVATE\fP، سيخصص الوصول الأولي للقراءة صفحات وفقًا لسياسة الذاكرة للخيط الذي يتسبب في تخصيص الصفحة. قد لا يكون هذا هو الخيط الذي استدعى \fBmbind\fP(). .P سيتم تجاهل السياسة المحددة لأي تعيينات \fBMAP_SHARED\fP في نطاق الذاكرة المحدد. بدلاً من ذلك، سيتم تخصيص الصفحات وفقًا لسياسة الذاكرة للخيط الذي تسبب في تخصيص الصفحة. مرة أخرى، قد لا يكون هذا هو الخيط الذي استدعى \fBmbind\fP(). .P إذا تضمن نطاق الذاكرة المحدد منطقة ذاكرة مشتركة تم إنشاؤها باستخدام استدعاء النظام \fBshmget\fP(2) وتم إرفاقها باستخدام استدعاء النظام \fBshmat\fP(2)، سيتم تخصيص الصفحات المخصصة للمنطقة المجهولة أو المشتركة وفقًا للسياسة المحددة، بغض النظر عن العملية التي تسببت في التخصيص للمقطع المشترك. ومع ذلك، إذا تم إنشاء منطقة الذاكرة المشتركة مع العلم \fBSHM_HUGETLB\fP، سيتم تخصيص الصفحات الضخمة وفقًا للسياسة المحددة فقط إذا كان تخصيص الصفحة ناتجًا عن العملية التي تستدعي \fBmbind\fP() لتلك المنطقة. .P افتراضيًا، يكون لـ \fBmbind\fP() تأثير فقط على التخصيصات الجديدة؛ إذا تم لمس الصفحات داخل النطاق بالفعل قبل تعيين السياسة، فلن يكون للسياسة أي تأثير. يمكن تجاوز هذا السلوك المبدئي بواسطة العلمين \fBMPOL_MF_MOVE\fP و \fBMPOL_MF_MOVE_ALL\fP الموصوفين أدناه. .P يجب أن تحدد وسيطة \fImode\fP واحدة من \fBMPOL_DEFAULT\fP، \fBMPOL_BIND\fP، \fBMPOL_INTERLEAVE\fP، \fBMPOL_WEIGHTED_INTERLEAVE\fP، \fBMPOL_PREFERRED\fP، \fBMPOL_PREFERRED_MANY\fP، أو \fBMPOL_LOCAL\fP (الموصوفة بالتفصيل أدناه). تتطلب جميع أوضاع السياسة باستثناء \fBMPOL_DEFAULT\fP من المستدعي تحديد العقدة أو العقد التي ينطبق عليها الوضع، عبر وسيطة \fInodemask\fP. .P قد يتضمن المعامل \fImode\fP أيضًا \fIعلم وضع\fP اختياري. \fIأعلام الوضع\fP المدعومة هي: .TP \fBMPOL_F_NUMA_BALANCING\fP (منذ لينكس 5.15) .\" commit bda420b985054a3badafef23807c4b4fa38a3dff .\" commit 6d2aec9e123bb9c49cb5c7fc654f25f81e688e8c عندما يكون \fImode\fP هو \fBMPOL_BIND\fP، فَعّل موازنة NUMA في النواة للمهمة إذا كانت مدعومة من النواة. إذا كان العلم غير مدعوم من النواة، أو استُخدم مع \fImode\fP غير \fBMPOL_BIND\fP، تُعاد القيمة \-1 ويُضبط \fIerrno\fP على \fBEINVAL\fP. .TP \fBMPOL_F_STATIC_NODES\fP (منذ لينكس\-2.6.26) يحدد \fInodemask\fP غير الفارغ معرفات العقد الفعلية. لا يعيد لينكس تعيين \fInodemask\fP عندما ينتقل الخيط إلى سياق cpuset مختلف، ولا عندما تتغير مجموعة العقد المسموح بها بواسطة سياق cpuset الحالي للخيط. .TP \fBMPOL_F_RELATIVE_NODES\fP (منذ لينكس\-2.6.26) يحدد \fInodemask\fP غير الفارغ معرفات عقد نسبية لمجموعة معرفات العقد المسموح بها بواسطة cpuset الحالي للخيط. .P يشير \fInodemask\fP إلى قناع بت للعقد يحتوي على ما يصل إلى \fImaxnode\fP بت. يتم تقريب حجم قناع البت إلى المضاعف التالي لـ \fIsizeof(unsigned long)\fP، لكن النواة ستستخدم البتات فقط حتى \fImaxnode\fP. تحدد قيمة NULL لـ \fInodemask\fP أو قيمة \fImaxnode\fP صفرية المجموعة الفارغة من العقد. إذا كانت قيمة \fImaxnode\fP صفرًا، يتم تجاهل وسيطة \fInodemask\fP. حيثما يكون \fInodemask\fP مطلوبًا، يجب أن يحتوي على عقدة واحدة على الأقل متصلة بالإنترنت، مسموح بها بواسطة سياق cpuset الحالي للخيط (ما لم يتم تحديد علم الوضع \fBMPOL_F_STATIC_NODES\fP)، وتحتوي على ذاكرة. .P يجب أن يتضمن المعامل \fImode\fP إحدى القيم التالية: .TP \fBMPOL_DEFAULT\fP يطلب هذا الوضع إزالة أي سياسة غير مبدئية، واستعادة السلوك المبدئي. عند تطبيقه على نطاق من الذاكرة عبر \fBmbind\fP()، يعني هذا استخدام سياسة ذاكرة الخيط، والتي قد تم تعيينها باستخدام \fBset_mempolicy\fP(2). إذا كان وضع سياسة ذاكرة الخيط هو أيضًا \fBMPOL_DEFAULT\fP، سيتم استخدام السياسة المبدئية على مستوى النظام. تخصص السياسة المبدئية على مستوى النظام الصفحات على عقدة وحدة المعالجة المركزية التي تؤدي إلى التخصيص. بالنسبة لـ \fBMPOL_DEFAULT\fP، يجب أن تحدد وسيطتا \fInodemask\fP و \fImaxnode\fP المجموعة الفارغة من العقد. .TP \fBMPOL_BIND\fP .\" commit 19770b32609b6bf97a3dece2529089494cbfc549 يحدد هذا الوضع سياسة صارمة تقيد تخصيص الذاكرة بالعقد المحددة في \fInodemask\fP. إذا حدد \fInodemask\fP أكثر من عقدة واحدة، ستأتي تخصيصات الصفحات من العقدة التي تحتوي على ذاكرة حرة كافية والأقرب إلى العقدة التي يحدث فيها التخصيص. لن يتم تخصيص الصفحات من أي عقدة غير محددة في \fInodemask\fP. (قبل لينكس 2.6.26، كانت تخصيصات الصفحات تأتي من العقدة ذات معرف العدد الأدنى أولاً، حتى لا تحتوي تلك العقدة على ذاكرة حرة. ثم تأتي التخصيصات من العقدة ذات معرف العدد الأعلى التالي المحدد في \fInodemask\fP وهكذا، حتى لا تحتوي أي من العقد المحددة على ذاكرة حرة.) .TP \fBMPOL_INTERLEAVE\fP يحدد هذا الوضع أن تخصيصات الصفحات تكون متداخلة عبر مجموعة العقد المحددة في \fInodemask\fP. يحسن هذا من عرض النطاق الترددي بدلاً من زمن الوصول عن طريق توزيع الصفحات ووصول الذاكرة إلى تلك الصفحات عبر عقد متعددة. لكي يكون فعالاً، يجب أن تكون منطقة الذاكرة كبيرة إلى حد ما، على الأقل 1 ميجابايت أو أكبر مع نمط وصول منتظم إلى حد ما. ستظل عمليات الوصول إلى صفحة واحدة من المنطقة محدودة بعرض النطاق الترددي للذاكرة لعقدة واحدة. .TP \fBMPOL_WEIGHTED_INTERLEAVE\fP (منذ لينكس 6.9) .\" commit fa3bea4e1f8202d787709b7e3654eb0a99aed758 يُبادل هذا الوضع تخصيصات الصفحات عبر العقد المحددة في \fInodemask\fP وفقًا للأوزان في \fI/sys/kernel/mm/mempolicy/weighted_interleave\fP. على سبيل المثال، إذا ضُبطت البتات 0 و2 و5 في \fInodemask\fP، وكانت محتويات \fI/sys/kernel/mm/mempolicy/weighted_interleave/node0\fP، و \fI/sys/\fP.\|.\|.\fI/node2\fP، و \fI/sys/\fP.\|.\|.\fI/node5\fP هي 4 و7 و9 على التوالي، فستُخصص الصفحات في هذه المنطقة على العقد 0 و2 و5 بنسبة 4:7:9. .TP \fBMPOL_PREFERRED\fP يحدد هذا الوضع العقدة المفضلة للتخصيص. ستحاول النواة تخصيص الصفحات من هذه العقدة أولاً والرجوع إلى العقد الأخرى إذا كانت العقدة المفضلة منخفضة في الذاكرة الحرة. إذا حدد \fInodemask\fP أكثر من معرف عقدة واحد، سيتم تحديد العقدة الأولى في القناع كعقدة مفضلة. إذا حددت وسيطتا \fInodemask\fP و \fImaxnode\fP المجموعة الفارغة، فسيتم تخصيص الذاكرة على عقدة وحدة المعالجة المركزية التي أدت إلى التخصيص. .TP \fBMPOL_PREFERRED_MANY\fP (منذ لينكس 5.15) .\" commit b27abaccf8e8b012f126da0c2a1ab32723ec8b9f يحدد مجموعة من العقد للتخصيص؛ انظر \fBset_mempolicy\fP(2). .TP \fBMPOL_LOCAL\fP (منذ لينكس 3.8) .\" commit 479e2802d09f1e18a97262c4c6f8f17ae5884bd8 .\" commit f2a07f40dbc603c15f8b06e6ec7f768af67b424f يُحدد هذا الوضع "التخصيص المحلي"؛ حيث تُخصص الذاكرة على عقدة وحدة المعالجة المركزية التي أدت إلى التخصيص ("العقدة المحلية"). يجب أن تُحدد الوسيطتان \fInodemask\fP و \fImaxnode\fP مجموعة فارغة. إذا كانت "العقدة المحلية" تعاني من نقص في الذاكرة الحرة، فستحاول النواة تخصيص ذاكرة من عقد أخرى. ستُخصص النواة ذاكرة من "العقدة المحلية" كلما توفرت ذاكرة لهذه العقدة. إذا لم يكن استخدام "العقدة المحلية" مسموحًا به ضمن سياق مجموعة المعالجات الحالي للخيط، فستحاول النواة تخصيص ذاكرة من عقد أخرى. ستُخصص النواة ذاكرة من "العقدة المحلية" كلما أصبح ذلك مسموحًا به ضمن سياق مجموعة المعالجات الحالي للخيط. في المقابل، يعود \fBMPOL_DEFAULT\fP إلى سياسة الذاكرة الخاصة بالخيط (والتي يمكن ضبطها عبر \fBset_mempolicy\fP(2))؛ وقد تكون هذه السياسة مختلفة عن "التخصيص المحلي". .P .\" According to the kernel code, the following is not true .\" --Lee Schermerhorn .\" In Linux 2.6.16 or later the kernel will also try to move pages .\" to the requested node with this flag. إذا مُرر \fBMPOL_MF_STRICT\fP في \fIflags\fP ولم يكن \fImode\fP هو \fBMPOL_DEFAULT\fP، فإن الاستدعاء يفشل مع الخطأ \fBEIO\fP إذا كانت الصفحات الموجودة في نطاق الذاكرة لا تتبع السياسة. .P إذا حُدد \fBMPOL_MF_MOVE\fP في \fIflags\fP، فستحاول النواة نقل جميع الصفحات الموجودة في نطاق الذاكرة بحيث تتبع السياسة. لن تُنقل الصفحات المشتركة مع عمليات أخرى. إذا حُدد \fBMPOL_MF_STRICT\fP أيضًا، فإن الاستدعاء يفشل مع الخطأ \fBEIO\fP إذا تعذر نقل بعض الصفحات. إذا حُددت سياسة \fBMPOL_INTERLEAVE\fP، فلن تُنقل الصفحات الموجودة بالفعل في العقد المحددة بحيث تكون متداخلة. .P .\" --------------------------------------------------------------- إذا مُرر \fBMPOL_MF_MOVE_ALL\fP في \fIflags\fP، فستحاول النواة نقل جميع الصفحات الموجودة في نطاق الذاكرة بغض النظر عما إذا كانت العمليات الأخرى تستخدم الصفحات. يجب أن يتمتع خيط المستدعي بامتياز (\fBCAP_SYS_NICE\fP) لاستخدام هذا العلم. إذا حُدد \fBMPOL_MF_STRICT\fP أيضًا، فإن الاستدعاء يفشل مع الخطأ \fBEIO\fP إذا تعذر نقل بعض الصفحات. إذا حُددت سياسة \fBMPOL_INTERLEAVE\fP، فلن تُنقل الصفحات الموجودة بالفعل في العقد المحددة بحيث تكون متداخلة. .SH "قيمة الإرجاع" .\" --------------------------------------------------------------- عند النجاح، يعيد \fBmbind\fP() القيمة 0؛ وعند حدوث خطأ، تعاد القيمة \-1 ويُضبط \fIerrno\fP ليشير إلى الخطأ. .SH الأخطاء .\" I think I got all of the error returns. --Lee Schermerhorn .TP \fBEFAULT\fP جزء أو كل نطاق الذاكرة المحدد بواسطة \fInodemask\fP و \fImaxnode\fP يشير إلى خارج مساحة العنوان القابلة للوصول. أو، كان هناك فجوة غير معيّنة في نطاق الذاكرة المحدد بواسطة \fIaddr\fP و \fIsize\fP. .TP \fBEINVAL\fP .\" As at 2.6.23, this limit is "a page worth of bits", e.g., .\" 8 * 4096 bits, assuming a 4kB page size. قيمة غير صالحة حُددت لـ \fIflags\fP أو \fImode\fP؛ أو \fIaddr + size\fP كان أقل من \fIaddr\fP؛ أو \fIaddr\fP ليس مضاعفًا لحجم صفحة النظام. أو، \fImode\fP هو \fBMPOL_DEFAULT\fP و \fInodemask\fP حدد مجموعة غير فارغة؛ أو \fImode\fP هو \fBMPOL_BIND\fP أو \fBMPOL_INTERLEAVE\fP و \fInodemask\fP فارغ. أو، \fImaxnode\fP يتجاوز حدًا تفرضه النواة. أو، \fInodemask\fP يحدد واحدًا أو أكثر من معرفات العقدة التي أكبر من الحد الأقصى لمعرف العقدة المدعوم. أو، لا شيء من معرفات العقدة المحددة بواسطة \fInodemask\fP متصل بالإنترنت ومسموح به بواسطة سياق cpuset الحالي للخيط، أو لا شيء من العقد المحددة يحتوي على ذاكرة. أو، الوسيط \fImode\fP حدد كلاً من \fBMPOL_F_STATIC_NODES\fP و \fBMPOL_F_RELATIVE_NODES\fP. .TP \fBEIO\fP حُدد \fBMPOL_MF_STRICT\fP وكانت هناك صفحة موجودة بالفعل في عقدة لا تتبع السياسة؛ أو حُدد \fBMPOL_MF_MOVE\fP أو \fBMPOL_MF_MOVE_ALL\fP وتعذرت النواة عن نقل جميع الصفحات الموجودة في النطاق. .TP \fBENOMEM\fP ذاكرة النواة المتوفرة غير كافية. .TP \fBEPERM\fP .\" --------------------------------------------------------------- تضمن المعامل \fIflags\fP العلم \fBMPOL_MF_MOVE_ALL\fP والمستدعي لا يملك امتياز \fBCAP_SYS_NICE\fP. .SH المعايير لينكس. .SH التاريخ لينكس 2.6.7. .P دعم سياسة الصفحات الضخمة أُضيف مع لينكس 2.6.16. لكي تكون سياسة التداخل فعالة على تعيينات الصفحات الضخمة، تحتاج الذاكرة المُسيّسَة إلى عشرات الميغابايت أو أكثر. .P .\" commit dcf1763546d76c372f3136c8d6b2b6e77f140cf0 قبل لينكس 5.7. \fBMPOL_MF_STRICT\fP كان يُتجاهل على تعيينات الصفحات الضخمة. .P \fBMPOL_MF_MOVE\fP و \fBMPOL_MF_MOVE_ALL\fP متاحان فقط على لينكس 2.6.16 وما بعده. .SH ملاحظات للحصول على معلومات حول دعم المكتبات، انظر \fBnuma\fP(7). .P سياسة NUMA غير مدعومة على نطاق ملف معيّن في الذاكرة تم تعيينه بالعلامة \fBMAP_SHARED\fP. .P الوضع \fBMPOL_DEFAULT\fP يمكن أن يكون له تأثيرات مختلفة لـ \fBmbind\fP() و \fBset_mempolicy\fP(2). عندما يُحدد \fBMPOL_DEFAULT\fP لـ \fBset_mempolicy\fP(2)، تعود سياسة ذاكرة الخيط إلى السياسة المبدئية للنظام أو التخصيص المحلي. عندما يُحدد \fBMPOL_DEFAULT\fP لنطاق من الذاكرة باستخدام \fBmbind\fP()، أي صفحات تُخصص لاحقًا لذلك النطاق ستستخدم سياسة ذاكرة الخيط، كما هو مضبوط بواسطة \fBset_mempolicy\fP(2). هذا يزيل فعليًا السياسة الصريحة من النطاق المحدد، "بالتراجع" إلى سياسة ربما غير مبدئية. لاختيار "تخصيص محلي" صريح لنطاق ذاكرة، حدد \fImode\fP من \fBMPOL_LOCAL\fP أو \fBMPOL_PREFERRED\fP مع مجموعة فارغة من العقد. هذه الطريقة ستعمل أيضًا لـ \fBset_mempolicy\fP(2). .SH "انظر أيضًا" \fBget_mempolicy\fP(2), \fBgetcpu\fP(2), \fBmmap\fP(2), \fBset_mempolicy\fP(2), \fBshmat\fP(2), \fBshmget\fP(2), \fBnuma\fP(3), \fBcpuset\fP(7), \fBnuma\fP(7), \fBnumactl\fP(8) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .