Yanıtlar:
Genelde hdparm
HDD'mi karşılaştırmak için kullanırım . Hem doğrudan hem de önbelleğe alınmış okumaları kıyaslayabilirsiniz. Ortalama bir değer oluşturmak için komutları birkaç kez çalıştırmak isteyeceksiniz.
İşte doğrudan bir okuma.
$ sudo hdparm -t /dev/sda2
/dev/sda2:
Timing buffered disk reads: 302 MB in 3.00 seconds = 100.58 MB/sec
Ve işte önbelleğe alınmış bir okuma.
$ sudo hdparm -T /dev/sda2
/dev/sda2:
Timing cached reads: 4636 MB in 2.00 seconds = 2318.89 MB/sec
-t Perform timings of device reads for benchmark and comparison
purposes. For meaningful results, this operation should be repeated
2-3 times on an otherwise inactive system (no other active processes)
with at least a couple of megabytes of free memory. This displays
the speed of reading through the buffer cache to the disk without
any prior caching of data. This measurement is an indication of how
fast the drive can sustain sequential data reads under Linux, without
any filesystem overhead. To ensure accurate measurements, the
buffer cache is flushed during the processing of -t using the
BLKFLSBUF ioctl.
-T Perform timings of cache reads for benchmark and comparison purposes.
For meaningful results, this operation should be repeated 2-3
times on an otherwise inactive system (no other active processes)
with at least a couple of megabytes of free memory. This displays
the speed of reading directly from the Linux buffer cache without
disk access. This measurement is essentially an indication of the
throughput of the processor, cache, and memory of the system under
test.
Ben de dd
bu tür testler için kullandım . Yukarıdaki komutta yapacağım bir değişiklik, bu bit'i komutunuzun sonuna eklemektir ; rm ddfile
.
$ time sh -c "dd if=/dev/zero of=ddfile bs=8k count=250000 && sync"; rm ddfile
Bu ddfile
komut tamamlandıktan sonra kaldırılacaktır . NOT: HDD'nizi yük altına alırken ddfile
saklamanız gerekmeyen geçici bir dosyadır dd
( of=ddfile
) yazdığı dosyadır .
HDD’nizin daha zorlu testlerine ihtiyacınız varsa Bonnie ++ 'ı kullanabilirsiniz .
hdparm
Hızlı kıyaslamalar için de seviyorum . Tek dezavantajı, sadece bant genişliğini okuyan ölçütler ve birçok blok tipi cihazın (örn. RAID, iSCSI) performansı çok asimetrik olabilir. Aynı kutuda 'önce' ve 'sonra' performansını karşılaştırmak için dd
de iyi çalışır.
hdparm
+ dd
veya sadece bonnie++
veya hepsini 3 kullanmanız gerekir .
(Bu çok popüler bir sorudur - bunun değişikliklerini https://stackoverflow.com/q/1198691 , https://serverfault.com/q/219739/203726 ve https://askubuntu.com/q adresinde görebilirsiniz. / 87035/740413 )
[Dd] 'den [benchmark diskler]' e göre daha iyi yöntemler var mı?
Evet, çalışması daha uzun sürecek ve sonuçları nasıl yorumlayacağına dair bilgi gerektirecekler - tek seferde size her şeyi anlatacak tek bir numara yok çünkü aşağıdakiler yapmanız gereken test türünü etkiliyor:
Ve bunun gibi.
En üstte çalıştırması en kolay ve en altından zor / daha ayrıntılı / en iyisine yakın araçların kısa bir listesi:
Greg - Jens'in FIO kodunu al. Diskin bazı "çoğaltma" yapıp yapmadığını gösteren (sözde karşılaştırmalar için optimize etmek (aka)), gerçek sözde rastgele içerikleri yazmak da dahil olmak üzere, işleri doğru yapar:
[ https://github.com/axboe/fio/ ]
Başka bir şey şüpheli - bonnie veya diğer geleneksel araçlar unut.
Kaynak: Google Plus'ta, Linus Torvalds'ın Greg Kroah-Hartman'a bıraktığı yorum .
Tüm bunları okumak için canınız sıkılmazsa , sadece IOPS aracını öneririm . Size blok boyutuna bağlı olarak gerçek dünya hızını söyleyecektir.
Aksi takdirde - bir IO benchmark yaparken aşağıdakilere bakardım:
CPU kullanımı
Hangi blok boyutunu kullanacaksınız : Diskten / diske 1 GB okumak / yazmak istiyorsanız, bir G / Ç işlemi yaparsanız bu hızlı olacaktır. Ancak uygulamanızın, sabit diskin her yerine 512 baytlık parça yazması gerekiyorsa (rastgele olmasa da rastgele G / Ç olarak adlandırılır), bu durum farklı görünecektir. Şimdi, veritabanları, veri hacmi için rasgele I / O ve yapıları nedeniyle günlük hacmi için sıralı G / Ç yapacaktır . Öyleyse, öncelikle ölçmek istediğiniz şeyi netleştirmeniz gerekir. Linux kurmak istediğinizden farklı büyük video dosyalarını kopyalamak istiyorsanız.
Bu blok boyutu, yaptığınız G / Ç işlemlerinin sayısını etkiliyor. Örneğin, 8 ardışık okuma (ya da sadece karışık değil) işlem yaparsanız, işletim sisteminin G / Ç zamanlayıcısı bunları birleştirecektir. Olmazsa, kontrol cihazının önbelleği birleştirme işlemini gerçekleştirir. 512 baytlık 8 ardışık blok veya bir 4096 bayt öbek yığınını okursanız pratikte hiçbir fark yoktur. Bir istisna - eğer doğrudan senkronize IO yapmayı başarırsanız ve bir sonraki 512 baytı talep etmeden önce 512 baytı bekleyin. Bu durumda, blok boyutunu artırmak önbellek eklemek gibidir.
Ayrıca senkronizasyon ve zaman uyumsuz IO olduğunu da bilmelisiniz: senkronizasyon IO ile mevcut geri dönmeden önce bir sonraki IO isteğinde bulunmayacaksınız. Zaman uyumsuz G / Ç ile örneğin 10 veri parçası isteyebilir ve sonra gelmelerini bekleyebilirsiniz. Açık ve kapalı veritabanı iş parçacıkları, genellikle günlük için senkronize IO ve veriler için zaman uyumsuz IO kullanır. IOPS aracı , 512 bayttan başlayan tüm ilgili blok boyutlarını ölçerek bunu önemser.
Okur veya yazar mısınız : Genelde okumak yazmaktan daha hızlıdır. Ancak, önbelleğe almanın okuma ve yazma için oldukça farklı bir şekilde çalıştığını unutmayın:
Yazma için, veriler denetleyiciye teslim edilir ve önbellek doluysa, önbellek dolu olmadığı sürece verilerin diskte olduğunu kabul eder. İozone aracını kullanarak, önbellek efektlerinin platolarının güzel grafiklerini çizebilirsiniz (CPU önbellek efekti ve tampon önbellek efekti). Önbellek daha az verimli hale gelir, daha fazlası yazıldı.
Okumalar için, okuma verileri ilk okumadan sonra önbellekte tutulur. İlk okumalar en uzun zaman alır ve önbellekleme çalışma süresi boyunca daha etkili hale gelir. Dikkat çeken önbellekler CPU önbelleği, OS'nin dosya sistemi önbelleği, IO denetleyicisinin önbelleği ve depolama önbelleğidir. IOPS aracı yalnızca okumaları ölçer. Bu, "her yerde okuma" yapmasına olanak tanır ve okumak yerine yazmak istemez.
Ne kadar iş parçacığı kullanacaksınız : Bir iş parçacığı kullanıyorsanız ( disk kıyaslamaları için dd kullanarak ) muhtemelen birkaç iş parçacığından çok daha kötü bir performans elde edersiniz. IOPS aracı bunu hesaba katar ve çeşitli konuları okur.
Gecikme sizin için ne kadar önemli : Veritabanlarına bakıldığında, IO gecikmesi son derece önemlidir. Herhangi bir ekleme / güncelleme / silme SQL komutu, onaylanmadan önce veri tabanı günlüğüne (veri tabanı dilinde "log") yazılır. Bu, tüm veritabanı bu IO işleminin tamamlanmasını bekliyor olabileceği anlamına gelir. Burada iostat aracını kullanarak ortalama bekleme süresini (bekliyor) nasıl ölçeceğinizi gösteriyorum .
CPU kullanımı sizin için ne kadar önemli : CPU'nuz, uygulamanızın performansı için kolayca bir tıkanıklık olabilir. Bu durumda, bayt başına ne kadar CPU çevrimi yazıldığını bilmelisiniz, okuyup / yazıp o yöne optimize edin. Bu, ölçüm sonuçlarınıza bağlı olarak PCIe flaş belleğe / buna karşı karar vermek anlamına gelebilir. Yine iostat aracı , IO işlemleriniz tarafından CPU kullanımı hakkında kabaca bir tahmin yapabilir.
PostgreSQL'i kurduysanız, mükemmel pg_test_fsync benchmarkını kullanabilirsiniz. Temelde yazma senkronizasyon performansınızı test eder.
Ubuntu'da burada bulabilirsiniz: /usr/lib/postgresql/9.5/bin/pg_test_fsync
Bu konuda harika olan şey, bu aracın size kurumsal SSD'lerin neden ekstra ücrete değdiğini göstermesi.
postgresql-contrib
pakette bulunur.
Sen kullanabilirsiniz fio
- okuyuculu IO nesil aracı . Fedora 25, Debian ve OpenCSW gibi çeşitli dağıtımlarla paketlenmiştir.
Fio aracı çok esnektir, eşzamanlı olanlar da dahil olmak üzere çeşitli IO senaryolarını karşılaştırmak için kolayca kullanılabilir. Paket bazı örnek yapılandırma dosyalarıyla birlikte gelir (bkz. Örneğin /usr/share/doc/fio/examples
). Bir şeyleri doğru bir şekilde ölçer, yani bazı rakamlar için standart sapma ve kantitatif istatistikleri yazdırır. Bazı diğer popüler kıyaslama araçlarının umursamadığı şeyler.
Basit bir örnek (bir dizi basit senaryo: sıralı / rasgele X okuma / yazma):
$ cat fio.cfg
[global]
size=1g
filename=/dev/sdz
[randwrite]
rw=randwrite
[randread]
wait_for=randwrite
rw=randread
size=256m
[seqread]
wait_for=randread
rw=read
[seqwrite]
wait_for=seqread
rw=write
Arama:
# fio -o fio-seagate-usb-xyz.log fio.cfg
$ cat fio-seagate-usb-xyz.log
[..]
randwrite: (groupid=0, jobs=1): err= 0: pid=11858: Sun Apr 2 21:23:30 2017
write: io=1024.0MB, bw=16499KB/s, iops=4124, runt= 63552msec
clat (usec): min=1, max=148280, avg=240.21, stdev=2216.91
lat (usec): min=1, max=148280, avg=240.49, stdev=2216.91
clat percentiles (usec):
| 1.00th=[ 2], 5.00th=[ 2], 10.00th=[ 2], 20.00th=[ 7],
| 30.00th=[ 10], 40.00th=[ 11], 50.00th=[ 11], 60.00th=[ 12],
| 70.00th=[ 14], 80.00th=[ 16], 90.00th=[ 19], 95.00th=[ 25],
| 99.00th=[ 9408], 99.50th=[10432], 99.90th=[21888], 99.95th=[38144],
| 99.99th=[92672]
bw (KB /s): min= 7143, max=371874, per=45.77%, avg=15104.53, stdev=32105.17
lat (usec) : 2=0.20%, 4=15.36%, 10=6.58%, 20=69.35%, 50=6.07%
lat (usec) : 100=0.49%, 250=0.07%, 500=0.01%, 750=0.01%
lat (msec) : 4=0.01%, 10=1.20%, 20=0.54%, 50=0.08%, 100=0.03%
lat (msec) : 250=0.01%
cpu : usr=1.04%, sys=4.79%, ctx=4977, majf=0, minf=11
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued : total=r=0/w=262144/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0
latency : target=0, window=0, percentile=100.00%, depth=1
randread: (groupid=0, jobs=1): err= 0: pid=11876: Sun Apr 2 21:23:30 2017
read : io=262144KB, bw=797863B/s, iops=194, runt=336443msec
[..]
bw (KB /s): min= 312, max= 4513, per=15.19%, avg=591.51, stdev=222.35
[..]
[global]
Bölümün, diğer bölümler tarafından geçersiz kılınabilen genel varsayılanları olduğunu unutmayın . Her bölüm bir işi açıklar, bölüm adı iş adıdır ve serbestçe seçilebilir. Varsayılan olarak, farklı işler paralel olarak başlatılır, bu nedenle yukarıdaki örnek açıkça iş yürütmesini wait_for
anahtarla seri hale getirir
. Ayrıca, fio, değiştirilebilecek 4 blok büyüklüğünde bir blok kullanır. Örnek, okuma ve yazma işleri için doğrudan raw aygıtını kullanır, bu nedenle doğru aygıtı kullandığınızdan emin olun. Araç ayrıca mevcut dosya sistemlerinde bir dosya / dizin kullanmayı da destekler.
Bu hdparm
yardımcı program çok basit bir okuma kriteri sağlar.
# hdparm -t -T /dev/sdz
Fio gibi son teknolojiye sahip bir kıyaslama aracının yerine geçmez, sadece ilk olasılık kontrolünde kullanılmalıdır. Örneğin, harici USB 3 sürücüsünün USB 2 aygıtı olarak yanlış tanındığını kontrol etmek için (daha sonra ~ 100 MiB / s vs. ~ 30 MiB / s oranlarını göreceksiniz).
Burada belirttiği gibi burada kullanabileceğiniz gnome-disks
(Eğer Gnome kullanıyorsanız).
Test etmek istediğiniz sürücüye tıklayın ve "Ek bölümleme seçenekleri" (tekerlekler) üzerine tıklayın. Öyleyse Benchmark Partition
. MB / s cinsinden ortalama okuma / yazma ve milisaniye cinsinden ortalama erişim sürelerine sahip olacaksınız. Bunu çok rahat buldum.
Biraz ham, ama bu bir tutam olarak çalışır:
find <path> -type f -print0 | cpio -0o >/dev/null
Tüm /lib
ve /usr/bin
dosyaları önbelleğe alma dahil, bu teknikle bazı ilginç şeyler yapabilirsiniz . Bunu bir kıyaslama çabasının parçası olarak da kullanabilirsiniz:
find / -xdev -type f -print0 |
sort -R --from0-file=- |
timeout "5m" cpio -0o >/dev/null
Kökteki tüm dosya adları rastgele sıralanır ve 1 dakikaya kadar önbellekte kopyalanır. Cpio'dan çıktı size kaç tane bloğun kopyalandığını söyler. Dakikada ortalama blok almak için 3 kez tekrarlayın. (Unutmayın, bulma / sıralama işlemi uzun zaman alabilir - kopyadan çok daha uzun. Bulmak / sıralamak ve split
dosya örneği almak için kullanmak daha iyi olacaktır .)