Fakir Sistemcinin Performans Hesabı
| Hp-Ux |

Eğer elimizde performans metriklerini ölçecek gelişmiş araçlar olmasaydı basit komutlarla nasıl hesap yapardık ? Yazının başlığının fakir olarak başlamasının nedeni bu. Elimizdeki 2 adet komutla bunu göstermek. Baştan bir konuyu belirtmekte fayda var. Burda yapacağımız hesaplar tamamen doğruyu vermeyebilir. Kullanacağımız komutların işletim sistemlerine göre implementasyonları farklılık gösterebileceğinden iki farklı tür arasında yapacağımız karşılaştırma elma ile armutun karşılaştırmasına benzeyebilir. Aynı işletim sistemleri arasındaki karşılaştırmalar daha doğru sonucu verebilir. Uyarımızı verdikten sonra konuya başlayabiliriz.
Kullanacağımız komut dd. Dd komutu belirtilen bir kaynaktan veriyi okuyan(if parametresi ile) başka bir hedefe(of parametresi) veriyi yazan bir komut. Aklınıza gelmeyecek şeyleri dd ile yapabilirsiniz. Mesela bir dökümandaki harfleri büyük harfe çevirmek mümkün bu komutla. O yüzden aşağıdaki linke bir bakın derim.
http://en.wikipedia.org/wiki/Dd_%28Unix%29
Komutla verilen bs parametresi ile aktarılacak veri bloğununun size ı, count sayısı ile kaç adet blok aktarılacağı belirtiliyor. Bu bilgiler ışığında fakir bir sistemci olarak elimizdekiyle ne yapabiliriz buna bakalım. Başlıklara böldüm biri ilginizi çekmezse diğerine bakabilirsiniz.
- İşlemci hızı, önbellek ve core lar arası veri transfer hızı
Aşağıdaki komut bunun için kullanılabilir.
timex dd if=/dev/zero bs=64k count=50000 | gzip -9 | dd of=/dev/null
Yalnız bu komutu tek core lu sunucularda çalıştırmamız daha anlamlı. Zira ikinci dd komutu farklı işletim sistemlerinde farklı core lar üzeinde çalıştırılabilir. Bu kararı işletim sistemine bırakmamak için kullandığımız komutu biraz zenginleştirdim. Bir script içerisine yerleştirdim.
#cat test_cpu.sh
input () {
mpsched -f -c $1 dd if=/dev/zero bs=64k count=500000
}
output () {
mpsched -f -c $1 dd of=/dev/null bs=64k count=500000
}
input $1 | output $2
# timex ./test_cpu.sh 0 0
Bu script HP-UX için yazıldı. 0 nolu core ile 0 nolu aynı core arasında aktarım yapıyor. Bunu solariste denemek için mpsched yerine psrset, Linux için taskset yazmanız gerekiyor. Bu komutlar verilen komutu belli bir core üzerinde çalıştırmaya yarıyor. Bu sayede aynı core lar arası, aynı soket içinde farklı core lar arası ve farklı soket ler arası hızı ölçebilirsiniz. AIX prebinding yapamadığından sadece tek core üzerinde test yapmak daha anlamlı. Bu yüzden AIX için sadece aynı core üzerinde çalıştırdığım sonuçları gönderiyorum.
|
ntel Xeon 5600 Aynı Core : 0.71 Aynı socket:1.741 Farklı socket:3.034 |
Itanium 9340s Aynı Core: 0.38 Aynı Socket: 0.87 Farklı Socket:0.88 |
Power6 Aynı Core : 1.60 |
Power’in şaşırtılacak derece düşük çıkması ilginç. Gerçi eski nesil işlemci ama bundan başka yorum getirebilen varsa gelsin :)
2. Memory transfer hızı
Burda input file olarak /dev/mem i kullanıyoruz. Unixler bu dosyayı okumaya izin vermiyorken Linux da deneyebiliyoruz.
# time dd if=/dev/mem bs=64k of=/dev/null
32768+0 records in
32768+0 records out
2147483648 bytes (2.1 GB) copied, 3.25102 s, 661 MB/s
real 0m3.256s
user 0m0.008s
sys 0m3.248s
farkındaysanız burada dd ile bir şeyi de yapabildiğimizi bulduk. Sunucu üzerindeki memory miktarı 2.1 GB mış :)
3. Bir diskin ne kadar I/O yaptığı ve I/Obant genişliği
Bu testte IBMDS4800 üzerinden Raid 10 olarak verilen arkada 22 fiziksel disk üzerine dağılan bir diski kullandım. Doğruluğunu gösterebilmek için Read Cache i storage üzerinden kapattım.
samarra:/#timex dd if=/dev/rdisk/disk14 bs=8k count=100000 of=/dev/null
100000+0 records in
100000+0 records out
real 22.69
user 0.07
sys 1.02
100000 io yaptık ve bunu 22.69 sn de tamamladı. Bu da 4407 IO/s yapıyor. 4407 yi 22 böldüğümüzde 200 IO/s yapıyor. Bu da 15K diskin yapabileceği IO miktarı.
Bu sefer başka bir disk, üzerinde Integrity/VM çalışan bir fiziksel host üzerine atandı. Bu diski aynı zamanda bu host üzerinde çalışan bir sanal sunucu da görüyor. Böylece hem fiziksel hem de sanal sunucudan test ederek, doğrudan erişim ve sanal sunucudan erişim arasındaki farkı da görmüş olacağız.
ivm host:
ivm1:/#timex dd if=/dev/rdisk/disk100 bs=8k count=10000 of=/dev/null
10000+0 records in
10000+0 records out
real 0.89
user 0.01
sys 0.14
Sanal sunucu:
canik:/#timex dd if=/dev/rdisk/disk3 bs=8k count=10000 of=/dev/null
10000+0 records in
10000+0 records out
real 1.91
user 0.02
sys 0.39
Görüldüğü üzere I/O Stack içerisine her bir katman eklendiğinde erişim süresi artıyor.
4. Sunucular arasındaki network hızı
En kolay ping ile ölçülebilir sanırım. Bu ölçüm, sunucu üzerindeki datayı gönderen ve alan yazılım, disk hızı, cpu v.s. gibi diğer etmenlerden bağımsızdır. Bant genişliği yerine efektif hızı verebilir. Fakat tam doğru sonuç vermeyebilir. Test edelim...
mesir:/tmp#ping 11.6.61.45 65500 -n 1
PING 11.6.61.45: 65500 byte packets
65500 bytes from 11.6.61.45: icmp_seq=0. time=3. Ms
65500 byte datanın network üzerinden gönderilmesi 3 ms sürdü.
65500 / 3 = 21833 KB/s = 21.3 MB/s
Şimdi ftp deneyelim.
sftp> mput myimage
Uploading myimage to /tmp/myimage
myimage 100% 426MB 28.4MB/s 28.9MB/s 00:15
Kaynaklar:
HP-UX
Yorumlar
teknik bilgilerin disinda, uslup acisindan da cok guzel. Kolayca okunabilir ve uygulanabilir olmus.
Eline saglik.
RSS beslemesi, bu iletideki yorumlar için.