LINUX Bolumlendirme NASIL Zeynep Dilli , dilli@compclup.ceng.metu.edu.tr v1.0 16.12.1996 Diskinizi nasil bolumleyeceginize ve bu bolumleri nerelere koyacaginiza karar verirken goz onune alinacak cesitli durumlar vardir. TAKAS ALANIM NE KADAR BUYUK OLMALI? Takas bolumlemeleri konusunda asagidaki genel kurallar vardir: 1. Linux'ta, RAM ve takas alani toplanir (Bu butun UNIX'ler icin dogru degildir). ornegin, eger 8 MB RAM'iniz ve 12 MB takas alaniniz varsa, toplam 20 MB sanal belleginiz vardir. 2. Takas alaninizin buyuklugunu belirlerken, en az 16 MB toplam sanal belleginiz olmalidir. Bu yuzden 4 MB RAM icin en azindan 12 MB'lik takas, 8 MB'lik RAM icin en azindan 8 MB'lik takas dusunun. 3. Takas alaninizin buyuklugunu belirlerken, cok fazla takas alaninin pek de ise yaramayabilecegini unutmayin. Her islemin bir "calisma kumesi" vardir. Bu, cok yakin gelecekte islemci tarafindan okunacak olan bir kume bellek-ici sayfadir. Linux bu bellek erisimlerini kestirmeye calisir (yakin gecmiste kullanilmis olan sayfalarin yakin gelecekte de kullanilacagini varsayarak) ve bu sayfalari, eger mumkunse, RAM'da tutar. Eger programin iyi bir "referans yerelligi"varsa bu varsayim dogru olacak ve Linux kestirme algoritmasi calisacaktir. Bir calisma kumesini ana bellekte tutmak yalnizca yeterli ana bellek varsa ise yarayacaktir. Eger bir makinada cok fazla sayida islem isletiyorsaniz, cekirdek (kernel) cok yakin gelecekte yeniden basvuracagi sayfalari diske koymak zorunda kalir (baska bir calisma kumesinin bir sayfasindan bir sayfa cikisi ve sonra kullanilacak sayfaya bir sayfa-girisi yaratir). Bu genellikle sayfalama etkinliginde cok agir bir artisa ve dikkate deger bir basarim (performans) dususune neden olur. Bu durumdaki bir makineye "thrashing" yapiyor denir. Thrashing bir makinada islemler asil olarak RAM'dan degil diskten calisiyorlardir. Basarimin, yaklasik olarak, bellek erisim hizinin disk erisim hizina orani kadar dusmesini bekleyin. PDP ve VAX'in gunlerinden kalma cok eski bir pratik kural, bir programin calisma kumesinin, programin sanal boyutunun yaklasik %25'i kadar olduguydu. Bu yuzden, RAM'inizin uc katindan daha fazla takas alani saglamak buyuk olasilikla yararsizdir. Ancak bunun yalnizca pratik bir kural oldugunu aklinizdan cikartmayin. Programlarin cok cok buyuk ya da cok cok kucuk calisma kumelerinin oldugu senaryolar yaratmak kolaylikla olasidir. ornegin, cok rastgele erisilen buyuk bir veri kumesi olan bir simulasyon programinin, data segment'inde neredeyse hic bir kullanma yerelligi olmayacaktir, dolayisiyla calisma kumesi oldukca buyuk olacaktir. Obur taraftan, ayni anda acik pek cok JPEG dosyasiyla calisan bir xv'un, cok buyuk bir data segment'ti olacaktir. Ama resim donusumlerinin hepsi tek bir resim uzerinde yapilir, xv'un kapladigi bellegin coguna hic dokunulmaz. Ayni sey, ayni anda yalnizca tek bir dosyanin degistirilmekte oldugu bir metin editoru icin de gecerlidir. Bu programlarin - eger dogru duzgun tasarlanmislarsa - cok yuksek bir referans yerellikleri vardir ve bunlardan buyuk parcalar, performans uzerine ciddi etkileri olmadan, takas olarak tutulabilir. Insan, komut satiri cagindan kalma %25 sayisinin, birden fazla sayida belgeyi edit eden cagdas GUI programlari icin artik dogru olmadigindan kuskulanabilir, ancak ben bu sayilari dogrulamaya calisan yeni yazilar gormedim. Boylece 16 MB RAM'i olan bir konfigurasyonda, kucuk bir konfigurasyon icin hic takasa gerek yoktur ve 48 MB'tan fazla takas buyuk olasilikla yararsizdir. Gereken kesin bellek miktari makinadaki uygulama yazilimlarina baglidir (ne bekliyordunuz? :-). TAKAS ALANIMI NEREYE KOYMALIYIM? 1. Mekanik yavas, elektronik hizlidir. Cagdas hard disk'lerin pek cok kafasi vardir. Ayni izin (track) kafalari arasindagezmek hizlidir, cunku bu is tumuyle elektroniktir. Izlerin arasinda gezinmek yavastir, cunku bu gercek dunyanin maddelerini hareket ettirmeyi gerektirir. Bu yuzden pek cok kafasi olan bir diskinizle daha az sayida kafasi olan ve diger bakimlardan tumuyle ayni olan baska bir diskiniz varsa, cok kafali disk daha hizli olacaktir. 2. Disk kafanizin takas alanina rastgele bir izden gidecegini varsayarsak, eski disklerde butun izlerde ayni sayida sektor vardir. Bu disklerde takasinizi diskinizin ortasina koymak daha hizli olacaktir. 3. Elbette disk kafaniz rastgele hareket etmeyecektir. Eger takas alaniniz bir diskin ortasinda surekli mesgul bir ev bolumlemesi (home partition) ve neredeyse hic kullanilmayan bir arsiv bolumlemesinin ortasindaysa, daha da kisa kafa hareketleri olsun diye takasiniz ev bolumlemesinin ortasinda olsaydi, daha iyi olacakti. 4. Daha yeni diskler KBK (kusak bit kayidi) kullanir. Bunlarin dis izlerde daha fazla sayida sektorleri vardir. Degismez bir donus hiziyla, bu, dis izlerde ic izlere oranla cok daha buyuk bir basarim saglar. Takasinizi hizli izlere koyun. Ozet: Takasinizi baska islerle mesgul olmayan cok kafali hizli bir diskin uzerine koyun. Eger birden fazla diskiniz varsa: Takasi parcalayin ve butun disklerinize ve hatta farkli farkli deneticilere dagitin. Daha da iyisi: Daha fazla RAM alin. DISKIMI NASIL BOLUMLEMELIYIM? 1. Disk alani, isletim sistemi tarafinda bloklar ve blok parcalari birimiyle yonetilir. ext2 dosya sisteminde, bloklar ve blok parcalari ayni boyda olmak zorundadir, dolayisiyla incelemizi bloklarla sinirlandirabiliriz. Dosyalar her boyda olurlar. Blok sinirlarinda sona ermezler. Bu yuzden her dosyada, her dosyanin son blogunun son bolumunun bir kismi bosa harcanmis olur. Dosya boyutlarinin rastgele oldugunu varsayarak, diskinizdeki her dosya icin yaklasik yarim blok bosa harcaniyordur. Diskinizdeki dosya sayisini, bir diskteki ayrilmis inodes sayisindan tahmin edebilirsiniz. Benim diskimde # df -i Filesystem Inodes IUsed IFree %IUsed Mounted on /dev/hda3 64256 12234 52022 19% / /dev/hda5 96000 43058 52942 45% /var/spool/news / dizgesinde yaklasik 12000dosya ve news dizgesinde yaklasik 44000 dosya var. 1 KB'lik bir blok boyuyla, 6+22 = 28 MB kadar disk alani, dosyalarin kuyruk bloklarinda kayboluyor. Eger blok boyumu 4 KB olarak secseydim, bunun 4 katini yitirmistim. Veri aktarimi buyuk bitisik veri parcalari icin daha hizlidir. ext2 bu yuzden buyuyen dosyalar icin onceden 8 blokluk birimlerle alan ayirmaya calisir (kullanilmayan onceden ayrilmis alanlar, dosya kapatildiginda serbest birakilirlar). Dosyalara genellikle sirayla ulasildigindan, bir dosyanin bitisik olmadan yerlestirilmesi, basarim icin kotudur. Isletim sistemini bir disk ulasiminda dallandirmaya ve disk kafasini hareket ettirmeye zorlar. Buna "dis parcalama" ya da kisaca "parcalama" denir ve bu, DOS dosya sistemlerinde yaygin bir sorundur. ext2'nin, dis parcalamadan kacinmak icin bazi taktikleri vardir. ext2 sizi buyuk dosya sistemleri icin buyuk bloklar secmeye zorlamaz (0.5 TB ve otesi buyuklugunde cok buyuk dosya sistemleri disinda, bunlarda kucuk blok boyutlari verimsizlesir). Bu yuzden, DOS'un aksine, blok boyutunu kucuk tutmak icin, buyuk diskleri cok sayida bolume ayirmaya gerek yoktur. Eger olasiysa, 1 KB'lik blok boyutunu kullanin. Bazi bolumlemeler icin 2 KB'lik bir blok boyutuyla deneyler yapmak isteyebilirsiniz, ama ender rastlanan hatalara rastlamayi bekleyin: cogu kullanici blok boyutu olarak 1KB kullanir. ext2 ile, bolumleme kararlari yedekleme de gozonune alinarak ve degisik dosya omurlerinden dogacak dis parcalamadan kacinilarak verilmelidir. 2. Dosyalarin omurleri vardir. Bir dosya yaratildiktan sonra, sistemde bir sure duracak sonra da silinecektir. Dosya omurleri sistemin bir yerinden bir yerine onemli bicimde degisir ve biraz dosyanin yol adina baglidir. ornegin, /bin, /sbin,/usr/sbin, /usr/bin ve buna benzer dizinlerdeki dosyalarin buyuk olasilikla cok uzun omurleri olacaktir. /home'daki dosyalarin orta uzunlukta bir omurleri olacaktir, /var'daki dosyalar genellikle kisa omurludur: /var/spool/news'daki hic bir dosya bir kac gunden uzun kalmaz, /var/spool/lpd'deki dosyalar omurlerini dakika ya da saniyelerle olcerler. 3. Eger gunluk yedekleme miktari tek bir yedekleme ortaminin kapasitesinden azsa, bu yedekleme icin iyi olur. Gunluk bir yedekleme, ya tam bir yedekleme ya da arttirmali yedekleme olabilir. Bolumleme boyutlarinizi, tek bir yedekleme ortamina tumuyle sigacaklari bicimde kucuk tutabilirsiniz (gunluk tam yedeklemeleri secin). Her kosulda, birbolum gunluk degisimi (butun degistirilen dosyalar) tek bir yedekleme ortamina sigacak kadar kucuk olmalidir (arttirmali yedeklemeyi secin ve yedekleme ortamini haftalik/aylik tam dokum icin degistirmeye hazir olun - kullanicinin basinda durmadigi islemler olasi degildir). Yedekleme taktiginiz bu karara baglidir. Disk alani planlar ve satin alirken, bir kenara yedekleme icin yeterli miktarda para ayirmayi unutmayin! Yedeklenmemis veri degersizdir! Hemen hemen herkes icin, veriyi yeniden olusturmanin maliyeti, yedekleme maliyetinden cok daha fazladir! 4. Basarim (performans) icin degisik omurlu dosyalari degisik bolumlerde tutmak yararlidir. Bu bicimde, news bolumundeki kisa omurlu dosyalar buyuk miktarda parcalanabilir. Bu / ya da /home bolumunun basarimini etkilemez. Yaygin bir model, /, /home ve /var bolumlerini yukarida anlatildigi gibi yaratir. Bunu kurmak ve bunun bakimini yapmak kolaydir ve bu model, degisik omurlerin ters etkilerinden kacinmak icin omurleri yeterince iyi ayirt eder. Yedekleme modeline de iyi uyar: Neredeyse kimse USENET haber gruplarini (spool) yedeklemekle ugrasmaz ve /var'daki yalniz bazi dosyalar yedeklemeye deger. (akla var/spool/mail geliyor) obur taraftan, / pek sik degismez ve istendiginde yedeklenebilir (yapilanis degisikliklerinden sonra) ve pek cok cagdas yedekleme ortamina tam bir yedekleme olarak sigacak kadar kucuktur (kurulmus yazilim miktarina gore 250'den 500 MB'ta kadar planlayin). /home degerli kullanici verileri icerir ve gunden gune yedeklenmelidir. Bazi kuruluslarin cok buyuk /home'lari vardir ve artirmali yedekleme kullanmalidirlar. Bazi sistemler /tmp'i de ayri bir bolume koyarlar, digerleri ayni etkiyi elde etmek icin bunu sanal olarak /var/tmp'e baglarlar (bunun, /var'in erisilebilir olmayacagi ve sistemin, siz bir tane yaratana ya da /var'i elle yukleyene kadar bir /tmp'sinin olmayacagi tek kullanici modunu etkileyebilecegine dikkat) ya da bunu bir RAM disketine koyarlar (ornegin Solaris bunu yapar). Bu /tmp'i /'in disinda tutar, iyi bir fikir.