Pro lidi, co nemeli cas se prohrabat miliony dokumentu, je tu par tipu o swapovani (budu to psat s jednoduchym v, jesti je to spatne tak mi mailnete).
swapovani a paging je odkladani malo pouzivanych stranek v pameti na disk (O jaka novina). Stranky se vetsinou odkladaji, az kdyz neni fyzicka pamet (na rozdil od nejakeho netbsd kde se to snad dela preventivne). Starsi jadra maji horsi algoritmus swapovani (jadra 1.3.XX kde XX>40 jsou na tom o mnoho lepe s rychlosti).
swapuje se na harddisk, cim rychlejsi, tim lepsi. swapovat muzete na:
na vytvoreni partition musite spustit fdisk, vytvorit v nem prislusnou partition a nastavit ji typ na linux swap(pisu vytvorit {n} a nastavit {t}).
smrt:~# fdisk /dev/hdb Command (m for help): p Disk /dev/hdb: 64 heads, 63 sectors, 524 cylinders Units = cylinders of 4032 * 512 bytes Device Boot Begin Start End Blocks Id System /dev/hdb1 * 1 1 178 358816+ 6 DOS 16-bit >=32M /dev/hdb2 179 179 490 628992 83 Linux native /dev/hdb3 491 491 524 68544 82 Linux swap Command (m for help):Pak musite rebootnout pocitac, pac linux si pro partitions (sakra tak dlouhy slovo by chtelo makro, neznate neco kratsiho?) po startu vytvari staticke tabulky (myslim ze u primarnich partisen to neni zapotrebi). Po startu vam jadro oznami pritomnost uz zaintegrovanych (to jako ze uz je mate v /etc/fstab) swap part. takto:
17:21:54 smrt kernel: Partition check: 17:21:54 smrt kernel: hda: hda1 hda2 hda3 17:21:54 smrt kernel: hdb: hdb1 hdb2 hdb3 17:21:54 smrt kernel: hdc: hdc1 hdc2 17:21:54 smrt kernel: VFS: Mounted root (ext2 filesystem) readonly. 17:21:54 smrt kernel: Adding Swap: 68540k swap-space 17:21:54 smrt kernel: Adding Swap: 20660k swap-spaceNicmene aby to takhle fungovalo tak musite jeste zavolat mkswap na tyhle vytvorene part., protoze oznaceni ze to jsou ony je v prvnim 4kb bloku na zacatku (aby se vyhnulo katastrofam a zamenam s filesystemy). Tady pozor ! Pokud udelate
mkswap /dev/hda
tak se muzete dozajista rozloucit se svymi daty, protoze se premazne MBR hadru a jeste neco za tim. Mkswap je zatim hloupej a neumi si zanalyzovat, ze ho posilate spachat harakiri systemu. U starsich verzi systemu (prikazu mkswap nebo jadra) se jeste musela zadavat velikost (to muzete i tak). Takze ted spustite dejme tomu# mkswap /dev/hdb2
# swapon /dev/hdb2
swapon -a
(vola se nekde z /etc/rc.d/rc.S ). Ukazka z /etc/fstab :
/dev/hda3 / ext2 defaults /dev/hda1 /DOS1 msdos defaults,user,rw,umask=000 /dev/hdb1 /DOS2 msdos defaults,user,rw,umask=000 /dev/hda2 /DISK1 ext2 defaults /dev/hdb2 /DISK2 ext2 defaults /dev/scd0 /cdrom iso9660 ro,user,noauto,exec,umask=000 #/dev/hdd1 /DISK3 ext2 auto,rw,user,exec #/dev/hdc1 /DISK4 msdos auto,rw,user /dev/fd0 /A msdos user,noauto,rw,umask=000 /dev/fd1 /B msdos user,noauto,rw,umask=000 smejd:/ /SMEJD nfs user,noauto /dev/hdb3 swap swap auto #/DOS1/swapfile swap swap auto none /proc proc defaults 1 1,umask=066
soubor by nemel byt fragmentovany (v anglickem originalu si vzpominam ze je ze nesmi byt, ale tomu neverte), aby se nedegradovala vykonnost dlouhymi presuny hlavy disku. Nejlepe je vytvorit soubor prikazem dd, kteremu reknete kolik bloku (1024 bytu) to ma byt dlouhe. Snad lze dd rici i velikost v MB, ale to jiz nechavam na vas (man dd
). Ukazka vytvoreni souboru swapfile v hlavnim adresari disku:
# dd if=/dev/zero of=/swapfile bs=1024 count=10000
pro 10MB soubor.
Na tento soubor pak pustite mkswap:
# mkswap /swapfile
No a jeste mu nastavte prava -rw------- aby si nikdo nemohl precist cizi procesy (;-))
# chmod 600 /swapfile
a ted uz zase staci jen zadat # swapon /swapfile
a je to ok. Pokud chcete automaticky namountit ruzne swapfajly, tak si bud pridejte pro to radku do /etc/rc.d/rc.S, tam kde se vola swapon -a
nebo je zaradte do /etc/fstab (priklad vyse /etc/fstab).
Vytvaret swapfile jde i na dosovych discich, a jde dokonce i sdilet windouzovsky swapfile. Ja vas vsak osobne od pouziti swapfile jako jedineho (nebo prvniho) swapovaciho zarizeni zrazuji. Je to totiz silene pomale. Doporucuji udelat si jednu swapovaci part. na pokud mozno co nejrychlejsim disku a pokud mozna na jinem disku a jinem kanalu radice, nez je root filesystem. Proc?
Protoze pri swapovani se vetsinou do pameti natahuje program, ten se nahrava z nejakeho namounteneho filesystemu (vetsinou /), dynamicky se linkuje, a pri tom chce pamet. Takze se vyhazuji nepotrebne stranky ven. No a pokud tohle vsechno jede najednou na jednom jedinem disku, tak se hlavicky muzou zblaznit. Takze je lepsi mit dva disky, jeden pro linux a druhy treba pro dos a na nem jeste mit swap part. pro linux. Pokud jsou tyto disky kazdy na jinem kontroleru (tedy ne fyzicky dva kontrolery, mysleno primarni a sekundarni radic u IDE nebo IDE/SCSI) ktere kazdy pouziva jine IRQ, probiha swapovani hladce. Uplne nejlepsich vykonu lze dosahnout nastavenim unmask irq flagu u disku programem hdparm, nastavenim write cache disku, sector multicount aspon 4 a je to.
Pokud by nekdo mel extra naroky na rychlost swapovani, tak lze pouzitim dvou a vice swappartisen na ruznych discich docilit toho, ze linux bude pouzivat obe najednou a to s pomerem priorit zadanych v /etc/fstab:
/dev/hdb1 swap swap defaults,pri=1
/dev/hda2 swap swap defaults,pri=1
Dnes jsou ceny pevnych disku relativne priznive, takze si muzete dovolit obetovat i desitky MB na sw. part. Nicmene z principu se muze stat, ze i tato hranice nebude stacit. Muzete treba delat a otevirat hodne oken a nezavirat je za sebou, coz za chvili tu vasi swapovaci part. zaplni. Budou v ni sice mrtva data (zadne prehazovani RAM-DISK), ale stale bude potreba swap mista. Toto lze resit tak, ze si spustite demona, jez bude sam podle volne pameti pridavat a ubirat 'swapfajly'. Tento demon se jmenuje swapd a uz ani nevim, kde jsem ho vyhrabal ( je na tsx-11.mit.edu). Pracuje tak, ze kazdych n sekund kontroluje (doporucuji 1 nebo 2), zda je volno <dolni hranice> pameti. Pokud ne, tak prida v zadanem adresari soubor o velikosti <co mu pri startu zadate> a ceka, az se velikost volne pameti po eventualnim odebrani posledniho swapfile zvysi na <horni hranice> volne pameti. Tady je lsm toho programu:
Begin3 Title: swapd Version: 1.3 Entered-date: 21May95 Description: swapd is a daemon that will create swap files on the fly to cope with peak VM demands. Keywords: swap, deamon, VM, /dev Author: Nick HollowayJa ho spoustim z /etc/rc.d/rc.local , ale muze to byt lepsi z /etc/rc.d/rc.S. Vypis rc.local:Maintained-by: Primary-site: tsx-11.mit.edu /pub/linux/sources/sbin 6751 swapd-1.3.tar.gz Platform: Linux Copying-policy: Freely redistributable End
#! /bin/sh # Put any local setup commands in here # Running gpm echo Setting volume /usr/bin/setmixer vol 40 echo "Running gpm..." gpm -t ms & #echo NASTAVUJU swapfile #/sbin/swapon /DOS2/swapfile echo Nastavuju rychlost klavesnice na 30,250 /sbin/kbdrate -r 30 -d 250 /bin/setserial /dev/ttyS1 spd_vhi #nastav multiple 32 sektoru, lookahead on a mwordDMA3(16.6) /sbin/hdparm -S 0 -k 1 -K 1 -a 32 -A 1 -m 32 -u 1 -W 1 -X 34 -Z /dev/hdb /sbin/hdparm -S 0 -k 1 -K 1 -a 2 -A 1 -m 4 -u 1 -W 0 -X 34 -Z /dev/hda # -a 32 - readahead sect count #green vypinani monitoru /sbin/green_set ON #blanking 15 minut /bin/setterm -blank 15 #start dynamicke swapovani echo "Adding dynamic swapfile" /sbin/swapd -d / -i 2 -s 6M -l 4M -u 6M #cdrom echo Mounting cdrom under /cdrom /bin/cdr #echo Starting httpd #/usr/sbin/httpdVsimnete si v tom bordelu toho prvniho zvyrazneneho - je to relikt z dob, kdy jsem jeste swapoval na dos fat-radoby-filesystem. Bylo to opravdu na umreni.
BTW, existuje prikaz swapoff ktery vypina ("odmontovava") swapy (napriklad volan jako swapoff -a
pri shutdownu).
No a uplne na zaver, i kdyz by to melo byt na zacatku, odhady velikosti swapovacich zarizeni. Pokud mate 4MB RAM, tak bude pocitac docela hodne chrastit diskem. Pak neni treba mit vice nez 10-16 MB swapu. Pokud mate 8, pak se da s rozumne rychlym diskem jet i X-windows (ty novejsi jsou trosku tucnejsi :) . Pokud mate 16 MB pameti, tak vam porad doporucuji mit 16-20 MB swap. No a pokud mate 32 MB jako ja a stejny styl prace "okno sem, okno tam, kdypak to asi pozaviram?" tak si tech 70 MB jako ja tady klidne muzete udelat (pravda, jednou jsem jich zaplnil skoro 38 :-) . Jestli mate malo mista, tak bych mozna doporucil udelat staticky swap trosku mensi (mozna polovicni nez tu doporucuji) a k tomu spustit swapd.
Jestli jste si nekdy mysleli "No dneska mam 8MB RAM + 8MB SWAP a zitra si koupim dalsich 8MB RAM, tak ten swap zrusim", tak jste na omylu. To co tu doporucuji pro ruzne vybavene pocitace neberte absolutne. Ne vsichni delaji se svymi milacky totez. Ono totiz jakmile zvetsite pamet v pocitadle, hnedka objevite aplikaci, ktera ji celou sezere a bude chtit jeste vic :)
Pro lidi se sanema (jako manzelkama) co nemaj prachy na ramku:
nove verze jadra (2.0.XXneco) maji moznost zkompilovat ovladace jako moduly (nic noveho) ale maji i demona, ktery tyto ovladace sam za behu pripojuje k jadru jak jsou potreba. To setri velice pamet v pripadech, ze potrebujete obluhovat mnoho ruznych zarizeni, ale ne vsechny najednou (ethernet,ppp,slip,cdrom,ovladace filesystemu etc.).