GNU/Linux >> Belajar Linux >  >> Linux

Apakah ada cara untuk meningkatkan kinerja pipa linux?

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 Anda
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 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.


Linux
  1. Apakah Kami Memiliki Undo Di Linux?

  2. Apakah ada cara untuk 'uniq' dengan kolom?

  3. Apakah ada cara untuk memeriksa rpath saat ini di Linux?

  1. Apakah ada log yang merekam shutdown di Linux?

  2. Apakah ada cara untuk mendapatkan CLOCK_TAI yang benar di Linux?

  3. Apakah ada cara untuk memblokir LD_PRELOAD dan LD_LIBRARY_PATH di Linux?

  1. Tingkatkan kinerja sistem Linux dengan noatime

  2. Apakah ada STDCALL di Linux?

  3. Apakah ada cara untuk mendapatkan UID pengguna di mesin Linux menggunakan java?