Sysbench Linux’un donanımsal ve yazılımsal başarımını birçok yönden ölçebilecek bir başarım sınama aracıdır. Aracı düzenli kullanarak SD kart, USB flaş bellek gibi çevre birimlerinin başarımlarını karşılaştırmak için kullanabilirsiniz. Sysbench, CPU, bellek, dosya I/O ve mutex başarımını ölçebilecek özelliklere sahiptir.
Sysbench programının sonuçlarını sağlıklı karşılaştırabilmek için headless (Grafik masaüstü olmadan) ve en az sayıda arka plan servisinin çalıştığı bir sistemin kullanılması önemlidir. Aksi takdirde sınanan başarıma, hâlihazırda yürütülen aygıt işlemleri ve programlar da etki edecektir.
Sysbench’i kurmak için apt aracını kullanabilirsiniz:
1 2 3 |
pi@raspberry ~$ sudo apt update pi@raspberry ~$ sudo apt install sysbench -y |
Takip eden başlıklarda her bir başarım sınamasının nasıl gerçekleştirilebileceği ile ilgili örnekler yer almaktadır. Bu örneklerde kullanılan sınama seçenekleri hakkında daha fazla seçeneğe ait daha detaylı bilgi her zaman man komutu ile öğrenilebilir.
1 |
pi@raspberry ~$ man sysbench |
Sysbench ile dosya sistemi başarımını sınamak
Sysbench programının fileio argümanı ile dosya sisteminin, dolayısı ile SD kartınızın başarımını ölçebilirsiniz. Bu başarımın sınanması işlemi 3 adımda gerçekleştirilir;
- Hazırlık,
- Sınama,
- Temizlik
İlk adımda, sınamanın gerçekleştirilebileceği, istenilen boyutta geçici disk dosyaları oluşturulur ve son adımda bu dosyalar diskten temizlenir. Sınama sıralı okuma/yazma, rastgele okuma/yazma ve bunların karmaşık bileşimleri şeklinde gerçekleştirilebilir. Sınanacak disk ortamı üzerinde geçici dosyaların oluşturulacağı ilk adımda; dosya boyutu olarak mevcut bellek miktarından daha büyük bir değer verilmesi, işletim sistemi tarafından disk ön-belleği olarak kullanılan bellek alanının işlevini en aza indirecektir. Ne kadar büyük bir dosya boyutu belirtilirse işletim sistemi tarafından RAM’de oluşturulan disk ön-belleğinin fonksiyonu azalacak ve sysbench’in daha doğru bir disk başarım sınaması yapmasını sağlayacaktır. İlk adıma ait aşağıdaki komut ile; fileio sınaması yapımak üzere, disk üzerinde 128GB boyutunda geçici dosyaların oluşturulması sağlanmıştır.
1 |
pi@raspberry ~ $sudo sysbench --test=fileio --file-total-size=4G prepare |
Sınamanın ikinci aşamasında ise 4GB’lık disk dosyası üzerinde rastlantısal erişim (rndrw) yöntemi ile 300 saniye boyunca okuma yazma işlemi gerçekleştirilmesi sağlanmıştır.
1 |
pi@raspberry ~ $ sysbench --test=fileio --file-total-size=4GB --file-test-mode=rndrw --max-time=120 --max-requests=0 run |
test seçeneği ile başarım sınamasının dosya sistemi temel alınarak yapılması, file-total-size ile sınamanın hazırlanan 4GB’lık dosya kümesi üzerinde yapılması, file-test-mode ile raslantısal erişim yöntemi kullanılarak okuma/yazma yapılması, max-time ile toplam sınamanın azami 120 saniye sürmesi, max-requests seçeneğine verilen 0 değeri ile belirtilen süre içinde sınırsız sayıda okuma/yazma işleminin yapılabileceği belirtilmiştir. max-requests’e verilecek istek sayısı 0 olduğunda sınırsız sayıda okuma/yazma yapılacağı kabul edilir. Aşağıdaki örnek sınama çıktısını inceleyelim:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
sysbench 0.4.12: multi-threaded system evaluation benchmark Running the test with following options: Number of threads: 1 Extra file open flags: 0 128 files, 800Kb each 100Mb total file size Block size 16Kb Number of random requests for random IO: 0 Read/Write ratio for combined random IO test: 1.50 Periodic FSYNC enabled, calling fsync() each 100 requests. Calling fsync() at the end of test, Enabled. Using synchronous I/O mode Doing random r/w test Threads started! Time limit exceeded, exiting... Done. Operations performed: 8640 Read, 5760 Write, 18402 Other = 32802 Total Read 135Mb Written 90Mb Total transferred 225Mb (1.8732Mb/sec) 119.89 Requests/sec executed Test execution summary: total time: 120.1134s total number of events: 14400 total time taken by event execution: 6.1726 per-request statistics: min: 0.02ms avg: 0.43ms max: 58.56ms approx. 95 percentile: 1.70ms Threads fairness: events (avg/stddev): 14400.0000/0.00 execution time (avg/stddev): 6.1726/0.00 |
sysbench’in sınama çıktısında yer alan değerlerin doğru okunması, yani doğru yorumlanması en önemli konudur. Farklı diskleri veya işletim sistemi konfigürasyonlarını karşılaştırmak için değerlerin büyüklüklerini not almak ve bir puana ulaşmak daha kolaydır. Diğer taraftan aynı sistem ve SD kart üzerinde farklı zamanlarda yapılacak başarım sınamaları söz konusu olduğunda; değerlerin her birinin ne anlama geldiğini bilmek olası başarım kayıplarının nedenlerini yorumlamak açısından ayrı bir önem taşır.
Yukarıdaki sınama çıktısında 135MB’lık veri 8640 adımda okumuş, toplam 90MB’lık veri de 5760 parça halinde diske yazılmıştır. Toplam okuma yazma ortalaması saniyede 1.8732Mb ve saniyede 119.89 okuma/yazma isteği ile gerçekleştirilebilmiştir. per-request statistics bloğudaki sonuçlarda ise istek başına istatistikler sunulmuştur. Buna göre en düşük sürede gerçekleştirilen istek 0.02ms (milisaniye), tüm isteklerin (14400) içinde; bir isteğin ortalaması ise 2.8ms olarak gerçekleşmiştir.
Bu örnekte; disk üzerinde raslantısal konumlarda (rndrw) okuma ve yazma işlemi yapılmıştır. Aynı sınama, sırasal (seqwr) yani bir disk konumunu takip eden komşu sektörlerin okunması şeklinde yapılsaydı daha yüksek bir başarım değeri elde edilirdi (her okuma işleminde, rastgele konumlara erişim sağlama gerekmediği için) . file-test-mode seçeneğinde belirtilebilecek diğer sınama yöntemleri şunlardır: seqwr: sıralı yazma, seqrewr: sıralı yeniden yazma, seqrd: sıralı okuma, rndrd: Rastlantısal okuma, rndwr: rastlantısal okuma yazma, random write: rastlantısal yazma.
Son adımda, sınama için oluşturulan dosya kümesinin diskten silinmesi işlemi yer alır. Aşağıdaki gibi cleanup seçeneği ile bulunulan dizinde oluşturulan sınama dosyalarını güvenli şekilde silebilirsiniz.
1 2 3 4 5 |
pi@raspberry ~ $sysbench --test=fileio --file-total-size=4G cleanup sysbench 0.4.12: multi-threaded system evaluation benchmark Removing test files... |
Sysbench ile CPU başarımını sınamak
sysbench’i kullanarak CPU başarımını aşağıdaki komut ile sınayabilirsiniz. Sınamanın vereceği sonuçların sağlıklı yorumlanabilmesi için o anda sistemde çalışan diğer işlemlerin neler oldukları bilinmelidir. Sınama sırsında yüksek oranda işlem gücü harcayan bir program başarım sonuçlarının düşük çıkmasına neden olur.
1 |
pi@raspberry ~ $ sysbench --test=CPU --CPU-max-prime=20000 --max-time=60 --num-threads=4 run |
Yukarıdaki CPU başarım sınamasında belirtilen seçenekler ve anlamları şunlardır: test seçeneği ile CPU başarım sınaması gerçekleştirileceği, CPU-max-prime ile başarım sınamasında azami 20000’e kadar olan asal sayıların hesaplanacağı, sınamanın azami 60 saniye süreceği ve num-threads ile sınamanın 4 ayrı kanaldan gerçekleştirileceği belirtilmiştir. 4 çekirdekli bir CPU’nuz varsa kanal sayısı olarak 4 seçmek uygundur. Başarım sınamasının sonuçları aşağıdaki gibidir:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
sysbench 0.4.12: multi-threaded system evaluation benchmark Running the test with following options: Number of threads: 4 Doing CPU performance benchmark Threads started! Time limit exceeded, exiting... (last message repeated 3 times) Done. Maximum prime number checked in CPU test: 20000 Test execution summary: total time: 60.0556s total number of events: 2823 total time taken by event execution: 240.1588 per-request statistics: min: 83.01ms avg: 85.07ms max: 140.74ms approx. 95 percentile: 87.66ms Threads fairness: events (avg/stddev): 705.7500/1.92 execution time (avg/stddev): 60.0397/0.02 |
Komutun çıktısında yer alan per-request statistics değerleri CPU karşılaştırması için uygun değerleri sunmaktadır. Buna göre mevcut CPU gücü ile, her bir asal sayı bulma işlemi ortalama 85.07ms sürmüş, 2823 ayrı alt işlemin CPU sınaması 60.0397 saniyede tamamlanabilmiştir. Stddev alanı ile belirtilen değerler hesaplanan ortalamanın standart sapmasıdır (Standart derivation). Standart sapma ne kadar küçük ise, her bir iş birbirine veya ortalamaya (85.07ms) o kadar yakın sürede tanımlanmıştır.
Sysbench ile RAM başarımını sınamak
Bir sistemin başarımını belirleyen en önemli ikinci unsur ise RAM’dir (CPU’dan sonra). Gün geçtikçe daha yüksek hız ve kapasitelerde ve daha düşük erişim sürelerine sahip RAM’ler üretilmektedir. RAM’ler genellikle okuma hızı yazma hızından daha yüksek olacak şekilde üretilmektedir. Genel olarak bir bilgisayar sisteminde okuma işlemi yazmaya göre daha çok yapılır; bu nedenle okuma başarımı yazma başarımına göre daha kıymetli bir ölçüt sunar. Aşağıdaki komut ile RAM başarım sınaması yapılmıştır.
1 |
pi@raspberry ~ $ sysbench --test=memory --memory-block-size=1K --memory-total-size=1G --memory-oper=read run |
Komutun seçeneklerine değinmek gerekirse; memory-blockseçeneği ile okuma işlemi 1KB’lık bloklar halinde gerçekleştirilmiş, sınama için 1GB’lık bellek alanı kullanılmış ve memory-oper seçeneği ile belleğin sadece okuma başarımı sınanmıştır. memory-oper seçeneğinin alabileceği değerler şunlardır: read, write. Sınamanın raporu aşağıdaki gibidir:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
sysbench 0.4.12: multi-threaded system evaluation benchmark Running the test with following options: Number of threads: 1 Doing memory operations speed test Memory block size: 1K Memory transfer size: 1024M Memory operations type: read Memory scope type: global Threads started! Done. Operations performed: 1048576 (372646.05 ops/sec) 1024.00 MB transferred (363.91 MB/sec) Test execution summary: total time: 2.8139s total number of events: 1048576 total time taken by event execution: 2.0350 per-request statistics: min: 0.00ms avg: 0.00ms max: 0.13ms approx. 95 percentile: 0.00ms Threads fairness: events (avg/stddev): 1048576.0000/0.00 execution time (avg/stddev): 2.0350/0.00 |
Raporun çıktısında, başarıma esas değerler şöyle oluşmutur:1024MB’lık veri toplam 2.0350 saniyede 363.91MB/sn hızında okumuş, en uzun okuma süresi 0.13ms olarak gerçekleşmiştir. RAM sınaması yapılırken mevcut fiziksel RAM miktarının üzerinde bir değer kullanmak RAM okuma/yazma hatalarını görebilmek için de faydalı olabilir.
memtester ile RAM başarımını sınamak
Raspberry Pi’ın bellek başarımını sınamak için kullanılabilecek başarılı araçlardan diğeri de memtester’dir. memtester bellek ve bellek alt sistemi donanımlarındaki hataları bulmak için stres sınaması uygular. Programı kurmak için aşağıdaki komutu kullanabilirsiniz:
1 2 3 |
pi@raspberry ~ $ sudo apt update pi@raspberry ~ $ sudo apt install memtester -y |
memtester’in tarayabileği RAM miktarı sistemde bulunan toplam RAM’den daha azıdır. İşletim sistemi ve bellekte yerleşik (kullanımda olan) kütüphaneler, mevcut RAM’in tamamına erişilmesini engeller. Bu nedenle memtester ile mevcut RAM’in tamamı üzerinde yapılan sınamalar, memtester tarafından mümkün olan en büyük RAM miktarı için yeniden denenir. Mevcut RAM’den fazlası sınanmaya çalışıldığında sistem kilitlenebilir veya memtester programı Linux çekirdeğinin bir koruma mekanizması olarak; fazla bellek tükettiği için sonlandırılabilir. memtester’ı aşağıdaki gibi çalıştırarak kullanabilirsiniz:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
pi@raspberry:~ $ sudo memtester 800M 1 memtester version 4.3.0 (32-bit) Copyright (C) 2001-2012 Charles Cazabon. Licensed under the GNU General Public License version 2 (only). pagesize is 4096 pagesizemask is 0xfffff000 want 800MB (1048576 bytes) got 800MB (1048576 bytes), trying mlock ...locked. Loop 1/1: Stuck Address : ok Random Value : ok Compare XOR : ok Compare SUB : ok Compare MUL : ok Compare DIV : ok Compare OR : ok Compare AND : ok Sequential Increment: ok Solid Bits : ok Block Sequential : ok Checkerboard : ok Bit Spread : ok Bit Flip : ok Walking Ones : ok Walking Zeroes : ok 8-bit Writes : ok 16-bit Writes : ok Done. |
Yukarıdaki memtester sınamasında belleğin 800M’lık kısmı memtestertarafından ayrılmak istenmiş (want) ve tamamı (got) sınama için başarıyla tahsis edilmiştir. memtester bellek hücreleri üzerinde mantıksal bit işlemleri yaparak birçok sınama gerçekleştirmiş, hem bellek hücrelerini hem de bellek kontrolcüsünü yoğun şekilde çalıştırmıştır. Böylece Raspberry Pi’ın RAM ve bağlı donanımları yoğun şekilde sınamaya tabi olmuştur. Bu işlem sırasında CPU kullanımı ve sıcaklık artacağından, donanım üzerinde fiziksel bir zorlama da gerçekleştirilmiş olur. Son seçenek ise tüm alt sınamaların kaç kez tekrarlanacağının sayısıdır.
Memtester belleğin istenilen bir adresinden başlayarak sınama gerçekleştirmeye izin verir. Bunun için –P adresine taramanın başlayacağı bellek adresini argüman olarak verebilirsiniz.