الشرح المبسط
الشرح التقني المتقدم
تعد وحدة الذاكرة المضغوطة (zram)، والتي كانت تعرف سابقاً باسم (compcache)، إحدى وحدات نواة لينكس (Kernel Module) التي تتيح إنشاء جهاز كتلة (Block Device) افتراضي داخل الذاكرة العشوائية (RAM). تقوم هذه التقنية بضغط صفحات الذاكرة (Memory Pages) في الوقت الفعلي عند كتابتها إلى هذا الجهاز الافتراضي، مما يرفع السعة الفعلية للذاكرة المتاحة ويقلل بشكل جذري من عمليات الإدخال والإخراج (I/O) البطيئة على أقراص التخزين.
آلية العمل والفرق بين zram و zswap
تعتمد فكرة العمل على اقتطاع جزء ديناميكي من الذاكرة العشوائية وتعيينه كمساحة تبديل (Swap Space) ذات أولوية قصوى:
جهاز الكتلة الافتراضي: ينشئ النظام مساراً مثل /dev/zram0 لا يستهلك أي مساحة حقيقية من الذاكرة عند إنشائه، بل يتمدد فقط عند نقل البيانات إليه وضغطها بواسطة خوارزميات ضغط سريعة مثل zstd أو lz4.
الفرق الجوهري عن تقنية (zswap): تعمل تقنية zram كقرص تبديل مستقل تماماً داخل الذاكرة ولا تتطلب وجود قسم تبديل فعلي على قرص التخزين، بينما تعمل تقنية zswap كذاكرة تخزين مؤقت (Cache) أمام قرص التبديل الفعلي وتحتاج لوجوده حتماً لترحيل البيانات إليه عند الامتلاء.
إدارة وفحص zram عبر أداة zramctl
توفر حزمة أدوات النظام في لينكس أداة zramctl المخصصة لمراقبة حالة أجهزة الذاكرة المضغوطة ومعرفة نسبة الضغط الفعلي:
لعرض الأجهزة النشطة وحجم البيانات قبل وبعد الضغط:
zramctl --output NAME,ALGORITHM,DISKSIZE,DATA,COMPR,TOTAL
توضيح المخرجات التقنية للأمر:
- العمود DISKSIZE: يوضح الحجم الافتراضي الأقصى المسموح به للبيانات غير المضغوطة.
- العمود DATA: يشير إلى الحجم الأصلي للبيانات الموضوعة حالياً داخل zram قبل ضغطها.
- العمود COMPR: يعرض الحجم الفعلي للبيانات بعد ضغطها، وغالباً ما يحقق نسبة ضغط تتراوح بين 2:1 إلى 3:1.
- العمود TOTAL: يبين إجمالي استهلاك الذاكرة الفعلي شاملاً البيانات المضغوطة والبيانات الوصفية للنظام.
التفعيل اليدوي وإعداد الأولويات
لتفعيل وإعداد وحدة zram يدوياً بحجم 4 جيجابايت مع تحديد خوارزمية الضغط وتعيين أعلى أولوية تبديل:
أمر التنفيذ المتكامل:
sudo modprobe zram && sudo zramctl --find --size 4G --algorithm zstd && sudo mkswap /dev/zram0 && sudo swapon --priority 100 /dev/zram0
تحليل الخيارات والأوامر المستخدمة:
- الأمر modprobe zram: يقوم بتحميل الوحدة البرمجية داخل نواة النظام إذا لم تكن محملة مسبقاً.
- الخيار --algorithm zstd: يحدد خوارزمية الضغط، حيث توفر zstd أفضل توازن بين نسبة الضغط العالية واستهلاك المعالج (CPU)، بينما تفضل lz4 للأجهزة ذات المعالجات الضعيفة لسرعتها الفائقة.
- الخيار --priority 100: يمنح جهاز zram أولوية أعلى من أقراص التبديل التقليدية، مما يجبر النواة على استغلال الذاكرة المضغوطة بالكامل قبل اللجوء للقرص الصلب.
ملاحظة ختامية: الصورة الكبرى (نصيحة احترافية)
في التوزيعات الحديثة التي تعتمد على مدير النظام (systemd)، يفضل الاستغناء عن السكربتات اليدوية واستخدام أداة systemd-zram-generator الرسمية. ولتحقيق أقصى استفادة من وجود zram، ينصح بتعديل معامل قابلية التبديل (Swappiness) عبر تعيين القيمة vm.swappiness=180 و vm.page-cluster=0 في ملف إعدادات النواة /etc/sysctl.conf، مما يوجه النواة لاستغلال سرعة ضغط الذاكرة بكفاءة قصوى وإلغاء القراءة المسبقة غير الضرورية للذاكرة العشوائية.