“4K” hız testlerinde HDD'm neden bu kadar yavaş?


46

4K hızımın nesi yanlış? Neden bu kadar yavaş? Yoksa böyle olması mı gerekiyor?

Kıyaslamanın ekran görüntüsü

Bu hız iyi mi? Neden 4K'da bu kadar düşük hıza sahibim?


13
Bu normal ve beklenen bir durum. Bu bağlamda "4K", mekanik HDD'lerin çok iyi performans gösterdiği rasgele okuma / yazma (4 kilobaytlık bloklarda, dolayısıyla "4K") anlamına gelir. SSD isteyeceğin yer orası. Daha ayrıntılı bir açıklama için buraya bakın .
Bob

4Kb kullanılır çünkü gerçek sektörün bir disk kümesinin ve birçok modern sabit disk sürücüsünün boyutu (diskin kendisinde bulunan düşük seviye yapısı). Yani, istenen veriler daha küçük olsa bile, herhangi bir okuma veya yazma işleminde bir anda aktarılması muhtemel en küçük veri miktarıdır. Bu sayfadaki NO cevabının şu ana kadar bile olsa kümelerden veya sektörlerden bahsetmesi ilginçtir.
thomasrutter

2
@tomasrutter Çünkü cevap ile alakalı değil. Önemli olan, bu testin rastgele aramayı içermesidir. Ne kadar veri aktarıldığına ve bunun diskin sektör boyutunun bir katı olup olmadığına (bir dereceye kadar) ilişkin değildir; Önemli olan, testin arama performansını ölçmek için minimum miktarda veri aktarmasıdır.
Micheal Johnson

Bu sınama bir bölümde mi yoksa tüm diskte mi? Bölüm düzeyindeki sınamalar, 4K fiziksel kesimleri olan, ancak 1K mantıksal kesimleri olan bir diskiniz varsa ve bölme kesimini kesik kesimli kesimlere göre yanlış hizaladıysanız, 4K erişimleri için çok daha kötü bir performans gösterebilir.
Toby Speight

Modern bölümleme araçları, bölümlerin sektör sınırında başlamasını ve bitmesini sağlama eğilimindedir; 1 MB bileşteykenlik bile yaygındır. 4Kb yerel sektörler için sorunlara yol açacak olan eski "63 512 bayt sektörlerin" günleri geride kaldı.
thomasrutter

Yanıtlar:


85

Karşılaştığınız şeyler tipik mekanik HDD'lerdir ve SSD'lerin en büyük yararlarından biri: HDD’lerin korkunç rasgele erişim performansları vardır.

CrystalDiskMark'ta, "Sıra" sıralı erişim anlamına gelirken, "4K" rasgele erişim anlamına gelir (bir seferde 4kB'lik parçalar halinde, çünkü tek baytlar çok yavaş ve gerçekçi olamazdı 1 ).


Tanımlar

Genel olarak, bir dosyaya erişmenin iki farklı yolu vardır.

Sıralı erişim

Sıralı erişim, dosyayı birbiri ardına az ya da çok byte okuduğunuz veya yazdığınız anlamına gelir. Örneğin, bir video izliyorsanız, videoyu baştan sona yükleyeceksiniz. Bir dosyayı indiriyorsanız, indirilir ve baştan sona diske yazılır.

Disk açısından "blok # 1 oku, blok # 2'yi oku, blok # 3'ü oku, bayt bloğu # 4'ü oku" 1 gibi komutlar görüyor .

Rasgele erişim

Rasgele erişim, okuma veya yazma işlemlerinde açık bir şablon olmadığı anlamına gelir. Bu gerçekten rastgele demek zorunda değildir; gerçekten "sıralı değil" anlamına geliyor. Örneğin, bir kerede çok sayıda program başlatıyorsanız, sürücünüzün etrafına dağılmış çok sayıda dosyayı okuması gerekir.

Sürücünün bakış açısından, "blok # 56 oku, blok # 5463'ü oku, blok # 14'ü oku, blok # 5'i oku" gibi komutlar görüyor.

Bloklar

Birkaç kez bloklardan bahsettim. Bilgisayarlar bu kadar büyük boyutlarla (1 MB ~ = 1000000 B) uğraştığından, her bir bayt için sürücüye sormanız gerekiyorsa sıralı erişim bile yetersizdir - çok fazla sohbet var. Uygulamada, işletim sistemi bir kerede diskten veri blokları ister .

Bir blok sadece bir bayt aralığıdır; örneğin, blok # 1 bayt # 1- # 512, blok # 2 bayt # 513- # 1024, vb. olabilir. Bu bloklar sürücüye bağlı olarak 512 Bayt veya 4096 Bayttır. Ancak bireysel baytlardan ziyade bloklarla uğraştıktan sonra bile, sıralı blok erişimi rastgele blok erişiminden daha hızlıdır.


Verim

Ardışık

Sıralı erişim genellikle rasgele erişime göre daha hızlıdır. Bunun nedeni, sıralı erişimin işletim sistemi ve sürücünün daha sonra neyin gerekli olacağını tahmin etmesine ve önceden büyük bir yığın yüklemesine izin vermesidir. "1, 2, 3, 4" blokları talep ettiyseniz, işletim sistemi daha sonra "5, 6, 7, 8" isteyeceğinizi tahmin edebilir, böylece sürücüye "1, 2, 3, 4 okumasını söyler. , Bir kerede 5, 6, 7, 8 ". Benzer şekilde, sürücü bir kerede fiziksel depolamayı "aramak 1, 1,2,3,4 okumak, 5 aramak, 5,6,7,8 okumak" yerine okuyabilir.

Oh, bir şey aramaktan bahsettim. Mekanik HDD'lerin fiziksel olarak nasıl yerleştirildiğinden dolayı çok yavaş bir arama süresi vardır: Fiziksel kolları diski okumak için ileri geri hareket eden bir dizi ağır metalize diskten oluşur. İşte dönen diskleri ve hareketli kolları görebileceğiniz açık bir HDD'nin videosu.

HDD dahili diyagramı
Http://www.realtechs.net/data%20recovery/process2.html adresinden görüntü

Bu, herhangi bir zamanda, yalnızca kolun ucundaki başlığın altındaki verilerin bitinin okunabileceği anlamına gelir. Sürücünün iki şey beklemesi gerekir: kolun diskin sağ halkasına ("iz") gelmesini beklemesi ve ayrıca diskin dönmesini beklemesi gerekir, böylece gerekli veriler okuma altında olur. kafası. Bu 2 arayan olarak bilinir . Hem eğirme hem de hareketli kolların hareket etmesi fiziksel zaman alır ve hasar riski olmadan çok fazla hızlanamazlar.

Bu tipik olarak gerçek okumadan çok daha uzun zaman alır. Sadece istenen baytın yaşadığı yere ulaşmak için> 5ms'den bahsediyoruz, baytın gerçek okuması sıralı bayt okuma başına ortalama 0.00000625ms (veya 512 B blok başına 0.003125ms).

rasgele

Diğer taraftan, rastgele erişim, öngörülebilirliğin bu yararına sahip değildir. Bu yüzden 8 blok bayt, belki de "8,34,76,996,112,644,888,341" bloklarından okumak istiyorsanız, sürücünün "8'e, 8'e, 8'e, 34'e, 76'ya, 76'ya ... . Her bir blok için tekrar aramaya ihtiyacı olduğuna dikkat edin. Sıralı 512 B blok başına ortalama 0.003125 ms yerine, şimdi sırayla (5 ms aramak + 0.003125 ms okunur) = blok başına 5.003125 ms. Bu çok, çok daha yavaş. Aslında, binlerce kez daha yavaş.

SSD'ler

Neyse ki, şimdi bir çözümümüz var: SSD'ler.

Bir katı hal sürücüsü olan bir SSD, adından da anlaşılacağı gibi katı haldir . Bu, hareketli parçaları olmadığı anlamına gelir . Dahası, bir SSD'nin yerleştirilme şekli , bir baytın yerini aramaya gerek olmadığı anlamına gelir (etkili 3 ); zaten biliyor . Bu nedenle SSD'nin sıralı ve rasgele erişim arasında çok daha az bir performans farkı vardır.

Hala bir boşluk var, ancak bu daha sonra ne olacağını tahmin edememe ve bu verileri istenmeden önyükleme ile yüklenebilir .


1 Daha doğrusu, LBA sürücülerinde verimlilik nedenleriyle 512 bayt (512n / 512e) veya 4kB (4Kn) bloklarda adreslenir. Ayrıca, gerçek programlar neredeyse hiçbir zaman tek bir bayta ihtiyaç duymazlar.

2 Teknik olarak, arama sadece kol hareketini ifade eder. Verilerin başın altında dönmesini beklemek , arama süresinin üstünde dönme gecikmesidir .

3 Teknik olarak, arama tabloları var ve başka nedenlerden ötürü, örneğin aşınma dengelemesi var, ancak bunlar bir HDD'ye kıyasla tamamen ihmal edilebilir ...


@KamilMaciorowski Aslında bu sadeleştirmeyi yeniden düşünüyorum, çünkü bu benim arama + okuma zamanı hesaplamamı engelliyor. Oh iyi. Kavramlar için çok önemli değil.
Bob

: Sen rastgele kısmını düzeltmesi gerektiğini Notice how it needs to look for every single byte?değiştirin: byteile block(ve buna göre EXEMPLE değiştirin). Sürücü 4k parçayı arıyor (512bayt öbek içine daha da dağılabilir, ancak bundan daha az değil. Her byte arasında arama yapmaz!) Bir sonraki blok hemen arkasında değilse, her blok arasında arar. parçalanmış diskler) ve aramak (kafayı tabağın etrafında hareket ettirmek ve bloğun altından geçmesini beklemek) çok uzun sürer (birkaç milisaniye)
Olivier Dulac

2
4 kiB / 512B'ye kadar küçük bir dienot. 4kiB aynı zamanda sayfa boyutundadır, NBA'in 512 B topaklarında okumasına rağmen, OS $ 'ın tam 4 kiB bloğunu tekrar okuma olasılığı yüksektir. Ayrıca, sorunun HDD’nin SDD’den daha fazla herhangi bir baytı “bulması” gerektiği, pozisyonu düzeltmek için fiziksel olarak dönmesi gerektiğine inanmıyorum. Tekrar bloğa erişirseniz, HDD sürekli olarak döndüğü için tekrar aramanız gerekir. Herhangi bir blok remapping ikincil bir etki olması muhtemeldir (ve remapped blok genellikle arama en aza indirmek için inandığım herhangi bir hasardan hemen sonra).
Maciej Piechotka

(Muhtemelen eksiksiz bir not - NAND / NOR'dan emin değilim ama en azından DDR adreslemesi de adın gösterdiği gibi tamamen rastgele değil ancak adreslerin “patlaması” nda çalışıyor. Çoğu durumda bunun nedeni 64 B'dir. CPU'ların çoğu satırının $ satırı büyüklüğü ancak diğer uygulamalar için çok daha büyük olabilir.)
Maciej Piechotka 11:17

1
@OlivierDulac Hala blokları tanıtmanın potansiyel olarak kafa karıştırıcı olduğunu düşünüyorum ama açıklamaya çalıştım. Cevap güncellendi.
Bob

3

Diğer cevaplarda da belirtildiği gibi, "4K" neredeyse kesinlikle 4 KiB boyutundaki bloklarda rastgele erişime atıfta bulunuyor.

Bir sabit diskten (SSD değil) her zaman veri okuması veya yazması istendiğinde, iki önemli gecikme yaşanır:

  • Okuma / yazma kafasının, plakanın üzerinde durağan hale gelmesi ve plakanın üzerinde saklanan verilere karşı senkronizasyonu için gereken herhangi bir zaman dahil, plaka üzerinde doğru dairesel parçaya (veya "silindir") "arama" yapması için gecikme arayınız.
  • Okuma / yazma kafasının altındaki döner tabla için, parçanın istenen kısmının ("sektör") kafanın altından geçeceği şekilde dönmesi için dönme gecikmesi

Bunların her ikisi de, herhangi bir sürücü için nispeten sabit bir süreye sahiptir. Arama gecikmesi, başın ne kadar hızlı hareket edebileceğinin ve ne kadar hareket ettirilmesi gerektiğinin bir fonksiyonudur ve dönme gecikmesi, tablanın ne kadar hızlı döndüğünün bir fonksiyonudur. Dahası , son birkaç on yılda çok fazla değişmediler. Üreticiler, örneğin reklamlarda ortalama arama sürelerini kullanıyorlardı; bölgede çok az gelişme olsa veya hiç gelişme olmadığında bunu yapmayı bıraktılar. Hiçbir üretici, özellikle de yüksek rekabet ortamında, ürünlerinin rakiplerininkinden daha iyi görünmesini istemiyor.

Tipik bir masaüstü sabit diski 7200 devir / dakika hızında döner, buna karşın tipik bir dizüstü bilgisayar sürücüsü yaklaşık 5000 devir / dakika hızında dönebilir. Bu, her saniye, toplam 120 devir (masaüstü sürücü) veya yaklaşık 83 devir (dizüstü bilgisayar sürücüsü) geçirdiği anlamına gelir. Yana ortalama olarak istenen sektör başının altından geçtiği önce disk biz yaklaşık iki kat saniyede birçok G / Ç istekleri olduğunu varsayarak bu disk hizmeti edebilmek için bekleyebilirsiniz bu araçlar, yarım devrim dönmeye gerekecektir

  • ya arama, disk dönerken yapılır (bu, muhtemelen bugün G / Ç'nin arandığı sabit diskler için güvenli bir bahis) ve arama gecikmesi, belirli bir G / Ç için dönme gecikmesinden daha fazla değildir.
  • veya kafa, doğru silindirin üzerinde bulunuyor ve sürücünün aramaya gerek kalmamasına neden oluyor (bu, yukarıdakilerin özel bir halidir, sıfır arama gecikmesiyle)

Bu nedenle, erişmesi istenen verinin (okuma veya yazma için) fiziksel olarak nispeten lokalize olması durumunda dönme gecikmesinin sınırlayıcı bir etken olmasına yol açması durumunda saniyede 200 I / O siparişi gerçekleştirebilmeyi beklemeliyiz. Genel durumda, verilerin önemli ölçüde aranması ve arama gecikmesinin sınırlayıcı bir etken olmasını gerektirmesi durumunda, sürücünün plaka veya tablalara yayılması durumunda sürücünün saniyede 100 I / O siparişi gerçekleştirmesini bekleriz. . Depolama açısından, bu " IOPSsabit diskin performansı ", bu sıralı olmayan G / Ç performansı, genellikle gerçek dünyadaki depolama sistemlerinde sınırlayıcı faktördür. (Bu, SSD'lerin kullanımının bu kadar hızlı olmasının büyük bir nedenidir: dönme gecikmesini ortadan kaldırır ve okuma / yazma kafasının fiziksel hareketi elektronik olarak depolanan flaş haritalama katman tablolarında bir tablo araması haline geldiğinden, arama gecikmesini büyük ölçüde azaltın.)

Yazma işlemi bir önbellek temizliği olduğunda genellikle daha yavaştır. Normalde işletim sistemleri ve sabit diskler, performansı arttırmak için rastgele G / Ç'yi sıralı G / Ç'ye dönüştürmek için rastgele yazıları yeniden sıralamaya çalışır. Açık bir önbellek temizleme veya yazma engeli varsa , bu optimizasyon kalıcı depolamadaki verilerin durumunun yazılımın beklediği ile tutarlı olmasını sağlamak amacıyla elimine edilir. Temel olarak aynı sebep, disk önbelleği olmadığında okuma sırasında geçerlidir (hiçbiri mevcut değildir (bugün masaüstü tarzı sistemlerde yaygın değildir)) veya yazılım kasıtlı olarak atladığı için (bu genellikle I / O performansını ölçerken yapılır). Her ikisi de, maksimum potansiyel IOPS performansını daha karamsar bir duruma veya 7200 rpm'lik bir sürücü için 120 IOPS'ye düşürür.

  • G / Ç başına 4 KiB'de 100 IOPS'de, yaklaşık 400 KB / s'lik bir performans elde ediyoruz.
  • I / O başına 4 KiB'de 200 IOPS'de, yaklaşık 800 KB / s'lik bir performans elde ediyoruz.

Neredeyse tam olarak numaralarınızla eşleşecek olan bu. Küçük blok boyutlarına sahip rastgele G / Ç, dönme sabit diskleri için mutlak bir performans katildir, bu nedenle ilgili bir ölçüdür.

Tamamen sıralı I / O’ya gelince, 150 MB / s aralığındaki verim modern dönme sabit diskleri için kesinlikle mantıksız değildir. Fakat çok az gerçek dünya G / Ç katı bir şekilde ardışıktır, bu nedenle çoğu durumda, ardışık olarak I / O performansı gerçek dünya performansının bir göstergesinden çok akademik bir alıştırma haline gelir.


Bu harika bir cevap ve benimkinden çok daha iyi okuyor :) Sadece küçük bir not, en azından Seagate , veri sayfalarında ortalama bir gecikme süresi bekletti . WD görünmüyor.
Bob

@Bob Teşekkürler. Aslında reklamlarda ve benzerlerinde demek istedim; Bunu açıklığa kavuşturmak için cevabı değiştirdim. Bence, çok az sayıda insanın veri sayfalarını okuduğunu söylemek güvenli, bununla birlikte muhtemelen pek çok kişi için ayık bir deneyim olacak ...
CVn

2

4K, rastgele G / Ç'ye karşılık gelir . Bu, diskin test dosyasındaki rastgele noktalardaki küçük bloklara (4 KB boyutunda) erişmesinin istendiği anlamına gelir. Bu, sabit disklerin bir zayıflığıdır; Diskin farklı bölgelerindeki verilere erişme yeteneği, diskin dönme hızı ve okuma-yazma kafalarının ne kadar hızlı hareket edebileceği ile sınırlıdır. Ardışık bloklara erişilen sıralı G / Ç'ler çok daha kolaydır, çünkü sürücü disk dönerken blokları kolayca okuyabilir veya yazabilir.

Yarıiletken bir sürücüde (SSD) rastgele G / Ç ile ilgili bir sorun yoktur, çünkü tüm yapması gereken, verilerin temel bellekte depolandığı yere bakmaktır (tipik olarak NAND flash, 3D XPoint veya hatta DRAM olabilir) ve okunabilir veya verileri uygun yere yazın. SSD'ler tamamen elektroniktir ve verilere erişmek için dönen bir diskte veya hareketli bir okuma-yazma kafasında beklemelerine gerek yoktur; bu da onları bu konuda sabit sürücülerden daha hızlı yapar. Bu nedenle, bir SSD'ye yükseltmenin sistem performansını önemli ölçüde artırdığı görülüyor.

Yan not: Bir SSD'deki sıralı G / Ç performansı genellikle sabit diskte olduğundan çok daha yüksektir. Tipik bir SSD, flash bellek denetleyicisine paralel olarak bağlanmış birkaç NAND yongasına sahiptir ve bunlara aynı anda erişebilir. Verileri bu yongalara yayarak, RAID 0'a benzer bir sürücü düzeni elde edilir ve bu da performansı büyük ölçüde artırır. (Birçok yeni sürücünün, özellikle de daha ucuz olanlarının, veri yazarken yavaş olma eğiliminde olan TLC NAND adlı bir NAND türü kullandığını unutmayın. Bu tampon dolduğunda dramatik bir şekilde yavaşlayın.)


IIRC, bazı NVMe SSD'ler bile bir DRAM önbelleği kullanır.
timuzhti

1
Çoğu. Dramless SSD'ler en alt kısımdadır.
Usta Geek
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.