LVM, Cihaz Eşleyici, Yazılım Baskını ve Blok Aygıtları için Okuyucu Başlığı Ayarları - ne kazanır?


26

Buna düz bir cevap bulmaya çalıştım ve bu çok zor oldu. Bu soru ve cevabı yakın, ancak gerçekten istediğim özellikleri vermedi. Bildiğimi düşündüğüm şeyle başlayalım.

Standart bir blok aygıtınız varsa ve çalıştırırsanız sudo blockdev --reportşöyle bir şey elde edersiniz:

RO    RA   SSZ   BSZ   StartSec            Size   Device
rw   256   512  4096          0    500107862016   /dev/sda
rw   256   512  4096       2048    399999238144   /dev/sda1
rw   256   512  1024  781252606            1024   /dev/sda2

Şimdi, --setrabölümlerden herhangi birini kullanarak bu varsayılan 256'yı 128'e değiştirmeye karar veriyorsunuz ve bu, aşağıdaki gibi, tüm blok aygıtına oluyor:

sudo blockdev --setra 128 /dev/sda1
sudo blockdev --report
RO    RA   SSZ   BSZ   StartSec            Size   Device
rw   128   512  4096          0    500107862016   /dev/sda
rw   128   512  4096       2048    399999238144   /dev/sda1
rw   128   512  1024  781252606            1024   /dev/sda2

Bu benim için mükemmel bir anlam ifade ediyor - blok seviye cihazı, ayarın bölüm olduğu yer değil, her şeyin değiştiği yer. Ayrıca RA ayarları ve cihaz arasındaki varsayılan ilişki bana mantıklı geliyor, genel olarak:

RA * sector size (default = 512 bytes)

Bu nedenle, yukarıda yaptığım değişiklikler, varsayılan sektör boyutuyla birlikte, okuma hızı 128k'den 64k'ye düşecek. Şimdiye kadar hepsi iyi ve iyi.

Ancak, bir RAID yazılımı veya LVM ve cihaz eşleyici eklediğimizde ne olur? Raporunuzun bunun gibi göründüğünü hayal edin:

RO    RA   SSZ   BSZ   StartSec            Size   Device
rw   256   512  4096          0     10737418240   /dev/xvda1
rw   256   512  4096          0    901875499008   /dev/xvdb
rw   256   512  4096          0    108447924224   /dev/xvdj
rw   256   512  4096          0    108447924224   /dev/xvdi
rw   256   512  4096          0    108447924224   /dev/xvdh
rw   256   512  4096          0    108447924224   /dev/xvdg
rw  4096   512  4096          0    433787502592   /dev/md0
rw  4096   512   512          0    429496729600   /dev/dm-0

Bu durumda, mdadm tarafından yaratılan md0'ın üstünde, aslında dört aygıt xvdg-j'de bir RAID0 şeridi olan aygıt eşlemeli bir dm-0 LVM aygıtımız var.

Hem md0 hem de dm-0, RA için blok cihazlardan çok daha yüksek olan 4096 ayarlarına sahiptir. Yani, burada bazı sorular:

  • RA ayarı sanal blok cihaz zincirinden nasıl geçer?
  • Dm-0 hepsine güveniyor mu, çünkü gerçekte erişmekte olduğunuz en üst seviye blok aygıtı mı?
  • Misiniz lvchange -rdm-0 cihazda bir etkiye sahip ve burada gösterilmeyecek?

Bu kadar basitse, kullandığınız sanal blok aygıtının RA ayarı devreye girer, bu dm-0 (veya md0) 'dan okunan değerin 4 x 4096 RA değerine çevrileceği anlamına mı gelir? (her blok cihazda bir tane). Öyleyse, bu ayarların yukarıdaki senaryoda okuyucunun boyutunu patlatması anlamına gelir.

Ardından, okuma kafası ayarının gerçekte ne yaptığını bulma açısından:

Sanal bir cihazın gerçek okuma değeri değerini belirlemek için yukarıdaki sektör boyutuna eşdeğer olarak ne kullanıyorsunuz:

  • RAID'in şerit boyutu (md0 için)?
  • Başka bir sektör büyüklüğü eşdeğeri?
  • Yapılandırılabilir mi ve nasıl?
  • FS bir rol oynuyor mu (öncelikle ext4 ve XFS ile ilgileniyorum)?
  • Ya da henüz geçerse, sadece gerçek seviye cihazların sektör boyutuyla çarpılan üst seviye cihazdan gelen RA ayarı mıdır?

Son olarak, şerit boyutu ile RA ayarı arasında tercih edilen bir ilişki olur mu (örneğin)? Burada, şerit RAID cihazından çıkarılacak en küçük eleman ise, ideal olarak bu asgari veri birimine hizmet vermek için 2 disk erişimi olması gerekmeyeceğini ve RA yapmak istediğini düşünmek istemezsiniz. Tek bir erişimle isteği yerine getirmek için yeterince büyük.


Hangi Linux dağıtımını kullanıyorsunuz? Donanım veya yazılım baskını mı kullanıyorsunuz? Yazılım gibi görünüyor. Donanım ise, hangi kartı / yonga setini kullanıyorsunuz?
Jason Huntley

Ayrıca, RA ayarları büyük ölçüde dosya sistemi ayırma düzeninize bağlıdır. Ext4 kullanıyor musunuz?
Jason Huntley

Aslında bu sorunun RAID ve LVM yazılımı olduğundan bahsetmiştim, yani evet - yazılım. Dosya sistemi açısından, burada XFS ve ext4 arasındaki farkla ilgilenirim, cevaplar ya iyi olurdu
Adam C

XFS daha iyi performans için yoğun olarak ayarlanabilir. Bu, bu sitede birkaç yerde ele alınmaktadır : burada ve burada ... Hangi Linux dağıtımını kullanıyorsunuz? Bu da bir faktördür, çünkü dağıtımda bazı özel araçlar da mevcuttur.
ewwhite'de

Bu bir performans sorusu değil, daha belirgin - Sadece RA ayarları ve LVM / Yazılım RAID katmanları ile nasıl etkileşimde bulundukları / etkileşime girdiklerini bilmek istiyorum
Adam C

Yanıtlar:


11

RA ayarı sanal blok cihaz zincirinden nasıl geçer?

Değişir. Xen domU içinde olduğunuzu ve RA = 256 olduğunu varsayalım. / Dev / xvda1, / dev / dm1 altında görülebilen dom0 üzerindeki asıl LV'dir. Yani, RA (domU (/ dev / xvda1)) = 256 ve RA (dom0 (/ dev / dm1)) = 512 değerine sahipsiniz. Bu şekilde dom0 çekirdeği, domU çekirdeğinden başka bir RA ile / dev / dm1'e erişecektir. Bu kadar basit.

Eğer / dev / md0 (/ dev / sda1, / dev / sda2) durumlarını varsayarsak başka bir durum ortaya çıkar.

blockdev --report | grep sda
rw   **512**   512  4096          0   1500301910016   /dev/sda
rw   **512**   512  4096       2048      1072693248   /dev/sda1
rw   **512**   512  4096    2097152   1499227750400   /dev/sda2
blockdev --setra 256 /dev/sda1
blockdev --report | grep sda
rw   **256**   512  4096          0   1500301910016   /dev/sda
rw   **256**   512  4096       2048      1072693248   /dev/sda1
rw   **256**   512  4096    2097152   1499227750400   /dev/sda2

/ Dev / md0 RA öğesinin ayarlanması / dev / sdX engelleme aygıtlarını etkilemez.

rw   **256**   512  4096       2048      1072693248   /dev/sda1
rw   **256**   512  4096    2097152   1499227750400   /dev/sda2
rw   **512**   512  4096          0      1072627712   /dev/md0

Bu nedenle, genel olarak bence çekirdek, gerçekte belirlenen şekilde blok aygıtına erişir. Bir mantıksal hacme RAID (bunun bir parçası) veya cihaz tutucusu veya her birine saygı gösterilecek bir RA ile erişilebilir.

Yani cevap - RA ayarı IMHO blok cihaz zincirinden geçmedi, ancak en üst seviye cihaz RA ayarı ne olursa olsun, kurucu cihazlara erişmek için kullanılacak.

Dm-0 hepsine güveniyor mu, çünkü gerçekte erişmekte olduğunuz en üst seviye blok aygıtı mı?

Eğer "trump" ile derin yayılım yapmak istiyorsan - önceki yorumuma göre, sistemdeki farklı cihazlar için farklı RA'lara sahip olabileceğinizi düşünüyorum.

Lvchange -r'nin dm-0 aygıtı üzerinde bir etkisi olur mu ve burada görünmez mi?

Evet ama bu özel bir durum. LVM'nin / dev / vg0 / blockdevice olan / dev / dm0 olduğunu varsayalım. Yaparsan:

lvchange -r 512 /dev/vg0/blockdevice

/ dev / dm0 da değişecektir çünkü / dev / dm0 ve / dev / vg0 / blockdevice, çekirdek erişimi söz konusu olduğunda tam olarak aynı blok aygıtıdır.

Fakat Xen domU’da / dev / vg0 / blockdevice’in / dev / dm0 ve / dev / xvda1 ile aynı olduğunu varsayalım. / Dev / xvda1 RA'sının ayarlanması etkili olacaktır ancak dom0 hala kendi RA'sına sahip olduğunu görecektir.

Sanal bir cihazın gerçek okuma değeri değerini belirlemek için yukarıdaki sektör boyutuna eşdeğer olarak ne kullanıyorsunuz:

Genellikle RA'yı farklı değerlerle deneyerek ve onu hdparm ile test ederek keşfederim.

RAID'in şerit boyutu (md0 için)?

Yukarıdaki gibi.

FS bir rol oynuyor mu (öncelikle ext4 ve XFS ile ilgileniyorum)?

Tabii - bu çok büyük bir konudur. Buradan başlamanızı tavsiye ederim http://archives.postgresql.org/pgsql-performance/2008-09/msg00141.php


Bu, aradığım şeye ve şüphelendiğim şeye çok yakın - benim için bir şeyi temizleyebilir misiniz: / dev / md0 (/ dev / sda1, / dev / sda2) durumunda ayarlayabileceğinizi biliyorum RA değerlerini ayırırsanız, ancak / dev / md0 da mount / data diyor ve bundan bir dosyayı okuyun - 512 RA / dev / sda1 ve / dev / sda2'den okumak için kullanılır (yani her ikisi için de kullanılan 512) veya her birinde 256 kullanılır mı? Eski ise RAID0 RA’nın şu şekilde ayarlanması akıllıca olacaktır: SUM (RAID0’daki cihazların RA’sı)
Adam C

1
Sadece deneyimlerime göre - RA = 512 'i / dev / md0' a / dev / sdX diskleri altında ayarlamak, RA = 512 ile olmasına rağmen / dev / sdX’e RA = 512 ile erişebildiğimiz gibi davranıyor. alt blokaj cihazında ayar. Bu durumda 256 ayar göz ardı edilecektir (not / dev / sda'nın / dev / md0'nin bir parçası olması durumunda bir engelleme aracı olarak kullanılamaz olduğuna dikkat edin). Bir çekirdek programcısı değilim ama bu mantıklı görünüyor ve pratiğim tarafından onaylanmış gibi görünüyor. Öyleyse güven verici. / Dev / md0, RA = 512'den okunan 3 konu, RA = 512 ile / dev / sd {a, b, c} den okunan 3 konu.
wojciechz

Çok teşekkürler! Cevapta daha net olması için işleri biraz değiştirdim. Kabul etmeden önce bir şey daha sorabilir miyim? RA'yı test etmek için hdparm kullanmak için bir örneğiniz var mı (ya da birine bağlantı mı)? Kendime benzer bir şey yapacaktım, eğer iyi bir referans varsa, bu bana zaman kazandırır.
Adam C

Karmaşık değil, ama neyi kontrol etmek istediğinize bağlı. Lütfen hdparm kılavuzuna bakın. Eğer disk okumalarını kontrol etmek istiyorsanız (okuyucunun bir türevidir) hdparm -t / dev / md0 gibi bir komut verebilirsiniz . Sonuç, Zamanlama tamponlanmış diskinin okuduğu gibi bir şey gösterecektir : 3.02 saniyede 310 MB = 102.79 MB / sn . Son değer, RA ayarlarından genellikle etkilenir.
wojciechz

1
ah, yani doğrudan bir ölçüm değil - anlaşıldı, şimdi kabul etti - yardımın için teşekkürler :)
Adam C

4

Açıklamak için zor cevabı biliyorum, bu yüzden örnek olarak yapacağım Bunun uğruna, 3 blok cihazınız olduğunu ve RA'nızı standart sektör varsayarak 4 (4 * 512 byte) diyecek şekilde ayarlayın. 3 diski kullanarak bir RAID-5 şeması kullanacak olsaydınız, benzersiz bir disk üzerinde bir şerite dokunmuş olsa bile, RA'yı başlangıçta blok aygıtı RA'yı ayarladığınız faktöre göre bileşikler. Okuduğunuz tam 3 diskin tamamını da kapsadıysa, etkin RA'nız 12 * 512 bayt olur. Bu, MD veya LVM gibi çeşitli seviyelerde RA ayarlanması ile birleştirilebilir. Genel bir kural olarak, eğer uygulamam RA'dan yararlanırsa, RA'yı gereksiz yere birleştirmemek için onu mümkün olan en yüksek katmana ayarlarım. Daha sonra, 2049 sektöründeki dosya sistemini başlatıyorum ve her bir sektörün 8 ile bölünebilen bir sayıyla başladığını dengeliyorum. Ne istediğinizi çoktan bırakabilirim ama bu benim 2 ¢.


Yani, RA ayarının en üst seviye cihazdaki her ne ise, sadece aşağıya ineceğini söylüyorsunuz. Bu nedenle, her biri LVM -> 2 x RAID -> 4 x fiziksel disk kullandıysanız ve 4 RA kullandıysanız, o zaman 8 fiziksel cihaz olduğu için, sonuç olarak 32'den daha etkili bir RA elde edersiniz. RAID'in öbek / şerit boyutunun bu senaryoda etkili olması - RA'nın tüm şeridi kapsamasını istediğinizden eminim, böylece iki kez erişmek zorunda kalmazsınız?
Adam C,

BTW, bunu doğru anlamış olursam, tarif ettiğim senaryoda, RAID0'ın yığınını / şeridini X olacak şekilde ayarlamak isteyeceğimi düşünüyorum, burada X = RA * 512bayt. Bu nedenle, eğer 64k'lik bir yığın / şerit varsa (mdadm varsayılanı), o zaman minimum RA kullanmam gerekir, çünkü bu benim bütün şeridi bir kerede alır.
Adam C

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.