คำตอบของ @ pdo นั้นดี แต่ก็สามารถเพิ่มความเร็วได้ด้วยบัฟเฟอร์และการบีบอัดที่ดีและเพิ่มแถบความคืบหน้า
บ่อยครั้งที่เครือข่ายเป็นคอขวดและความเร็วแตกต่างกันไปตามเวลา ดังนั้นจึงช่วยในการบัฟเฟอร์ข้อมูลก่อนที่จะส่งผ่านเครือข่าย pv
ซึ่งสามารถทำได้ด้วยกับ
นอกจากนี้เราสามารถเพิ่มความเร็วได้ด้วยอัลกอริธึมการบีบอัดที่เหมาะสม Gzip (เช่นใช้ด้านบน) เป็นอัลกอริธึมการบีบอัดที่รวดเร็ว แต่โดยทั่วไป zstandard ( zstd
) (และสำหรับอัตราส่วนการบีบอัดสูง LZMA / LZMA2 ( xz
) จะบีบอัดได้ดีขึ้นและเร็วขึ้นในเวลาเดียวกันใหม่ xz และ zstd มีการสนับสนุนหลายแกน หากต้องการใช้ gzip กับ pigz หลายแกนสามารถใช้ได้
นี่คือตัวอย่างในการส่งข้อมูลที่มีแถบความคืบหน้าการบีบอัดบัฟเฟอร์และการบีบอัดแบบ zstandard ผ่านเครือข่าย:
tar cf - . | pv -perabs $(du -sk . | cut -f 1)K | zstd -14 --long=31 -T0 | pv -qCB 512M | ssh user@host "cd /wherever && pv -qCB 512M | zstd -cd -T0 --long=31 | tar xf -"
สิ่งแรกpv
คือการแสดงความคืบหน้า ( p ), เวลาโดยประมาณ ( e ), อัตราการถ่ายโอน ( r ), อัตราเฉลี่ย ( a ), ไบต์ที่ถ่ายโอนทั้งหมด ( b ) ขนาดรวมอยู่ที่ประมาณด้วยdu
และเพิ่มไปยังตัวเลือกขนาด ( s ) ความคืบหน้าถูกวัดก่อนการบีบอัดและบัฟเฟอร์ดังนั้นจึงไม่แม่นยำมาก แต่ก็ยังมีประโยชน์
zstd
จะใช้กับการตั้งค่าการบีบอัดที่14 จำนวนนี้สามารถลดหรือเพิ่มขึ้นอยู่กับเครือข่ายและความเร็วของ CPU ดังนั้น zstd จะเร็วกว่าความเร็วเครือข่ายเล็กน้อย ด้วยสี่คอร์ใน Haswell 3.2 GHz CPU 14ให้ความเร็วประมาณ 120 MB / s ในตัวอย่างโหมดยาว31 (ใช้หน้าต่าง 2 GB ต้องการ RAM จำนวนมาก แต่ดีมากเช่นการบีบอัดฐานข้อมูลทิ้ง) ใช้ T0ตัวเลือกการกำหนดปริมาณของกระทู้ไปยังหมายเลขของแกน สิ่งหนึ่งที่ควรระวังคือเมื่อใช้โหมดความยาวร่วมกับการตั้งค่าเหล่านี้จะใช้หน่วยความจำจำนวนมาก
ปัญหากับ zstd คือระบบปฏิบัติการส่วนใหญ่ไม่ได้จัดส่งมาพร้อมกับรุ่น> = 1.3.4 เวอร์ชั่นนี้จำเป็นสำหรับการรองรับมัลติคอร์และการรองรับที่ยาวนาน หากไม่พร้อมที่จะสามารถรวบรวมและติดตั้งจากhttps://github.com/facebook/zstdmake -j4 && sudo make install
มีเพียง แทนที่จะเป็น zstd เราสามารถใช้ xz หรือ pigz ได้ xz ช้า แต่บีบอัดได้ดีมาก (ดีในการเชื่อมต่อที่ช้า) pigz / gzip นั้นเร็ว แต่บีบอัดไม่ค่อยดี
pv
จะถูกใช้อีกครั้ง แต่สำหรับการบัฟเฟอร์ ( q
สำหรับC
โหมดเงียบสำหรับโหมดไม่ต่อเนื่อง [ต้องการการบัฟเฟอร์เสมอ] และB
เพื่อกำหนดขนาดบัฟเฟอร์)
ในตัวอย่างบัฟเฟอร์ยังใช้ในฝั่งผู้รับ สิ่งนี้มักไม่จำเป็น (เพราะการคลายการบีบอัดและความเร็วในการเขียนฮาร์ดดิสก์นั้นสูงกว่าความเร็วเครือข่ายมากที่สุด) แต่โดยทั่วไปจะไม่เป็นอันตรายเช่นกัน