get_mempolicy(2)

الاسم
get_mempolicy - استرداد سياسة ذاكرة NUMA لخيط

المكتبة
مكتبة سياسات NUMA (الوصول غير الموحد للذاكرة) (libnuma، -lnuma)

موجز
#include <numaif.h>

long get_mempolicy(unsigned long maxnode;
                   int *mode,
                   unsigned long nodemask[(maxnode + ULONG_WIDTH - 1)
/ ULONG_WIDTH],
                   unsigned long maxnode, void *addr,
                   unsigned long flags);

الوصف
يسترد get_mempolicy() سياسة NUMA للخيط المستدعي أو لعنوان ذاكرة، اعتمادًا على إعداد flags.

تمتلك آلة NUMA متحكمات ذاكرة مختلفة بمسافات متفاوتة عن وحدات معالجة مركزية (CPUs) محددة. تحدد سياسة الذاكرة من أي عقدة تُخَصَّص الذاكرة للخيط.

إذا تم تحديد flags كـ 0، فسيتم إرجاع معلومات حول السياسة المبدئية للخيط المستدعي (كما هو محدد بواسطة set_mempolicy(2))، في المخازن المؤقتة المشار إليها بواسطة mode و nodemask. يمكن استخدام القيمة المرجعة في هذه الوسائط لاستعادة سياسة الخيط إلى حالتها وقت استدعاء get_mempolicy() باستخدام set_mempolicy(2). عندما يكون flags هو 0، يجب تحديد addr كـ NULL.

إذا حدد flags MPOL_F_MEMS_ALLOWED (متاح منذ Linux 2.6.24)، يتم تجاهل وسيطة mode ويتم إرجاع مجموعة العقد (الذاكرات) التي يُسمح للخيط بتحديدها في الاستدعاءات اللاحقة لـ mbind(2) أو set_mempolicy(2) (في غياب أي mode flags) في nodemask. لا يُسمح بدمج MPOL_F_MEMS_ALLOWED مع أي من MPOL_F_ADDR أو MPOL_F_NODE.

إذا حدد flags MPOL_F_ADDR، فسيتم إرجاع معلومات حول السياسة التي تحكم عنوان الذاكرة المعطى في addr. قد تختلف هذه السياسة عن السياسة المبدئية للخيط إذا تم استخدام mbind(2) أو إحدى الدوال المساعدة الموصوفة في numa(3) لإنشاء سياسة لنطاق الذاكرة الذي يحتوي على addr.

إذا لم تكن وسيطة mode NULL، فسيخزن get_mempolicy() وضع السياسة وأي mode flags اختيارية لسياسة NUMA المطلوبة في الموقع المشار إليه بهذه الوسيطة. إذا لم يكن nodemask NULL، فسيتم تخزين قناع العقدة المرتبط بالسياسة في الموقع المشار إليه بهذه الوسيطة. يحدد maxnode عدد معرفات العقد التي يمكن تخزينها في nodemask—أي، أقصى معرف عقدة زائد واحد. يتم دائمًا تقريب القيمة المحددة بواسطة maxnode إلى مضاعف sizeof(unsigned long)*8.

إذا حدد flags كلاً من MPOL_F_NODE و MPOL_F_ADDR، فسيعيد get_mempolicy() معرف العقدة التي تم تخصيص العنوان addr عليها إلى الموقع المشار إليه بواسطة mode. إذا لم يتم تخصيص صفحة بعد للعنوان المحدد، فسيخصص get_mempolicy() صفحة كما لو أن الخيط أجرى وصول قراءة (تحميل) إلى ذلك العنوان، ويعيد معرف العقدة حيث تم تخصيص تلك الصفحة.

إذا حدد flags MPOL_F_NODE، ولكن ليس MPOL_F_ADDR، وكانت السياسة الحالية للخيط هي MPOL_INTERLEAVE أو MPOL_WEIGHTED_INTERLEAVE، فسيعيد get_mempolicy() في الموقع المشار إليه بواسطة وسيطة mode غير NULL، معرف العقدة التالية التي سيتم استخدامها للتداخل لصفحات kernel الداخلية المخصصة نيابة عن الخيط. تتضمن هذه التخصيصات صفحات للملفات المعينة في الذاكرة في نطاقات ذاكرة العملية المعينة باستخدام استدعاء mmap(2) مع علامة MAP_PRIVATE لوصول القراءة، وفي نطاقات الذاكرة المعينة بعلامة MAP_SHARED لجميع أنواع الوصول.

قيم العلامات الأخرى محجوزة.

للحصول على نظرة عامة على السياسات الممكنة، انظر set_mempolicy(2).

قيمة الإرجاع
عند النجاح، يعيد get_mempolicy() 0؛ عند الخطأ، يتم إرجاع -1 ويتم تعيين errno للإشارة إلى الخطأ.

الأخطاء

EFAULT
    جزء من أو كل نطاق الذاكرة المحدد بواسطة nodemask و maxnode يشير إلى خارج مساحة العناوين التي يمكنك الوصول إليها.

EINVAL
    القيمة المحددة بواسطة maxnode أقل من عدد معرفات العقد المدعومة من قبل النظام. أو حدد flags قيمًا غير MPOL_F_NODE أو MPOL_F_ADDR؛ أو حدد flags MPOL_F_ADDR وكان addr NULL، أو لم يحدد flags MPOL_F_ADDR وكان addr غير NULL. أو، حدد flags MPOL_F_NODE ولكن ليس MPOL_F_ADDR وسياسة الخيط الحالية ليست MPOL_INTERLEAVE ولا MPOL_WEIGHTED_INTERLEAVE. أو، حدد flags MPOL_F_MEMS_ALLOWED مع إما MPOL_F_ADDR أو MPOL_F_NODE. (وهناك حالات EINVAL أخرى.)

المعايير
لينكس.

التاريخ
لينكس 2.6.7.

ملاحظات
للحصول على معلومات حول دعم المكتبات، انظر numa(7).

انظر أيضًا
getcpu(2), mbind(2), mmap(2), set_mempolicy(2), numa(3), numa(7), numactl(8)

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

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

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