استخدم AIO_WRITE () ولكن لا يزال يرى البيانات تمر عبر ذاكرة التخزين المؤقت؟

StackOverflow https://stackoverflow.com/questions/3532952

سؤال

ألعب مع هذا الرمز على 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 بعناية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top