Yazma önbelleğini düzgün işleyen SATA Diskler?


15

Veritabanları için kullanılan ayrı disklerde yazma önbelleğini devre dışı bırakma tavsiyesini görmek oldukça yaygındır, çünkü aksi takdirde bazı diskler henüz disk yüzeyine yapmayan yazma işlemlerini kabul eder.

Bu, bazı disklerin yazma işlemini disk yüzeyine gelinceye kadar kabul etmediği anlamına gelir (Güncelleme: veya önbelleği boşaltmanız istendiğinde doğru bir şekilde rapor ettikleri. Bu tür diskleri nerede bulabilirim veya yetkili bilgileri nerede arayabilirim? bu tür diskleri nerede bulabilirim?

Yazma önbelleği kullanmaktan gerçekten fayda sağlayacak bazı DB sunucuları kuruyorum, ancak uygulama fiyat duyarlı ve daha fazla bilgi için yeterli önbelleğe sahip olmadığım için disk alt sistemimin maliyetini iki katına çıkarmam her sürücüdeki önbelleğe güvenip güvenemeyeceğimi biliyorum.


linux, yazma önbelleğinin sürücü tarafından hdparam yoluyla sürücü bazında devre dışı bırakılmasını sağlar. SATA sürücüler için, her yeniden başlatmada bunun yeniden yazılması gerektiğine inanıyorum. Batarya destekli bir baskın denetleyicisi kullanmadan yine de mükemmel gereksinimlerimizi karşılayabilirsem bu şekilde gidebilirim. Daha basit ve daha ucuz olduğu için mümkün olduğunda RAID yazılımını kullanmayı tercih ederim. Her iki durumda da, kesinlikle bir UPS'im olacak.
eas

Yanıtlar:


15

Genel olarak konuşursak, sorunuza doğrudan cevap olarak, sürücünün kendisinin yazma önbelleği etkin olarak düzgün çalışmasına ilişkin hatalara sahip olduğu SATA sürücülerinin büyük markalarının farkında değilim. Yani, yalnızca sürücü perspektifinden, sürücü önbelleğe alma perspektifinden yapması gereken şeyi yapar. Ben de işaret etmesini bile yazma önbelleği olan etkin, fiziksel olarak güncellenmektedir dönen medyaya SATA kablosu üzerinde bir disk yazma gelen gecikme çok kısa (~ 50 100ms tipik kadar) hala olduğunu. Kirli önbellek verilerinin sadece saniyeler boyunca orada olacağı gibi değil ..... sürücü sürekli olarak önbellekten kirli veri almaya çalışıyorfiziksel ortama mümkün olan en kısa sürede. Bu sadece veri güvenliği meselesi değil, gelecekteki yazımları gecikmeksizin kabul etmeye hazır olmaktan biridir (yani: yazı yazmak).

Önbelleğe alma etkinleştirildiğinde ortaya çıkan sorun, SATA kablosu üzerinden sürücüye yazma sırasının ve dönen ortama yazma sırasının aynı olmamasıdır. Bu, önbelleğin tüm içeriği diske dönüştürülmeden önce güç kaybına veya sistem çökmesine sahip OLMADAN ASLA bir soruna neden olamaz. Neden? ->

Burada ortaya çıkabilecek sorun, dosya sistemi ve / veya veritabanı dosya içeriği işlem dayanıklılığı ile ilgili bu sıra dışı kayıp yazma ile ilgilidir. Gerçekte, potansiyel olarak bozuk olan yazma işlemleri teorik olarak medyaya çok özel bir sırada gerçekleşen disk yazma işlemleri tarafından garanti edilecek olan işlem mantığının bütünlüğünü bozabilir.

Şimdi, elbette, dosya sistemi tasarımcıları, veritabanları, RAID denetleyicileri, vb. Yazma önbelleğe alma ile ilgili olarak bu fenomenin farkındadır (veya kesinlikle farkında olmalıdır). Yazma önbelleği, çoğu rasgele erişim türü G / Ç senaryolarında performans açısından son derece arzu edilir. Aslında, yazma önbelleği kullanılabilir olması, daha gelişmiş Yerel Komut Kuyruğu ( NCQ)) daha yeni SATA ve son birkaç nesil PATA uygulamasında desteklenir. Bu nedenle, bu tür kritik zamanlarda fiziksel ortama sipariş vermeyi garanti etmek için, dosya sistemi ve / veya uygulama, vb. Özellikle medyaya yazma önbelleklerinin temizlenmesini isteyebilir. Bu senkronizasyon talebinin tamamlanmasının ardından - (potansiyel olarak) dosya arabellekleri, OS disk önbellekleme, fiziksel disk önbellekleme vb. Bekleyen her şey, doğru kritik işlemlerde işlem sistemi tasarımı başına medyada yer alır. Yani, programcılar doğru aramaları en üstte yaparlarsa ve bu yazılım ve donanım katmanları zincirinin her elemanı işlerini doğru bir şekilde yaptıysa bu doğru olur. ie: Bu konuda sürücüde, RAID denetleyicilerinde, disk sürücülerinde, işletim sistemi önbelleklerinde, dosya sisteminde, veritabanı motorunda vb. bir hata yoktur. Bu, hepsinin tam olarak çalışması gereken bir çok yazılım. Buna ek olarak, bu konuda doğruluğun doğrulanması çok zordur, çünkü neredeyse her durumda yazma sırası hiç önemli değildir .... ve elektrik kesintisi ve çökme senaryolarının oluşturulması zor testlerdir. Bu nedenle, sonunda, bu terimin çeşitli katmanlarından ve / veya anlamlarından bir veya daha fazlasında "yazma önbelleğe almayı kapatma" .... bazı sorunları "düzeltme" üne sahiptir. Aslında, RAID denetleyicisinin veya OS Disk Önbelleklerinin veya Sürücünün vb. Yazma önbellekleme davranışlarını kapatmak, sistemdeki bir veya daha fazla hatayı ve bu tür kaynağın kaynağını önler. ve elektrik kesintisi ve çökme senaryolarının oluşturulması zor testlerdir. Bu nedenle, sonunda, bu terimin çeşitli katmanlarından ve / veya anlamlarından bir veya daha fazlasında "yazma önbelleğe almayı kapatma" .... bazı sorunları "düzeltme" üne sahiptir. Aslında, RAID denetleyicisinin veya OS Disk Önbelleklerinin veya Sürücünün vb. Yazma önbellekleme davranışlarını kapatmak, sistemdeki bir veya daha fazla hatayı ve bu tür kaynağın kaynağını önler. ve elektrik kesintisi ve çökme senaryolarının oluşturulması zor testlerdir. Bu nedenle, sonunda, bu terimin çeşitli katmanlarından ve / veya anlamlarından bir veya daha fazlasında "yazma önbelleğe almayı kapatma" .... bazı sorunları "düzeltme" üne sahiptir. Aslında, RAID denetleyicisinin veya OS Disk Önbelleklerinin veya Sürücünün vb. Yazma önbellekleme davranışlarını kapatmak, sistemdeki bir veya daha fazla hatayı ve bu tür kaynağın kaynağını önler.

Her neyse, sorunun özüne dönersek: SATA altında, tüm disk okuma / yazma komutlarının ve temizleme önbellek komutlarının özel işlenmesi SATA belirtimleri tarafından iyi tanımlanmıştır . Ayrıca, disk üreticileri her bir sürücü modeli veya sürücü ailesi için, bunların uygulanmasını ve Seagate Barracuda diskleri için bu örnek gibi bu kurallara uyumu açıklayan ayrıntılı belgelere sahip olmalıdır . Özellikle, SATA SET ÖZELLİKLERİNİN ayrıntılarına bakınsürücü işletim modunu ve özellikle seçenek 82h'yi kontrol eden komut, sürücü düzeyinde önbelleğe almayı devre dışı bırakmak için kullanılabilir, çünkü varsayılan, bildiğim tüm sürücülerde kesinlikle önbelleğe yazma özelliğidir. Önbelleği gerçekten devre dışı bırakmak istiyorsanız, bu komut her sürücü sıfırlama veya başlatma işleminin başında yapılmalıdır ve genellikle işletim sisteminiz için disk sürücülerinin kontrolü altındadır. İşletim sistemi sürücünüzü bu modu bir IOCTL ve / veya Kayıt Defteri Ayarı türü aracılığıyla ayarlamaya teşvik edebilirsiniz, ancak bu büyük ölçüde değişir.


5
Cevabımın bir editoryal notu: Donanım RAID Denetleyicileri, dahili olarak yazma önbelleğe almayla ilgili sorunlar da dahil olmak üzere birçok sayıya göre ünlüdür. Neden olduğu hakkında hiçbir fikrim yok, ancak anekdotla konuşan RAID denetleyicileri, bu kadar yaygın kullanıma sahip bir şey açısından şimdiye kadar yazılmış en çok yazılımdan bazıları gibi görünüyor. Kesinlikle çok saygın satıcılardan çok ana akım, iyi kurulmuş ve yaygın olarak kullanılan RAID donanımını kullanmak için para ödüyor ..... ve o zaman bile önemsiz olmayan konulara yamalar çok sık görünüyor!
Uzun boylu Jeff

Teşekkürler Jeff. Bu konuda çok fazla okuma yapıyordum ve şimdiye kadar olduğu gibi kafam karıştı. Şu anda mücadele ettiğim sorunun, uygulamaların ve dosya sistemlerinin, mevcut çeşitli mekanizmaları kullanarak uygun yazma sırasını garanti etmeleri için blok katmanına talimat vermelerine izin veren "yazma engelleri" ile ilgili olduğunu düşünüyorum. Ne yazık ki, engellerin uygulanmasıyla ilgili her türlü sorun vardır. LVM, bir şey için, altta yatan cihazlar desteklese bile onları desteklemiyor. Ayrıca, bana öyle geliyor ki, sistem yöneticileri fsync'in sürücü önbelleğini yıkaması seçeneğine sahip olmalı
eas

@eas - Yukarıda bahsettiğim "yazma engelleri" terimi, yukarıdaki cevabımda önbelleklerin "senkronizasyonu" veya "floş" olarak adlandırdığım temel mekanizmadır. Bu noktada, dosya erişimi "yığını" çeşitli katmanlarda başlatılabilir. Gerçek bir yazma engeli oluşturmak için, beklendiği gibi çalışmak üzere fiziksel ortama kadar beklemede olan yazma verileri (yani, kirli önbellekler veya geri yazma arabellekleri) olan tüm katmanlar üzerinde etkili olması gerekir. Bu zincirdeki herhangi bir bağlantısız bağlantı, yazma işlemleri yeniden düzenlendiğinde potansiyel sorunları ortaya çıkarır.
Uzun Jeff

Diskler medyaya yazma işlemlerini birkaç saniyeliğine geciktirebilir, çünkü disk önbelleğinden taşan başka yazmalar varsa, medyaya yazmaya zorlar. NCQ kesinlikle yazma önbelleğine ihtiyaç duymaz, hala birçok yazma ve okuma komutuna sahip olabilir ve diskin en iyi performansı alacağını düşündüğü sırayla bunları yayınlayabilir, ayrıca NCQ ile yazmaların sırasının hiçbir anlamı yoktur. dosya sistemleri ve veritabanlarında GÇ engelleri kullanılmalıdır.
Baruch Hatta

3

Batarya destekli bir önbellek diski denetleyicisinin sürücü önbelleğini devre dışı bırakacağı benim deneyimimdi. Aksi takdirde diskteki önbelleği devre dışı bırakmanın bir yolunun farkında değilim. Diskteki önbelleği devre dışı bırakabilseniz bile, performans önemli ölçüde düşecektir.

Düşük maliyetli bir optoin için, sisteminizi düzenli bir kapatma için sinyal verebilen ucuz bir UPS kullanabilirsiniz.


Yukarıdaki yorumum buraya eklenmiş olmalı. Hala bu siteyi öğreniyorum.
eas

Bazı RAID denetleyicileri diskteki önbelleği her zaman devre dışı bırakır, bazılarında yoktur ve bazılarında bir ayar vardır. Bu davranış temelde RAID denetleyicisinin önbellek stratejisi uygulamasının nasıl olduğuna bağlıdır. Bazı uygulamalarda, diske yazma sırasını gerçekten kontrol etmek isterler .... ve diğerlerinde daha az önemlidir. Cevabımdaki bazı sorunlara değiniyorum.
Uzun Jeff

Kuşkusuz küçük testlerimde (LSI 9261 RAID denetleyicileri, SATA, NL SAS ve SAS sürücüler), sürücü, hamur / kapasite destekli önbelleğe sahip bir RAID denetleyiciye bağlandığında sürücü yazma önbelleğinin etkinleştirilmesinin, RAID denetleyici önbelleğine sahip performans ve üstü performans. Bunun zor ve hızlı bir kural olduğunu söyleyemem, ancak bana göre RAID denetleyicisinin sürücü önbelleğini devre dışı bırakması mutlaka bir sorun değil.
Daniel Lawson

2

Önbelleği korumak için pil yerine süper kapasitörlü bir RAID sistemi kullanıyorum . Piller aşınır, izlenmelidir, değiştirilmeli ve bu bakımdan potansiyel bir arıza noktasını temsil etmelidir. Bir kapasitör başlangıçta şarj olur, UPS'den gelen güç kesildiğinde önbelleği temizler, neredeyse sonsuza kadar sürer, izleme gerektirmez, vb. Ancak, yoksulluk hattında bir iş yürütmüyorsanız (bu günlerde nadir değil) bir UPS'niz olmalıdır. ve arıza durumunda sistemi temiz bir şekilde kapatan yazılım - Gücün tekrar kesilmesi durumunda, kapatmadan önce genellikle 5-15 dakika (UPS yüküne ve dolayısıyla aküye bağlı olarak) veririm.

Fırtına sırasında, bazen güçler sönmeden ışıkların titremesini görebilir (ya da sahip olabilirsiniz - güç sistemleri iyileşir). Bu tekrar kapamalı bir cihazdır. Devreye girdiğinde aşırı yüklenmenin geçici olması durumunda açılmış anahtarı kapatmaya çalışan bir devre kesici, hangisi daha çok. Üç denemeden sonra kapalı kalmazsa, açık kalır. Bazı zavallı adam yağmurda dışarı çıkıp onunla başa çıkmak zorunda. Onun ve benim yaptığımın sadece iki katını yaparken, fazla mesai olması tehlikeli bir iştir.


2

Disk yazma geri önbellekleri yanılgılarından biri, yalnızca güç kaybı ile ilgili verileri kaybetmeleridir. Bu, özellikle sATA cihazlarında her zaman böyle değildir. Bir sATA aygıtında bir hata varsa (köşe kutusu FW hatası veya denetleyici hatası gibi) ve sıfırlanır veya harici olarak sıfırlanırsa, geri yazma önbelleğindeki verilerin askıda kaldıktan sonra hala kullanılabilir olduğuna dair bir garanti yoktur.

Bu, bir cihazın geçici bir hataya sahip olduğu, sıfırlandığı, herhangi bir kirli önbellek kaybında veri kaybının meydana geldiği ve sürücülerin blok seviyesinin üzerinde sessiz olduğu senaryolara yol açabilir.

Daha da kötüsü, OS araçlarıyla sürücü önbelleğinin devre dışı bırakılması da cihaz sıfırlama işlemlerinde kaybolur, bu nedenle bir aygıtın önbelleğini gün başında devre dışı bırakmış olsa bile, cihaz sıfırlanırsa, geri yazma önbelleğini yeniden etkinleştirir. Başka bir sıfırlamada, cihaz daha sonra veri kaybeder.

SCSI / SAS sürücüleri ve bazı sATA sürücüleri, özelliği sıfırlar arasında kaybolmadığından emin olmak için geri yazma profilinin durumunu kaydetme özelliğine sahiptir - ancak pratikte bu nadiren kullanılır.

Blok katmanını üst katmanlara entegre eden RAID denetleyicileri sürücü sıfırlamalarını fark edebilir ve geri yazma önbelleğini yeniden devre dışı bırakabilir - ancak standart sATA ve SAS denetleyicileri bunu yapmaz.

Bu sınırlama, performans ve güvenilirlik için yapılandırılmış diğer SET ÖZELLİĞİ ve benzer parametreler için de geçerlidir.


1

Söylediğiniz gibi, uygun bir pil destekli RAID denetleyicisi pahalı olacak, ancak eBay'de Dell Perc5 / i denetleyicilerini 100 £ (150 $) karşılığında ve özellikle RAID5 ile Perc5 / i gibi bir denetleyicinin hızı sizi şaşırtacak. Perc5 / is ve altı disk RAID5 dizileri olan birkaç sunucum var ve şimdiye kadar gördüğüm en hızlı diskler arasında. Özellikle veritabanı uygulamaları için hızlı diskler performansı gerçekten artıracaktır.

Mermiyi ısırır ve bir RAID denetleyicisi satın alırım.

JR


1

Anladığım kadarıyla, fsync () faking, sürücüler değil, pil destekli RAID denetleyicilerinin bir özelliğidir. RAID denetleyicisi, güç sürücüye geri yüklenene ve yazma işlemi diske güvenli bir şekilde bağlanana kadar yazma önbelleğine güç sağlayabilen bir pil içerir. Bu, denetleyicinin yazma işleminin diske yazılacağına dair bir miktar garanti sağladığı için derhal işletim sistemine dönmesini sağlar.

Sürücüler geri yazma önbelleği dolarsa, önbellek sürücüye geri yazılana kadar yazma işleminin engelleneceğine dikkat edilmelidir. Bu, önbelleğin genellikle uzun süreli yazmalarda etkili olmadığı anlamına gelir.

Kaç tane IOPS uygulamanız gerekiyor? Sürücü yazma önbelleği ile sınırlı olduğunuzdan mı, yoksa sürücüdeki küçük bir sunucunun (sunucunuzun belleğiyle karşılaştırıldığında) fayda sağlayacağından emin misiniz?


Şu anda yaptığım test, uygulamamızın performans zarfını belirlemektir, böylece en iyi nasıl ölçeklendirileceğini ve genişletileceğini anlayabiliriz. Sürücü önbelleği nispeten küçük olabilir, ancak yazma önbelleği ile sürücüye yazma işlemlerini (uygun olduğunda) yeniden sıralama yeteneği verir, bu da sürekli yazma çıktısını iki katına çıkarabilir.
eas
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.