سؤال

أحتاج إلى الاحتفاظ بأكبر قدر ممكن من الملفات الكبيرة في ذاكرة التخزين المؤقت لكتلة نظام التشغيل على الرغم من أنها أكبر مما يمكنني احتواؤه في ذاكرة الوصول العشوائي، وأنا أقرأ باستمرار ملفًا آخر كبيرًا جدًا.ATM سأقوم بإزالة جزء كبير من الملفات المهمة الكبيرة من ذاكرة التخزين المؤقت للنظام عندما أقرأ من ملف آخر.

هل كانت مفيدة؟

المحلول

في نظام POSIX مثل Linux أو Solaris، حاول استخدام posix_fadvise.

في ملف البث، قم بشيء مثل هذا:

posix_fadvise(fd, 0, 0, POSIX_FADV_SEQUENTIAL);
while( bytes > 0 ) {
  bytes = pread(fd, buffer, 64 * 1024, current_pos);
  current_pos += 64 * 1024;
  posix_fadvise(fd, 0, current_pos, POSIX_FADV_DONTNEED);
}

ويمكنك تطبيق POSIX_FADV_WILLNEED على ملفك الآخر، مما يؤدي إلى رفع أولوية الذاكرة الخاصة به.

الآن، أعلم أن نظامي التشغيل Windows Vista وServer 2008 يمكنهما أيضًا تنفيذ حيل رائعة فيما يتعلق بأولويات الذاكرة.من المحتمل أن الإصدارات الأقدم مثل XP يمكنها القيام بمزيد من الحيل الأساسية أيضًا.لكنني لا أعرف الوظائف الموجودة في أعلى رأسي وليس لدي الوقت للبحث عنها.

نصائح أخرى

في نظام التشغيل Linux، يمكنك تركيب نظام ملفات كنوع com.tmpfs, ، والذي يستخدم ذاكرة المبادلة المتاحة كدعم إذا لزم الأمر.يجب أن تكون قادرًا على إنشاء نظام ملفات أكبر من حجم ذاكرتك وسيعطي الأولوية لمحتويات نظام الملفات هذا في ذاكرة التخزين المؤقت للنظام.

mount -t tmpfs none /mnt/point

يرى: http://lxr.linux.no/linux/Documentation/filesystems/tmpfs.txt

يمكنك أيضًا الاستفادة من الملفات swapiness و drop_cache داخل /proc/sys/vm

إذا كنت تستخدم نظام التشغيل Windows، ففكر في فتح الملف الذي تقوم بفحصه باستخدام العلامة

FILE_FLAG_SEQUENTIAL_SCAN

يمكنك أيضًا استخدام

FILE_FLAG_NO_BUFFERING

لهذا الملف، ولكنه يفرض بعض القيود على حجم القراءة ومحاذاة المخزن المؤقت.

تحتوي بعض أنظمة التشغيل على أقراص رام يمكنك استخدامها لتخصيص جزء من ذاكرة الوصول العشوائي للتخزين ثم تثبيته كنظام ملفات.

لكن ما لا أفهمه هو سبب رغبتك في منع نظام التشغيل من تخزين الملف مؤقتًا.سؤالك الكامل لا معنى له حقًا بالنسبة لي.

قم بشراء المزيد من ذاكرة الوصول العشوائي (إنها رخيصة نسبيًا!) أو دع نظام التشغيل يقوم بعمله.أعتقد أنك ستجد أن التحايل على نظام التشغيل سيكون مشكلة أكثر مما يستحق.سيقوم نظام التشغيل بتخزين أكبر قدر ممكن من الملف حسب الحاجة، حتى يحتاج تطبيقك أو أي تطبيق آخر إلى الذاكرة.

أعتقد أنه يمكنك تقليل عدد العمليات، ولكن ربما يكون شراء المزيد من الذاكرة أسرع.

يقوم mlock() وmlockall() على التوالي بقفل جزء أو كل مساحة العنوان الافتراضية لعملية الاستدعاء في ذاكرة الوصول العشوائي (RAM)، مما يمنع ترحيل تلك الذاكرة إلى منطقة المبادلة.

(منسوخ من صفحة الدليل MLOCK(2) Linux)

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