Zkoušeli jste to s menšími bloky?
Když zkouším na své vlastní pracovní stanici, zaznamenávám postupné zlepšování při snižování velikosti bloku. V mém testu je to pouze v oblasti 10%, ale stále jde o zlepšení. Hledáte 100 %.
Jak se ukázalo při dalším testování, zdá se, že opravdu malé velikosti bloků dělají trik:
Zkusil jsem
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
A s vaším původním
dd 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, takže to je značný faktor.
Zdá se, že linuxové kanály poskytují čtenáři pouze 4096 bajtů najednou, bez ohledu na to, jak velké byly zápisy autora.
Takže pokus nacpat více než 4096 bajtů do již zaplněné roury na systémové volání write(2) způsobí, že se zapisovač zastaví, dokud čtenář nebude moci vyvolat vícenásobná čtení potřebná k vytažení takového množství dat z roury a provedení jakéhokoli zpracování. to má na mysli.
To mi říká, že na vícejádrových nebo vícevláknových CPU (vyrábí někdo stále jedno jádro, jedno vlákno, CPU?) lze získat větší paralelismus a tedy kratší dobu taktu tím, že každý zapisovač v potrubí zapíše pouze 4096 bajtů najednou, než se vrátí ke zpracování nebo produkci dat, které může udělat pro vytvoření dalšího bloku 4096.