استخدم AIO_WRITE () ولكن لا يزال يرى البيانات تمر عبر ذاكرة التخزين المؤقت؟
-
30-09-2019 - |
سؤال
ألعب مع هذا الرمز على Linux 2.6.16.46:
io.aio_fildes = open(name, O_CREAT | O_TRUNC | O_WRONLY | O_SYNC, 00300);
io.aio_buf = buffer;
io.aio_nbytes = size;
io.aio_sigevent = sigev;
io.aio_lio_opcode = LIO_WRITE;
aio_write( &io );
يجب أن يستخدم هذا الذاكرة التي أشار إليها المخزن المؤقت لعملية IO. ومع ذلك ، أرى أن عدد الصفحات القذرة يرتفع كما لو كنت أكتب إلى ذاكرة التخزين المؤقت. لماذا هذا؟
على آلة البناء ، لا يوجد دعم O_Direct في Open (). لكن بما أنني لا أستخدم الكتابة () ، فهل يجب أن يكون ذلك مشكلة؟
أنا متأكد من أن هناك دعم IO مباشر على الهدف.
المحلول
برزت هذا. IO المباشر/المخزن المؤقت هو شيء واحد ، Sync/Async هو شيء آخر. لكي تكتب Async تجنب ذاكرة التخزين المؤقت ، لا يزال هناك ما لا يزال يحتاج إلى إعطاء O_Direct للمكالمة المفتوحة () ، حتى لو لم يتم استخدام Write ().
من المحتمل أن تكون هناك أخطاء في برنامج التحويل البرمجي في البداية - اقرأ Man 2 Open بعناية.
لا تنتمي إلى StackOverflow