Geçen gün yeni açılan Yalı listesindeki swap performansı sorusu ilgimi çekti. Konuyla ilgili biraz araştırma yaptıktan ve gerekli yazılımları belirledikten sonra test için kardeşlerin güç kaynağı arızalı kasalarına yeni bir tane alarak el koydum. :) Odadaki bilgisayar popülasyonu iyice artınca kendime bir de KVM aldım.

Aynı disk üzerinde swap’in dosya olması ya da disk üzerinde bir bölüm olması arasında bir performans farkı var mıdır? Kernel açısından lkml de aynı soruyu soran Mike Richards’ı Andrew Morton cevaplamış. Cevapta ilgimi çeken kernel’ın swapon sistem çağrısında dosya sistemi üzerinde bulunan disk bloklarını map’leyerek erişim esnasında bir daha artık dosya sistemi ve caching kodlarına uğramadan diske direk erişmesi. Dosya sistemi üzerinde olduğunda bu da bir yavaşlık sebebi olur diye düşünüyordum.

Disk’e hda1′de sistem, hda3′de swap olarak yapılandıracak şekilde Pardus Alpha kurdum ve init=/bin/bash mem=128M parametreleri ile açılışı yaptım. Test için sürekli hafıza isteğinde bulunan ve buraya yazıp, okuyarak makinayı swap’e itecek bir program gerekiyordu. Lkml’ye zamanında gönderilen böyle bir test programı buldum, bende ilk test için bunu kullandım. Program fiziksel ve swap alanının boyutunu hesaplayıp, buraya ürettiği rasgele verileri yazarak okuma yapıyor. Disk bölümü ve dosya sistemi üzerindeki swap alanlarının her biri için üçer test yaptım. 85 MB sonrası swap alanını kullanmaya başlıyor:

swap dosya sistemi üzerinde:

./swaptest: physical RAM size 128.00 MB
reading pages of data in sequential order - iteration loop count: 1
1 iterations: 32.00 MB in 0.010 seconds =3166.53 MB/sec
1 iterations: 85.34 MB in 0.027 seconds =3163.28 MB/sec
1 iterations: 128.00 MB in 6.385 seconds = 20.05 MB/sec
1 iterations: 192.01 MB in 16.655 seconds = 11.53 MB/sec
1 iterations: 256.01 MB in 28.164 seconds = 9.09 MB/sec

swap disk bölümünde:

./swaptest: physical RAM size 128.00 MB
reading pages of data in sequential order - iteration loop count: 1
1 iterations: 32.00 MB in 0.010 seconds =3155.60 MB/sec
1 iterations: 85.34 MB in 0.027 seconds =3158.02 MB/sec
1 iterations: 128.00 MB in 7.204 seconds = 17.77 MB/sec
1 iterations: 192.01 MB in 17.843 seconds = 10.76 MB/sec
1 iterations: 256.01 MB in 31.191 seconds = 8.21 MB/sec

Buradaki ilginç sonuç. Dosya sistemindeki swap’den okuma hızının daha fazla olması. Bunun sebebi de hda3′ün diskin sonunda olmasından kaynaklanıyor. Eski disklerde tüm tracklerdeki sektör yoğunluğu karmaşık bir mekanizma gerektireceğinden sabitmiş fakat kapasite arttırımı için daha kompleks yapılara gidilmiş. Geliştirilen tekniğe Zoned Bit Recording deniyor. Bu tekniğin disk performansı üzerindeki etkisine ilişkin daha bilimsel bir çalışma mevcut. Buradan da görüldüğü gibi Table 2 de zone lar arttıkça performans da düşüyor. Buradaki adjMB/sec disk’in gerçek bantgenişliği. MB/sec ise dosya sistemi ve disk cache’i nin etkileriyle görülen bantgenişliği. Her şekilde performans düşüyor.

İkinci test interaktivite testi: bu hız farkı kullanıcıyı nasıl etkileyecek. Bu testi asıl çift disk ile farklı disklerdeki swap alanlarının performansını karşılaştırmak için yapmak isterdim, çünkü ilk testten görüldüğü gibi aynı disk üzerinde pek bir şey farketmeyeceği belliydi fakat aynı özelliklerde ikinci bir diskim de yoktu.
Bu test için en uygun program Con Kolivas’ın harika interbench‘i idi. Con Kolivas çok ilginç bir adam, programlama bilgisi kendi deyimiyle neredeyse /dev/zero kadar iken hazırladığı benchmark araçları ve çekirdek yamaları ile interaktivite konusunda bayağı bilinen bir isim oldu.

Interbench X, audio, video ve oyun oynanması sırasında kullanılan işlemci ve disk kullanımlarını akıllıca simule eden ve bu ihtiyaçlarının yine simule edilen yükler ile ne şekilde karşılanabildiğini test eden bir araç. Örneğin tipik bir video oynatıcısı saniyede 60 defa işlemciye gidip %40 ‘ını kullanır, ses için ise 50 ms de bir işlemciye %5 yük gelir gibi varsayımlarda bulunulmuş. Interbench de her bir yük için bu varsayımları gerçekleştiren thread lerden oluşuyor. Var olan yüklerin birleşiminden de farklı yükler oluşturulabiliyor. Örneğin okuma, yazma ve cd’ye yazma yük simusyonları ile derleme yükü oluşuyor. Burada işlemci kullanımını cd yazma yükü simule ediyor.

Aslında interbench çekirdek içerisinde yapılan iyileştirmelerin ne derece etkili olduğunu farklı çekirdek versiyonları üzerinde çalıştırılarak incelemeye yarayan bir araç. Sonuçta karşılaştıracak bir şey gerekiyor. Bu durumda nasıl kullanabilirim diye düşündüm. Interbench’de memload isminde bir yük mevcut. Bu test hafıza swap’e zorlandığı durumda yukarıda bahsedilen yükleri nasıl etkilediğini test ediyor. Fakat memload dışında makinada başka bir iş yapılmadığından bu testin swaptest ten pek bir farkı olmadığını düşündüm. Normal bir kullanıcı hafıza yükü esnasında bir çok iş yapıyor. Bunun için memload, read ve audio yüklerini birleştiren desktop diye bir yük oluşturdum. (Audio sonradan farkettim asıl yüklerden biri olduğu için ilginç oldu tabi :) memload, read ve burn daha uygun olabilirdi. Ama daha fazla zaman kaybetmek istemedim. Önemli eklenti read idi.)

İşte sonuçlar:

swap dosya sistemi üzerinde:

Benchmarking kernel 2.6.12-pardus-2 at datestamp 200511201500


--- Benchmarking simulated cpu of Audio in the presence of simulated ---
Load Latency +/- SD (ms) Max Latency % Desired CPU % Deadlines Met
Desktop 0.02 +/- 0.0491------1.04--------100------------100


--- Benchmarking simulated cpu of Video in the presence of simulated ---
Load Latency +/- SD (ms) Max Latency % Desired CPU % Deadlines Met
Desktop 0.113 +/- 0.474------16.7--------100------------99.9


--- Benchmarking simulated cpu of X in the presence of simulated ---
Load Latency +/- SD (ms) Max Latency % Desired CPU % Deadlines Met
Desktop 0.317 +/- 1.35------7--------92.3------------88.9


--- Benchmarking simulated cpu of Gaming in the presence of simulated ---
Load Latency +/- SD (ms) Max Latency % Desired CPU
Desktop 37.6 +/- 42.8------81.9--------72.7

swap disk bölümünde:

Benchmarking kernel 2.6.12-pardus-2 at datestamp 200511201520

--- Benchmarking simulated cpu of Audio in the presence of simulated ---
Load Latency +/- SD (ms) Max Latency % Desired CPU % Deadlines Met
Desktop 0.019 +/- 0.0597------1.39--------100------------100


--- Benchmarking simulated cpu of Video in the presence of simulated ---
Load Latency +/- SD (ms) Max Latency % Desired CPU % Deadlines Met
Desktop 0.7 +/- 2.25------19.3--------100------------98.8


--- Benchmarking simulated cpu of X in the presence of simulated ---
Load Latency +/- SD (ms) Max Latency % Desired CPU % Deadlines Met
Desktop 0.28 +/- 1.28------8--------91.7------------89


--- Benchmarking simulated cpu of Gaming in the presence of simulated ---
Load Latency +/- SD (ms) Max Latency % Desired CPU
Desktop 37.8 +/- 41.5------75.8--------72.6

Bu test beni hayal kırıklığına uğrattı. Aynı yapılandırmada dahi yaptığım testler farklı yapılandırma testlerindeki (dosya ya da disk bölümü) farklara yakın oynamalar gösterdi. :( Burada farklı processlerin işlemci istemesi ve işlemciyi elde ettikleri zaman arasındaki fark ölçülüyor ve istatiğe dökülüyor. Latency ortalama, max latency en fazla ne kadar geciktiğini, SD (standard deviation) toplanan tüm gecikme örneklerinin ortalama gecikmeye ne kadar yakın olduğunu gösteriyor. Yani SD yüksek ise tüm gecikme örnekleri dağınık ve ortalamadan uzak, düşük ise ortalamaya yakın anlamında. Deadlines met yüksek ise gecikme fazla ve ihtiyaca cevap veremediğini gösteriyor, Desired cpu da isteğe rağmen elde edilebilen cpu zamanı. Deadlines met düşük ise ses ve görüntüde atlamalar, X de takılmalar meydana geliyor.

Dediğim gibi, bu testi aynı özelliklere sahip farklı diskler ile swap alanı diğer diskte iken interbench ile yazma/okuma, burn ve memload testlerini aynı anda denemek isterdim. Bir diske yazdığı esnada diğer diske de memload ile swap alanına yazma aynı disk üzerinde bu işlemleri yapmaktan ne kadar farklı olur acaba. Ve interbench ile bu fark gözükebilecek mi? Test işi çok zaman alıcı. Zaten pazar günümü bu işe ayırmış oldum. :)

Sonuç olarak 2.6 üzerinde Andrew Morton’un cevabından kernel açısından dosya ve bölüm olan swap alanları arasında bir performansı farkı olmadığı, fakat yeni kurulan bir sistemde daha disk fragmante olmadan swap’in dosya sistemi üzerinde olmasının disk bölümünde olmasına göre azda olsa bir performans farkı oluşturduğunu ilk test sonucuna göre görmüş oldum. Bu fark kullanıcı tarafından farkedilebilir mi? Hayır :) Eee ne diye bu kadar şey yaptın o zaman? Bir sürü yeni şey ve araç kullanmasını öğrendik işte fena mı? :)