Swap — operativ xotira yetishmaganda yoki kam ishlatilayotgan sahifalarni RAMdan diskka ko‘chirish uchun operatsion tizim foydalanadigan saqlash maydoni.
Swap alohida partition yoki fayl ko‘rinishida bo‘lishi mumkin.
Disk RAMdan ancha sekin. Swap xotirani kengaytirishga yordam beradi, lekin faol workload swapga ko‘p murojaat qilsa performance keskin pasayadi.
Virtual memory
Process virtual address space’dan foydalanadi.
Kernel virtual sahifalarni:
bilan bog‘laydi.
Process sahifa qayerda saqlanayotganini bevosita bilmaydi.
Swap partition
Diskda alohida partition swap turi bilan formatlanadi.
Afzalliklari:
- oddiy;
- filesystemga bog‘liq emas;
- oldindan ajratilgan;
- hibernation uchun qulay bo‘lishi mumkin.
Hajmni o‘zgartirish partition layoutni o‘zgartirishni talab qilishi mumkin.
Swap file
Filesystem ichidagi oddiy ko‘rinadigan maxsus fayl.
Afzalliklari:
- yaratish oson;
- hajmni o‘zgartirish qulay;
- alohida partition talab qilmaydi.
Filesystem va kernel swap file extentsini to‘g‘ri qo‘llashi kerak.
Page out
Kernel kam ishlatilgan anonymous memory sahifalarini swapga yozadi.
Misollar:
File-backed clean page swapga yozilmasligi mumkin, chunki uni original fayldan qayta o‘qish mumkin.
Page in
Process swapdagi sahifaga murojaat qilsa page fault yuz beradi.
Kernel diskdan sahifani RAMga o‘qiydi.
Bu major page fault bo‘lib, katta latencyga ega.
Swapping va paging
Tarixiy “swapping” butun processni diskka ko‘chirishni anglatgan.
Zamonaviy tizimlar ko‘pincha alohida sahifalarni page out qiladi.
Amaliy suhbatda ikkisi ko‘pincha bir xil atama bilan aytiladi.
Swappiness
Linux swappiness parametri kernelning anonymous memoryni swap qilish va file cache’ni qisqartirish orasidagi moyilligiga ta’sir qiladi.
Yuqori qiymat swapni erta ishlatishi mumkin.
Past qiymat swapni faqat keskin memory bosimida ishlatishga intiladi.
Bu “swap foizi” emas.
File cache
RAM faqat process xotirasi uchun emas, disk fayllarini cache qilish uchun ham ishlatiladi.
Kernel kam ishlatilgan anonymous sahifani swapga chiqarib, ko‘p kerak bo‘ladigan file cache uchun RAM qoldirishi mumkin.
Swap ishlatilishi har doim muammo degani emas.
Thrashing
Tizim ko‘p sahifani swapga chiqarib, darhol qayta o‘qisa thrashing yuz beradi.
Belgilar:
- disk doim band;
- CPU utilization past;
- application juda sekin;
- page-in/page-out yuqori;
- latency keskin.
Sabab — active working set RAMga sig‘maydi.
OOM killer
Swap va RAM tugasa kernel yangi memory ajrata olmaydi.
Linux OOM killer bir yoki bir nechta processni tanlab tugatishi mumkin.
Tanlov:
- memory sarfi;
oom_score;- privilege;
- adjustment;
- cgroup
ga bog‘liq.
Swap OOMni kechiktiradi, lekin cheksiz xotira bermaydi.
Hibernation
Hibernationda RAM holati diskka yoziladi va tizim quvvatdan uziladi.
Resume paytida image qayta RAMga yuklanadi.
Swap maydoni RAM image’ni sig‘dirishi va bootloader/kernel resume locationni bilishi kerak.
Compression sabab aniq hajm talabi platformaga bog‘liq.
Encryption
Swapda process xotirasidagi maxfiy ma’lumot qolishi mumkin.
Himoya:
- full-disk encryption;
- encrypted swap;
- har boot random key;
- hibernation talabiga mos persistent key.
Random keyli swapdan hibernation resume qilib bo‘lmaydi.
SSD
SSD swap HDDdan tezroq, lekin RAMdan baribir ancha sekin.
Ko‘p swap write SSD wear’ga ta’sir qiladi, ammo zamonaviy SSD endurance va controller wear levelingga ega.
Thrashingni SSD bilan yashirish o‘rniga RAM va workload tuzatiladi.
zswap
zswap swapga yozilishidan oldin sahifani RAMdagi compressed cache’da saqlaydi.
Afzalligi:
- disk I/O kamayadi;
- compressible sahifa tez qaytadi.
Compressed cache ham RAM ishlatadi.
zram
zram RAM ichida compressed block device yaratadi.
U swap sifatida ishlatilishi mumkin.
Disk I/O yo‘q, ammo CPU compression va RAM sarfi mavjud.
Kam RAMli qurilma va desktoplarda foydali bo‘lishi mumkin.
Swap priority
Bir nechta swap device priorityga ega.
Kernel yuqori priority’ni oldin ishlatadi yoki bir xil prioritydagi qurilmalarga taqsimlashi mumkin.
Tez NVMe va sekin disk uchun priority farqlanadi.
Container va cgroup
Container host swapidan foydalanishi mumkin, ammo cgroup memory va swap limitlari alohida sozlanadi.
Container ichidagi free host yoki namespace ma’lumotini ko‘rsatishi mumkin.
Memory limitdan oshsa container OOM bo‘lishi mumkin, hostda bo‘sh RAM bo‘lsa ham.
Monitoring
Muhim metrikalar:
- swap total va used;
- swap in;
- swap out;
- major page fault;
- memory pressure;
- disk latency;
- OOM;
- per-process swap.
Faqat used swap soniga qarab xulosa qilinmaydi. Aktiv page I/O muhim.
Diagnostika
Tizim sekinlashganda:
- available memory;
- working set;
- swap-in/out tezligi;
- disk utilization;
- major fault;
- cgroup limit;
- OOM log;
- memory leak;
- swappiness
tekshiriladi.
Swapni o‘chirib qo‘yish muammoni hal qilmasdan OOMni tezlashtirishi mumkin.
Swapni yoqish va o‘chirish
Swap maydoni formatlanib, swapon orqali faollashtiriladi. Doimiy konfiguratsiya boot jadvaliga qo‘shiladi.
swapoff barcha ishlatilayotgan sahifalarni RAMga qaytarishga urinadi. Yetarli RAM bo‘lmasa amal xato qiladi yoki tizim kuchli memory bosimiga tushadi.
Katta swapni production vaqtida birdan o‘chirishdan oldin faol usage va available memory tekshiriladi.
Per-process swap
Umumiy swap ishlatilishi qaysi process sabab bo‘lganini to‘liq ko‘rsatmaydi. Process memory mappinglari yoki monitoring vositasi har processning swapdagi sahifalarini hisoblaydi.
Uzoq vaqt uxlayotgan process swapda bo‘lishi normal. Doimiy faol service sahifalari swap-in qilinsa latency oshadi.
Database
Database ko‘pincha o‘z cache va memory boshqaruviga ega. Kuchli swap query latency’sini beqaror qiladi.
Memory limit, shared buffer va OS page cache birgalikda rejalashtiriladi. Swapni butunlay o‘chirishdan oldin OOM xavfi baholanadi.
Bog‘liq tushunchalar
Virtual memory, Paging, Page fault, RAM, Swap file, Swap partition, Thrashing, OOM killer, zswap, zram