19 Ağustos 2021 Perşembe

Linux Server Disk ve Buffer Okuma / Yazma testi



Merhabalar, bu yazımızda linux sisteminde diskin okuma yazma hızını test edeceğiz. Bir de elimiz değmişken buffer testini yapacağız.

Bu işlem için ek araçlar da kullanılabilir ama biz linux üzerinde standart gelen bir komutu kullanıp işimizi göreceğiz.


dd komutu

Burada tüm özelliklerinden bahsetmeyeceğim ama kısaca dd 'nin ne işe yaradığını anlatayım. dd yedek alma gibi işlemlerde kullanılıyor. Belirttiğiniz kaynağı -ki bu komple disk de olabilir- belirteceğiniz hedefe yazıyor. Ben bunu en çok iso dosyalarını usb ye aktarırken kullanıyorum.

(Bu komut ile tüm diski farklı yere de atabiliyorsunuz. Camiada "İmaj alma" diye geçiyor. )

dd ile ilgili detaylı bilgiyi Google dayıdan edinebilirsiniz.

Aşağıdaki işlemler için sunucunuza ssh üzerinden erişmiş olmalısınız. 

Önce yazma hızını ölçelim:

dd if=/dev/zero of=sonra_sil_bunu bs=1M count=1024

Sonuç şuna benzer olmalı:

1024+0 kayıt girdi

1024+0 kayıt çıktı

1073741824 bytes (1,1 GB, 1,0 GiB) copied, 15,8144 s, 67,9 MB/s

İşlem 15 sn sürdü ve yazma hızı 67,9 MB/s olarak ölçüldü.

Tabi ben bu testi atom işlemcili SATA diske sahip bir mini pc de yaptığım için değer küçük çıkıyor. 

Farkın anlaşılması için kullandığım M1 işlemcili Macbook Air üzerinde de test yapayım.

1024+0 records in

1024+0 records out

1073741824 bytes transferred in 0.549948 secs (1952442538 bytes/sec)

Macbook da işlem 0,54 sn sürdü ve yazma hızı 1861 MB/s olarak ölçüldü.

Mac üzerinde komut bs=1M olarak değil de bs=1m olarak yazılıyor.

Bu komut ile kısaca; adını sizin verdiğiniz bir dosya (sonra_sil_bunu) oluşturulup her parçası 1Mb olacak şekilde (bs=1M) 1024 adet (count=1024) içerik yazılıyor. (İçine gerçek bir şey yazmıyor açıp okumaya çalışmayın.) İşlem sonunda 1Gb lık bir dosya oluşmuş oluyor. dd komutunun çıktısında da bu işlemin ne kadar sürdüğü ve oluşan dosya boyutuyla orantılayıp yazma hızını gösteriyor.

Örneğin 1024mb 'ı 10sn de yazdıysa hızı 1024 / 10 = 102.4 MB/s oluyor.


Şimdi de okuma hızını ölçelim:

Linux sistemlerinde (ki sanırım diğer sistemler de böyle çalışıyor) bir dosya okunacağı zaman bellekte olup olmadığına bakılır. Eğer bellekte varsa diskten okumak yerine ilgili dosya bellekten çağrılır. Diskten okumayla uğraşmadığı için istenen dosya daha hızlı getirilmiş olur. Bu örnekteki dosyamızı okumaya çalıştığımızda hali hazırda bellekte olduğu için göstereceği hız bellek okuma hızı olacaktır. Hazır belleğe alınmış dosyamız varken diskten okuma hızına geçmeden önce bellekten okuma hızına da bakmış olalım.


Bunun için yine aynı komutu biraz daha değiştirerek kullanıyoruz:

dd if=sonra_sil_bunu of=/dev/null bs=1M count=1024

Sonuç şu şekilde olmalı:

1024+0 kayıt girdi

1024+0 kayıt çıktı

1073741824 bytes (1,1 GB, 1,0 GiB) copied, 1,23959 s, 866 MB/s

Gördüğünüz üzere dosya bellekten baya hızlı çağrıldı.

Şimdi bunu bellekten değil de direk diskten okumaya çalışalım. Bunun için önce ufak bir komut ile cache belleği boşaltalım. Sonra aynı komutu tekrar verelim. Sistem çağırdığımız dosyası cache üzerinde bulamayacağı için mecbur diskten okuyacaktır.

Şu komut ile cache i temizlemiş oluyorsunuz.

sudo /sbin/sysctl -w vm.drop_caches=3 

Sisteminiz bunu desteklemiyorsa;

sync; echo 3 > /proc/sys/vm/drop_caches

komutu ile de yapabilirsiniz. (evet sync den sonra ; işareti var.)


Sonuç olarak diskten okuma hızını ölçmek için kullanacağınız komut şu şekildedir:

sudo /sbin/sysctl -w vm.drop_caches=3

dd if=sonra_sil_bunu of=/dev/null bs=1M count=1024

Sonuç şu şekilde olmalı:

serhat@debian:~$ sudo /sbin/sysctl -w vm.drop_caches=3

[sudo] password for serhat: 

vm.drop_caches = 3

serhat@debian:~$ dd if=sonra_sil_bunu of=/dev/null bs=1M count=1024

1024+0 kayıt girdi

1024+0 kayıt çıktı

1073741824 bytes (1,1 GB, 1,0 GiB) copied, 14,3438 s, 74,9 MB/s

Gördüğünüz gibi bellekten değil de diskten okuyunca değer ne kadar düştü.

Bellek okuma hızı: 866 MB/s

Diskten okuma hızı: 74,9 MB/s


Sunucularınızda bu hız denetimini ara sıra yapmanızı öneririm. Kullandığınız disklerin bir ömrü olduğunu ve ne zaman değiştirmeniz gerektiği konusunda size fikir verecektir. Sunucunun yoğunluğuna göre ayda bir yada 6 ayda bir ölçmeniz yeterlidir.

Bu arada son olarak 2 önemli noktaya değineyim;

1. Bu test esnasında cache belleğin boşaltıldığını bilin. Bu nedenle tavsiyem diske yazma / okuma işi yaptığını bildiğiniz servisleri kapatarak test yapmanız yönündedir. sshd yi kapatmayın tabi :) o hariç.

2. Test bittikten sonra 1GB boyutunda bir dosya oluşuyor. Onu silmeyi unutmayın. (Dosyaya neden bu adı verdiğimi anlamışsınızdır.)




Hiç yorum yok: