migrate_pages(2)

الاسم
migrate_pages - نقل جميع الصفحات في عملية إلى مجموعة أخرى من العقد

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

موجز
#include <numaif.h>

long migrate_pages(int pid, unsigned long maxnode,
                   const unsigned long *old_nodes,
                   const unsigned long *new_nodes);

الوصف
تحاول migrate_pages() نقل جميع صفحات العملية pid الموجودة في عقد الذاكرة old_nodes إلى عقد الذاكرة في new_nodes. لن يتم ترحيل الصفحات غير الموجودة في أي عقدة في old_nodes. بقدر الإمكان، تحافظ النواة على علاقة الطوبولوجيا النسبية داخل old_nodes أثناء الترحيل إلى new_nodes.

الوسيطان old_nodes و new_nodes هما مؤشران لأقنعة بت لأرقام العقد، مع ما يصل إلى maxnode بت في كل قناع. تُحافظ هذه الأقنعة كمصفوفات من الأعداد الصحيحة الطويلة غير الموقعة (في آخر عدد صحيح طويل، يتم تجاهل البتات التي تتجاوز تلك المحددة بواسطة maxnode). الوسيط maxnode هو أقصى رقم عقدة في قناع البت زائد واحد (هذا هو نفسه كما في mbind(2)، لكنه مختلف عن select(2)).

الوسيط pid هو معرف العملية التي سيتم نقل صفحاتها. لنقل الصفحات في عملية أخرى، يجب أن يكون المتصل متميزًا (CAP_SYS_NICE) أو يجب أن يتطابق معرف المستخدم الحقيقي أو الفعال للعملية المتصلة مع معرف المستخدم الحقيقي أو المحفوظ للعملية المستهدفة. إذا كان pid يساوي 0، فإن migrate_pages() ينقل صفحات العملية المتصلة.

سيتم نقل الصفحات المشتركة مع عملية أخرى فقط إذا كانت العملية البادئة تمتلك امتياز CAP_SYS_NICE.

قيمة الإرجاع
عند النجاح، تُرجع migrate_pages() عدد الصفحات التي لم يمكن نقلها (أي أن القيمة المرجعة صفر تعني أنه تم نقل جميع الصفحات بنجاح). عند الخطأ، تُرجع -1، وتضبط errno للإشارة إلى الخطأ.

الأخطاء

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

EINVAL
    القيمة المحددة بواسطة maxnode تتجاوز حدًا تفرضه النواة. أو، يحدد old_nodes أو new_nodes معرف عقدة واحدًا أو أكثر أكبر من أقصى معرف عقدة مدعوم. أو، لا يوجد أي من معرفات العقد المحددة بواسطة new_nodes متصلاً ومسموحًا به بواسطة سياق cpuset الحالي للعملية، أو لا تحتوي أي من العقد المحددة على ذاكرة.

EPERM
    امتياز غير كافٍ (CAP_SYS_NICE) لنقل صفحات العملية المحددة بواسطة pid، أو امتياز غير كافٍ (CAP_SYS_NICE) للوصول إلى العقد المستهدفة المحددة.

ESRCH
    لم يُعثر على عملية تطابق pid.

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

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

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

استخدم get_mempolicy(2) مع العلم MPOL_F_MEMS_ALLOWED للحصول على مجموعة العقد المسموح بها بواسطة cpuset للعملية المتصلة. لاحظ أن هذه المعلومات قابلة للتغيير في أي وقت عن طريق إعادة التشكيل اليدوي أو الآلي لـ cpuset.

قد يؤدي استخدام migrate_pages() إلى صفحات ينتهك موقعها (العقدة) سياسة الذاكرة المقررة للعناوين المحددة (انظر mbind(2)) و/أو العملية المحددة (انظر set_mempolicy(2)). أي أن سياسة الذاكرة لا تقيد العقد الوجهة المستخدمة بواسطة migrate_pages().

ترويسة <numaif.h> غير مضمنة في glibc، ولكنها تتطلب تثبيت libnuma-devel أو حزمة مماثلة.

انظر أيضًا
get_mempolicy(2)، وmbind(2)، وset_mempolicy(2)، وnuma(3)، وnuma_maps(5)، وcpuset(7)، وnuma(7)، وmigratepages(8)، وnumastat(8)

Documentation/vm/page_migration.rst في شجرة مصدر نواة لينكس

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

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

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