HDD’mi nasıl kıyaslayabilirim?


Yanıtlar:


62

Genelde hdparmHDD'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.

Örnekler

İş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

ayrıntılar

-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.

Dd kullanarak

Ben de ddbu 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 ddfilekomut tamamlandıktan sonra kaldırılacaktır . NOT: HDD'nizi yük altına alırken ddfilesaklamanız gerekmeyen geçici bir dosyadır dd( of=ddfile) yazdığı dosyadır .

Ötesine gitmek

HDD’nizin daha zorlu testlerine ihtiyacınız varsa Bonnie ++ 'ı kullanabilirsiniz .

Referanslar


1
hdparmHı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 ddde iyi çalışır.
Alexios

@Alexios - evet, bunu söylediğiniz için teşekkürler. Evet, genellikle en az hdparm+ ddveya sadece bonnie++veya hepsini 3 kullanmanız gerekir .
slm

Şüpheli olan senkronizasyon yerine iflag = direct oflag = olması gerektiği zaman direkt (örneğin doğrudan io'yu destekleyen bir dosya sistemine sahip linux) kullanın.

22

(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:

  • Rasgele, ardışık veya ikisinin karışımı olan G / Ç performansı ile ilgileniyor musunuz?
  • Diske mi okuyorsunuz ya da diske mi yazıyorsunuz (veya ikisinin bir karışımı)?
  • Gecikme, verim veya her ikisi ile mi ilgileniyorsunuz?
  • Aynı sabit diskin farklı parçalarının ne kadar farklı performans gösterdiğini anlamaya mı çalışıyorsunuz (genellikle dönen disklerin merkezine daha hızlı yaklaşır)?
  • Diskinizi kullanırken belirli bir dosya sisteminin nasıl çalışacağını mı merak ediyorsunuz ya da doğrudan bir blok aygıta G / Ç yaparak sonuçları diskin ham performansına daha mı yakın arıyorsunuz?
  • Belirli bir G / Ç boyutunun nasıl performans gösterdiğiyle ilgileniyor musunuz?
  • G / Ç'yi eşzamanlı veya eşzamansız olarak mı gönderiyorsunuz?
  • Ne kadar G / Ç gönderiyorsunuz (yanlış yoldan çok az gönderin ve tüm G / Ç'leri önbelleğe alınabilir; böylece RAM'inizin hızını değil, diskinizin hızını test edebilirsiniz)?
  • Yazdığınız verinin içeriği ne kadar sıkıştırılabilir (örneğin yalnızca sıfır veriler yüksek oranda sıkıştırılabilir ve bazı dosya sistemleri / diskler yalnızca diğer içeriklerle elde edilemeyen sayılara yol açan sıfır veriler için özel bir hızlı yola bile sahipler)?

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:

  1. dd (sıralı okuma veya yazma, yalnızca çıktıyı gösterir, bir dosya sistemi veya blok aygıtı kullanmak üzere yapılandırılabilir, blok önbelleğini atlamak için yapılandırılabilir / G / Ç'nin gerçekten tamamlanmasını bekleyin)
  2. hdparm (yalnızca sıralı okumalar, yalnızca çıktıyı gösterir, hiçbir zaman bir dosya sistemi kullanmaz, blok önbelleği atlayacak şekilde yapılandırılabilir, önbellek testi yalnızca başlangıçtaki 2 MByte değerini yeniden okur)
  3. GNOME Disk Utility'nin kıyaslaması (çalıştırması kolay, hiçbir zaman bir dosya sistemi kullanmaz, grafiksel ancak tam bir GNOME kurulumu gerektirir, farklı G / Ç tipleri için gecikme ve çıkış numaraları verir, ancak yazma iş yükü aslında örnek başına başına okuma / yazma / fsync yapıyor).
  4. fio (neredeyse her şeyi yapabilir ve ayrıntılı sonuçlar verir, ancak yapılandırma ve bahsedilen sonuçların nasıl yorumlanacağına dair bir anlayış gerektirir ). İşte Linus'un bu konuda söylediği:

    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 .


11

IOPS aracıyla

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:

  • blocksize / cache / IOPS / direct vs arabelleğe alınmış / async vs sync
  • okuma yazma
  • İş Parçacığı
  • gecikme
  • 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.


1
İops betiği güzel, gerçekten apt veya pip olmasa da kafam karışmıştı. Yine de işe yarıyor.
ThorSummoner

IPS aracı terk edilmiş görünüyor. Ayrıca, sadece okumaları ölçer ve herhangi bir istatistiksel rakamı basmaz (ör. Stddev / nicel rakamlar).
maxschlepzig

İops aracı basittir ve karşılaştırılabilirliği sağlamak için ihtiyaç duyduğunuz şey budur. Temelde, bir dosya üzerinde rastgele yapılan (her şey bir dosyadır) yapılan okuma sistemine yapılan bir sargıdır. İnan ya da kaynağı oku - tamamlandı ve kod güncellemesi gerektirmiyor. Bir düşünün - gerçekten her birinin tartışılabilir olduğu 1000 satır kodlu IOMeter gibi başka bir araç istiyor musunuz? Ve yeni bir sürümle ne yaparsınız? Tüm kriterleri tekrar yapmak zorunda kalacak mısınız?
Thorsten Staerk

8

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.


2
Debian'da postgresql-contribpakette bulunur.
TranslucentCloud

4

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_foranahtarla 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.

Diğer Aletler

Bu hdparmyardı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).


1
Bu cevap, asıl cevap unix.stackexchange.com/a/138516/134856 (ancak genişletilmiş bir fio bölümü ile) özet yanıtının farklı bir versiyonudur . Bir fio özetini sağlamak ama oldukça uzun ve sen bağlantı paçayı muktedir çünkü ayrılıyorum fio.readthedocs.io/en/latest/fio_doc.html#job-file-format ...
Anon

Not: İşinizin global bölümüne direct = 1 eklemenizi öneririm, böylece Linux'un sayfa önbelleğini atlarsınız ve sadece diskin hızını görürsünüz (ancak iodepth'iniz sadece 1 ... olduğundan (disk G / Ç gönderme hakkında tartışma ekleyin) ). Tüm işleri sırayla çalıştırmak için stonewall'ı ( fio.readthedocs.io/en/latest/… ) global olarak kullanmak daha kolaydır .
Anon

1

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.


1

Biraz ham, ama bu bir tutam olarak çalışır:

find <path> -type f -print0 | cpio -0o >/dev/null

Tüm /libve /usr/bindosyaları ö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 splitdosya örneği almak için kullanmak daha iyi olacaktır .)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.