getcpu(2)

الاسم
getcpu - تحديد وحدة المعالجة المركزية وعقدة NUMA التي يعمل عليها الخيط المستدعي

المكتبة
مكتبة سي المعيارية (libc، -lc)

موجز
#define _GNU_SOURCE             /* انظر feature_test_macros(7) */
#include <sched.h>

int getcpu(unsigned int *_Nullable cpu, unsigned int *_Nullable node);

الوصف
استدعاء النظام getcpu() يحدد المعالج والعقدة التي يعمل عليها الخيط أو العملية المستدعية حاليًا ويكتبهما في الأعداد الصحيحة المشار إليها بواسطة الوسيطتين cpu و node. المعالج هو عدد صحيح صغير فريد يعرّف وحدة المعالجة المركزية. العقدة هي معرّف صغير فريد يعرّف عقدة NUMA. عندما تكون أي من cpu أو node NULL، لا يُكتب شيء إلى المؤشر المعني.

المعلومات الموضوعة في cpu مضمونة لتكون حديثة فقط في وقت الاستدعاء: ما لم يتم تثبيت تقارب وحدة المعالجة المركزية باستخدام sched_setaffinity(2)، قد يغير النواة وحدة المعالجة المركزية في أي وقت. (عادةً لا يحدث هذا لأن المجدول يحاول تقليل الحركات بين وحدات المعالجة المركزية للحفاظ على الخبيئات ساخنة، لكنه ممكن.) يجب على المستدعي السماح بإمكانية أن المعلومات المعادة في cpu و node لم تعد حديثة بحلول وقت عودة الاستدعاء.

قيمة الإرجاع
عند النجاح، يُعاد الرقم 0. وعند حدوث خطأ، يُعاد الرقم -1، ويُضبط errno للإشارة إلى الخطأ.

الأخطاء

EFAULT
    الوسائط تشير إلى خارج مساحة عنوان العملية المستدعية.

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

التاريخ
لينكس 2.6.19 (x86-64 و i386)، glibc 2.29.

  الاختلافات بين مكتبة C والنواة
استدعاء النظام للنواة يحتوي على وسيطة ثالثة:

int getcpu(unsigned int *cpu, unsigned int *node,
           struct getcpu_cache *tcache);

الوسيطة tcache غير مستخدمة منذ لينكس 2.6.24، ويجب (عند استدعاء استدعاء النظام مباشرة) تحديدها كـ NULL، ما لم تكن قابلية النقل إلى لينكس 2.6.23 أو إصدار أقدم مطلوبة.

في لينكس 2.6.23 والإصدارات الأقدم، إذا كانت الوسيطة tcache غير NULL، فإنها تحدد مؤشرًا إلى مخزن مخصص من قبل المستدعي في تخزين محلي للخيط يُستخدم لتوفير آلية تخزين مؤقت لـ getcpu(). استخدام الخبيئة قد يسرع استدعاءات getcpu()، على حساب وجود فرصة صغيرة جدًا بأن المعلومات المعادة قد تكون قديمة. اعتُبرت آلية التخزين المؤقت أنها تسبب مشاكل عند ترحيل الخيوط بين وحدات المعالجة المركزية، ولذا يتم تجاهل الوسيطة الآن.

ملاحظات
يبذل لينكس أقصى جهد لجعل هذا الاستدعاء بأسرع ما يمكن. (على بعض البنيات، يتم ذلك عبر تنفيذ في vdso(7).) القصد من getcpu() هو السماح للبرامج بإجراء تحسينات باستخدام بيانات لكل وحدة معالجة مركزية أو لتحسين NUMA.

انظر أيضًا
mbind(2), sched_setaffinity(2), set_mempolicy(2), sched_getcpu(3), cpuset(7), vdso(7)

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

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

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