Bu kod
while True:
b = f1.read(bsize)
if b:
f2.write(b)
else:
break
sıralı okumalar yapıyor ve yazar - herhangi biri verildiğinde bsize
, ilk bsize
baytları okur , hedef dosyaya yazar, ardından ikinci bsize
baytları okur , hedef dosyaya ekler, ...
İşletim sisteminiz bunları sayfa önbelleği üzerinden arabelleğe alacak ve giriş bilgilerinizi okumaya devam edebilir ve yorumlarda @StephenKitt olarak önbellekleme yapabilir. Böylece, temel diske yapılan GÇ çağrıları, muhtemelen bahsettiğiniz 1 MB olan çok daha büyük parçalara birleştirilir.
Performansta gördüğünüz küçük fark neredeyse kesindir, çünkü sadece daha küçük kullandığınızda bsize
işleminiz verileri gerçekten taşımak için çekirdeğe daha fazla sistem çağrısı yapmak zorunda kalır.
Bu yüzden neredeyse kesinlikle bsize
test kodunuzda değişiklik yaparken çok fazla fark görmüyorsunuz , ancak sisteminiz hakkında daha fazla ayrıntı olmadan kesin olarak söylemek gerçekten mümkün değil.
DAHA...
Yaptığınız şey etkili bir şekilde aynı
dd if=random.20g1 of=random.20g1.dest bs=8192
Gerçekten kullanıyorsanız dd
, disk GÇ'yi test etmek için daha birçok şey yapabilirsiniz ( örneğin man sayfasına bakın - örneğin sayfa önbelleğini atlamak için doğrudan GÇ kullanabilirsiniz), ancak sonuçta GÇ sizi test eder dd
sırayla olacak gibi ile yapabilirsiniz oldukça sınırlıdır. dd
Size en iyi IO performansınıza yakın olduğunu gösterecek , ancak IO performansının olumsuz taraflarını ortaya çıkaran birçok gerçek dünya iş yükünü simüle edemez.
Izgara işinizin gerçekte kullandığı IO modeli hakkında daha fazla şey belirlemeniz gerekir - testinizde olduğu gibi sıralı okumalar / yazmalar mı yapıyor yoksa rasgele okumalar yapıyor ve / veya dosyalarda nerede aradığını etkin bir şekilde rastgele okumalar mı IO yapmadan önce konumu? Rastgele G / Ç işlemleri, bir dosya sisteminde ve bunun altında yatan disk donanımında çok daha fazla şey gerektirir - özellikle dönen diskler. Yüzlerce MB / sn akışlı sıralı IO'yu hareket ettirebilen sistemler, rastgele küçük boyutlu IO işlemleri ile kelimenin tam anlamıyla saniyede bir avuç kilobayta indirgenebilir . Özellikle SLOW 5.000 RPM SATA disk kullanıyorsanız.
Dosya sistemlerini ve RAID dizilerini anlamayan insanlar depolama alanı kurduklarında, gerçekten kötüye gidebilir. 1 MB'lık bir dosya sistemi bloksiz olduğundan, yanlış bir "daha büyük her zaman daha hızlıdır" paradigması altında bir depolama sistemi kurulumuyla uğraşıyor olabilirsiniz.
RAID5 / 6 dizileri ve rastgele küçük blok GÇ (ızgara işinizde göründüğü gibi) gibi şeylerle "daha büyük her zaman daha hızlıdır" paradigmasını karıştırmak, tamamen korkunç GÇ performansı için bir reçete olabilir.
Sen kullanabilirsiniz strace
Linux üzerinde fiili sistem işini (ler) yapmak çağrıları alır. Gibi aramalar için bak lseek
, write
, read
ve pwrite
ve pread
. Bu size iş (ler) inizin gerçek IO kalıbını söyleyecektir.
IO kalıbınızı aldıktan sonra, bu kalıbın çoğaltılmasına yaklaşan bir araçla bu kalıp altındaki gerçek depolama performansını test edebilir ve kıyaslayabilirsiniz. Büyük olasılıkla rasgele konumlardan yazacak veya okuyacak bir araca ihtiyacınız vardır. Yine, Linux varsayarak başlayabilirsinizfio
. Büyük olasılıkla rastgele okuma / yazma seçeneklerini kullanmanız gerekir.