Sudahkah Anda mencoba dengan blok yang lebih kecil?
Ketika saya mencoba di workstation saya sendiri, saya mencatat peningkatan berturut-turut saat menurunkan ukuran blok. Ini hanya di ranah 10% dalam pengujian saya, tetapi masih merupakan peningkatan. Anda mencari 100%.
Ternyata pengujian lebih lanjut, ukuran blok yang sangat kecil tampaknya berhasil:
Saya mencoba
dd if=/dev/zero bs=32k count=256000 | dd of=/dev/null bs=32k
256000+0 records in
256000+0 records out
256000+0 records in
256000+0 records out
8388608000 bytes (8.4 GB) copied8388608000 bytes (8.4 GB) copied, 1.67965 s, 5.0 GB/s
, 1.68052 s, 5.0 GB/s
Dan dengan
asli Andadd if=/dev/zero bs=8M count=1000 | dd of=/dev/null bs=8M
1000+0 records in
1000+0 records out
1000+0 records in
1000+0 records out
8388608000 bytes (8.4 GB) copied8388608000 bytes (8.4 GB) copied, 6.25782 s, 1.3 GB/s
, 6.25203 s, 1.3 GB/s
5,0/1,3 =3,8 sehingga merupakan faktor yang cukup besar.
Tampaknya pipa Linux hanya menghasilkan hingga 4096 byte sekaligus untuk pembaca, terlepas dari seberapa besar tulisan penulis.
Jadi mencoba memasukkan lebih dari 4096 byte ke dalam pipa yang sudah diisi per panggilan sistem tulis (2) hanya akan menyebabkan penulis terhenti, sampai pembaca dapat meminta beberapa pembacaan yang diperlukan untuk menarik data sebanyak itu keluar dari pipa dan melakukan pemrosesan apa pun itu ada dalam pikiran untuk dilakukan.
Ini memberi tahu saya bahwa pada CPU multi-core atau multi-utas (apakah ada yang masih membuat satu inti, utas tunggal, CPU?), Seseorang bisa mendapatkan lebih banyak paralelisme dan karenanya waktu jam berlalu lebih pendek dengan meminta setiap penulis dalam pipa hanya menulis 4096 byte pada satu waktu, sebelum kembali ke pemrosesan atau produksi data apa pun yang dapat dilakukannya untuk membuat blok 4096 berikutnya.