Soru RAID1 okuma erişimim neden yazma erişiminden daha yavaş?


Bazı basit performans testleri yaptım ve RAID1'imden okuma yazmadan daha yavaş geliyor gibi görünüyor:

root@dss0:~# for i in 1 2 3; do dd if=/dev/zero of=/dev/sda bs=1048576 count=131072; done
137438953472 bytes (137 GB) copied, 192.349 s, 715 MB/s
137438953472 bytes (137 GB) copied, 192.851 s, 713 MB/s
137438953472 bytes (137 GB) copied, 193.026 s, 712 MB/s
root@dss0:~# for i in 1 2 3; do dd if=/dev/sda of=/dev/null bs=1048576 count=131072; done
137438953472 bytes (137 GB) copied, 257.201 s, 534 MB/s
137438953472 bytes (137 GB) copied, 255.522 s, 538 MB/s
137438953472 bytes (137 GB) copied, 259.945 s, 529 MB/s

Dd'nin bir performans testi aracı olmadığını biliyorum, ancak bu sonuç hala bir sürpriz.

Sistem satıcı tarafından inşa edildi ve 16 GByte RAM'li bir Supermicro ana kartına sahip. RAID denetleyicisi 1 GByte önbelleğe sahip bir MegaRAID 9271-8i'dir. SAS-933EL1 arka paneli üzerinde 8 adet 2 TByte SAS diski vardır. Kablolamadan emin değilim, denetleyicinin bir konnektörü SAS arka paneline gider, diğeri işletim sistemini tutan iki SATA diskine gider.

RAID1 bu komutla kuruldu:

root@dss0:~# /opt/MegaRAID/MegaCli/MegaCli64 -CfgLdAdd -r1 [8:0,8:1,8:2,8:3,8:4,8:5,8:6,8:7] WB NORA Direct -a0
Adapter 0: Created VD 0
Adapter 0: Configured the Adapter!!
Exit Code: 0x00

root@dss0:~# /opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -LALL -aALL
Adapter 0 -- Virtual Drive Information:
Virtual Drive: 0 (Target Id: 0)
Name                :
RAID Level          : Primary-1, Secondary-0, RAID Level Qualifier-0
Size                : 7.275 TB
Sector Size         : 512
Is VD emulated      : No
Mirror Data         : 7.275 TB
State               : Optimal
Strip Size          : 256 KB
Number Of Drives    : 8
Span Depth          : 1
Default Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU
Current Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU
Default Access Policy: Read/Write
Current Access Policy: Read/Write
Disk Cache Policy   : Disk's Default
Encryption Type     : None
PI type: No PI
Is VD Cached: No
Exit Code: 0x00

Okuma erişiminin yazma erişimi kadar hızlı olabileceğini umuyorum, belki daha hızlı. 715 MByte / sn yazma hızı, tek bir SAS / SATA konektörünün 6 GBit sınırına yakın görünüyor. Bu, SAS arka paneliyle bir yapılandırma veya kablolama sorunu olabilir mi? SAS arka panel yapılandırması bir MegaRAID komutuyla sorgulanabilir mi? Tavsiye lütfen.

Güncelleştirme

Poige ve Peter tarafından açıklandığı gibi, beklenenden daha yavaş okuma performansı muhtemelen Linux I / O alt sisteminin önbelleğe alınmasından kaynaklanıyor.

Dd komutunda direkt bayrağı kullanırken

root@dss0:~# dd if=/dev/sda of=/dev/null bs=1048576 count=131072 iflag=direct
137438953472 bytes (137 GB) copied, 199.862 s, 688 MB/s

Bu çok daha iyi ama yine de yazma hızının% 10 daha yavaş. Oflag = direct kullanımı yazma hızını etkilemedi.


10
2017-07-07 04:33


Menşei


Basit cevap: Okuma sonuçları beklemeyi gerektirir, yazmaz. - David Schwartz


Cevaplar:


poige yazma önbelleği hakkında tam olarak doğru, ama burada daha fazla ayrıntı var.

Sıfır ile dd ve yazma önbellek kullanarak karşılaştırma yapmak için doğru yol değil (tabii ki sadece bir dosya sistemi için yararlı olan, meta verileri ne kadar senkronize ettiğini, yeni dosyalar oluşturduğunu görmek için yazma önbelleğini sınamak istemiyorsanız) ) (ve büyük olasılıkla dd her zaman yanlış tipte bir kriterdir, fakat çok basit bir test için çalışır)

Dd'yi aşağıdaki seçeneklerden en az birini kullanarak kullanmanızı öneririm:

conv=fdatasync -> this will make it flush to disk before finishing and calculating speed
oflag=direct   -> this will make it skip the OS cache but not the disk cache
conv=sync      -> more like skipping the disk cache too, but not really ... just flushing it every block or something like that.

Ve de sıfır kullanmayın. Bazı akıllı donanım / yazılım / ürün yazılımı, veriler sıfır olarak öngörülebilir ise bazı kısayollar kullanabilir. Bu, özellikle kullanmadığınızı tahmin ettiğim sıkıştırma varsa doğrudur. Bunun yerine, rasgele bir dosyayı bellekte kullanın (/ dev / shm gibi). urandom yavaş, bu yüzden tekrar okumak için geçici olarak bir yere yazmanız gerekiyor. 50MB rastgele bir dosya oluşturun:

dd if=/dev/urandom of=/dev/shm/randfile bs=1M count=50

Dosyayı yazmak için birçok kez okuyun (burada 6 kez okumak için kediyi kullanıyorum):

dd if=<(cat /dev/shm/randfile{,,,,,}) of= ... conv=fdatasync

rm /dev/shm/randfile

Ayrıca, raid1 okumalarının paralel işlemlerle en hızlı olduğunu aklınızdan çıkarmayın, böylece diskler bağımsız olarak kullanılabilir. Muhtemelen, aynı operasyonun farklı bölümlerini farklı disklerle okumak için diskleri koordine edecek kadar akıllı değildir.


8
2017-07-07 07:55





Sorunuzun cevabının anahtarı Ileride okuyun. Bir zamanlar ben de bu sorun oldu.

IOW, en uygun ardışık okuma performansı için tüm diskler kalıcı olarak Giriş'e dahil edilmelidir.

Kullandığında dd W / o directio (görmek man dd), yazma işlemi hemen gerçekleştirilmez, ancak OS önbelleği ile gider, bu yüzden tüm diskleri sıralı olarak dahil etme ve maksimum performans elde etme şansı daha yüksektir.


10
2017-07-07 05:12