io_uring

io_uring [ a ] هي واجهة استدعاء نظام نواة لينكس لعمليات الإدخال/الإخراج غير المتزامنة لأجهزة التخزين . تعالج هذه الواجهة مشكلات الأداء المتعلقة بالواجهات المماثلة التي توفرها دوال مثل / أو / للعمليات على البيانات التي يتم الوصول إليها بواسطة واصفات الملفات . [ 2 ] [ 3 ] : 2read()write()aio_read()aio_write()

واجهة المستخدم

يعمل هذا النظام عن طريق إنشاء مخزنين مؤقتين دائريين ، يُطلق عليهما "حلقات الانتظار"، لتتبع إرسال طلبات الإدخال/الإخراج وإتمامها، على التوالي. بالنسبة لأجهزة التخزين، يُطلق عليهما طابور الإرسال (SQ) وطابور الإتمام (CQ). [ 4 ] يُسهم إبقاء هذين المخزنين المؤقتين مشتركين بين النواة والتطبيق في تحسين أداء الإدخال/الإخراج من خلال إلغاء الحاجة إلى إصدار استدعاءات نظام إضافية ومكلفة لنسخ هذين المخزنين المؤقتين بينهما. [ 2 ] [ 4 ] [ 5 ] وفقًا لورقة تصميم io_uring، فإن مخزن الإرسال (SQ) قابل للكتابة فقط بواسطة التطبيقات المستهلكة، بينما مخزن الإتمام (CQ) قابل للكتابة فقط بواسطة النواة. [ 2 ] : 3

يمكن دمج eBPF مع io_uring. [ 6 ]

تاريخ

يدعم نواة لينكس الإدخال/الإخراج غير المتزامن منذ الإصدار 2.5، إلا أنه كان يُعتبر صعب الاستخدام وغير فعال. [ 7 ] كانت واجهة برمجة التطبيقات القديمة هذه تدعم حالات استخدام محددة فقط ، [ 8 ] ولا سيما أنها لا تُفعّل التشغيل غير المتزامن إلا عند استخدام علامة O_DIRECT وعند الوصول إلى ملفات مُخصصة مسبقًا. هذا يمنع استخدام ذاكرة التخزين المؤقت للصفحات ، كما يُعرّض التطبيق لدلالات O_DIRECT المعقدة. كذلك، لا يدعم الإدخال/الإخراج غير المتزامن في لينكس المقابس، لذا لا يمكن استخدامه لدمج عمليات الإدخال/الإخراج عبر الشبكة والقرص. [ 9 ]

تم اعتماد واجهة نواة io_uring في نواة لينكس الإصدار 5.1 (2019) لمعالجة أوجه القصور في نظام الإدخال/الإخراج المتكامل (AIO) في لينكس. [ 2 ] [ 5 ] [ 10 ] توفر مكتبة liburing واجهة برمجة تطبيقات (API) للتفاعل بسهولة مع واجهة النواة من مساحة المستخدم . [ 2 ] : 12

حماية

في يونيو 2023، أفاد فريق أمن جوجل أن 60% من الثغرات الأمنية المُبلغ عنها لبرنامج مكافآت اكتشاف الثغرات في عام 2022 كانت استغلالًا لثغرات io_uring. ونتيجةً لذلك، io_uringتم تعطيل هذه الميزة لتطبيقات أندرويد ، وتعطيلها تمامًا في نظام التشغيل ChromeOS وخوادم جوجل. [ 11 ] كما تم تعطيل Docker أيضًا من ملف تعريف seccompio_uring الافتراضي . [ 12 ]

ملحوظات

مراجع

  1. ^ اكسبو، ينس . "@axboe@fosstodon.org" .
  2. 1 2 3 4 5 "نواة لينكس تُحسّن أداء الإدخال/الإخراج من خلال استخدام io_uring" . فورونيكس . 14 فبراير 2019. تاريخ الاسترجاع: 14 مارس 2021 .
  3. أكسوبو، ينس (15 أكتوبر 2019). "إدخال/إخراج فعال باستخدام io_uring" (ملف PDF) . مؤرشف من الأصل في 10 أكتوبر 2025. تم الاطلاع عليه في 9 نوفمبر 2025 .{{cite web}}: CS1 maint: bot: حالة عنوان URL الأصلي غير معروفة ( رابط )
  4. 1 2 "التجربة العملية مع io_uring باستخدام Go" . developers.mattermost.com . تم الاطلاع عليه بتاريخ 2021-11-20 .
  5. 1 2 كوربيت، جوناثان (24 يناير 2020). "النمو السريع لـ io_uring [ LWN.net ] " . lwn.net . تم الاسترجاع في 20 نوفمبر 2021 .
  6. كوربيت، جوناثان (4 مارس 2021). "BPF يلتقي io_uring [ LWN.net ] " . LWN.net . تم الاسترجاع في 17 أبريل 2023 .
  7. كوربيت، جوناثان (15 يناير 2019). "إطلاق واجهة برمجة تطبيقات جديدة للإدخال/الإخراج غير المتزامن" . LWN.net . تم الاطلاع عليه بتاريخ 14 مارس 2021 .
  8. "ما الجديد في io_uring" (ملف PDF) . مؤرشف من الأصل بتاريخ 2022-06-01 . تم الاطلاع عليه بتاريخ 2022-06-01 .{{cite web}}: CS1 maint: bot: حالة عنوان URL الأصلي غير معروفة ( رابط )
  9. "الإدخال/الإخراج غير المتزامن في لينكس" . 21-04-2014. مؤرشف من الأصل في 06-04-2015 . تم الاطلاع عليه في 16-06-2023 . يحدث حظر أثناء استدعاء io_submit على نظام الملفات ext4، في العمليات المخزنة مؤقتًا، والوصول إلى الشبكة، والأنابيب، وما إلى ذلك. بعض العمليات غير ممثلة بشكل جيد بواسطة واجهة AIO. مع العمليات غير المدعومة تمامًا مثل عمليات القراءة المخزنة مؤقتًا، والعمليات على مقبس أو أنابيب، سيتم تنفيذ العملية بأكملها أثناء استدعاء النظام io_submit، مع إمكانية الوصول الفوري إلى الإكمال باستخدام io_getevents. يتم دعم الوصول إلى ملف في نظام ملفات مثل ext4 جزئيًا: إذا كانت قراءة البيانات الوصفية مطلوبة للبحث عن كتلة البيانات (أي إذا لم تكن البيانات الوصفية موجودة بالفعل في الذاكرة)، فسيتوقف استدعاء io_submit عند قراءة البيانات الوصفية. بعض أنواع عمليات الكتابة التي تؤدي إلى تكبير الملفات غير مدعومة تمامًا وتتسبب في توقف العملية طوال مدتها.
  10. "عمليات إدخال/إخراج أسرع عبر io_uring" . وصفات النواة 2019. مؤرشف من الأصل بتاريخ 24-04-2025 . تم الاسترجاع بتاريخ 24-04-2025 .
  11. كوتشكا، تاماس. "دروس مستفادة من 42 ثغرة أمنية في نواة لينكس تم تقديمها في مسابقة kCTF VRP" . مدونة جوجل للأمن الإلكتروني . جوجل. مؤرشف من الأصل بتاريخ 22 سبتمبر 2024. تم الاطلاع عليه بتاريخ 14 يونيو 2023. 60% من الثغرات الأمنية المقدمة استغلت مكون io_uring في نواة لينكس .
  12. "تحديث ملف تعريف RuntimeDefault seccomp لمنع استدعاءات النظام المتعلقة بـ io_uring بواسطة vinayakankugoyal · طلب سحب رقم 9320 · containerd/containerd" . GitHub . 2023-11-02. مؤرشف من الأصل في 2024-01-06 . تم الاسترجاع في 2024-10-20 .