เพิ่มความเร็วในการบีบอัด gzip


15

เป็นไปได้หรือไม่ที่จะเร่งความเร็ว gzipหรือไม่ที่จะกระบวนการ ?

ฉันกำลังใช้

mysqldump "$database_name" | gzip > $BACKUP_DIR/$database_name.sql.gz

เพื่อสำรองฐานข้อมูลลงในไดเรกทอรี $BACKUP_DIR .

manpage พูดว่า:

- # - fast - best
ควบคุมความเร็วของการบีบอัดโดยใช้ตัวเลขที่ระบุ # โดยที่ -1 หรือ - fast บ่งบอกถึงวิธีการบีบอัดที่เร็วที่สุด (บีบอัดน้อยกว่า) และ -9 หรือ --best ระบุวิธีบีบอัดที่ช้าที่สุด ( การบีบอัดที่ดีที่สุด) ระดับการบีบอัดเริ่มต้นคือ -6 (นั่นคือเอนเอียงไปสู่การบีบอัดสูงที่ค่าใช้จ่ายความเร็ว)

  • การใช้จะมีประสิทธิภาพแค่ไหน--fast?
  • นี่เป็นการลดการใช้ CPU อย่างมีประสิทธิภาพบนคอมพิวเตอร์ที่ทันสมัยหรือไม่?

ผลการทดสอบของฉัน

ฉันไม่ได้สังเกตการเร่งความเร็ว:

  • 7 นาที 47 วินาที (ด้วยอัตราส่วนเริ่มต้น-6)
  • 8 นาที, 36 วินาที (ด้วยอัตราส่วน--fast(= 9))

ดังนั้นจึงดูเหมือนว่าจะใช้การบีบอัดข้อมูลเร็วขึ้นอีกต่อไป

เฉพาะการบีบอัดที่สูงกว่าจะทำให้มันช้าลง:

  • 11 นาที, 57 วินาที (ด้วยอัตราส่วน--best(= 1))

หลังจากได้รับความคิดด้วยlzopฉันทดสอบว่าเกินไปและเร็วขึ้นจริงๆ:

  • 6 นาที, 14 วินาทีด้วย lzop -1 -f -o $BACKUP_DIR/$database_name.sql.lzo

ที่เกี่ยวข้อง: unix.stackexchange.com/questions/87111/…
slm

คุณกังวลเกี่ยวกับเวลา CPU หรือเวลาโดยรวม (นาฬิกา) หรือไม่? - ดีที่สุดคือ 9,
รวดเร็ว

3
หากgzip -1ยังไม่เร็วพอให้ใช้lzop
Stéphane Chazelas

1
นอกจากนี้ยังlz4มีที่เร็วยิ่งขึ้นดูมาตรฐานนี้ แต่ดูเหมือนว่า lzop และ lz4 ต้องการหน่วยความจำมากกว่านี้ มันจะมีปัญหากับ 1GB RAM single-core ของฉันที่ lz4 ใช้หน่วยความจำมากถึง 30 เท่าในการบีบอัดมากกว่า gzip เมื่อฉันบีบอัดฐานข้อมูลขนาดใหญ่บ้างไหม?
rubo77

lz4 ไม่ต้องการหน่วยความจำมากขนาดนั้น หากคุณกำลังใช้ยูทิลิตี้ lz4c หน่วยความจำเกือบทั้งหมดจะถูกจัดสรรสำหรับบัฟเฟอร์ I / O คุณสามารถลดขนาดนั้นได้โดยใช้บัฟเฟอร์ที่เล็กกว่า (ตัวเลือก -B4 สำหรับบัฟเฟอร์ 64KB) เนื่องจากบัฟเฟอร์ที่เล็กลงก็หมายถึงการบีบอัดที่แย่ลงจึงเป็นประโยชน์ในการเปิดใช้การบีบอัดบล็อกแบบบล็อก (ตัวเลือก -BD) ดู: fastcompression.blogspot.fr/2013/08/…
สีฟ้า

คำตอบ:


19

หากคุณมีเครื่องมัลติคอร์ที่ใช้pigzจะเร็วกว่า gzip แบบเดิมมาก

pigz ซึ่งย่อมาจากการใช้งานแบบขนานของ gzip เป็นการแทนที่การทำงานได้อย่างสมบูรณ์สำหรับ gzip ที่ใช้ประโยชน์จากโปรเซสเซอร์หลายตัวและหลายคอร์ไปยังด้ามจับเมื่อทำการบีบอัดข้อมูล pigz เขียนโดย Mark Adler และใช้ไลบรารี zlib และ pthread

Pigz ca ใช้แทนการดรอปอินสำหรับ gzip หมายเหตุมากกว่าการบีบอัดเท่านั้นที่สามารถขนานกันไม่ใช่การบีบอัด

การใช้ pigz บรรทัดคำสั่งจะกลายเป็น

mysqldump "$database_name" | pigz > $BACKUP_DIR/$database_name.sql.gz

สิ่งนี้ยังเพิ่มความเร็วของกระบวนการในแกนเดียวหรือไม่?
rubo77

@ rubo77 - ไม่มีแฟนนี้บีบอัดข้ามหลายแกน
slm

pigzเพิ่มการใช้งาน CPU แต่ลดเวลานาฬิกาที่ใช้กับโปรเซสเซอร์หลายตัว
Stéphane Chazelas

แน่นอนและมักเป็นสิ่งที่ต้องการ และโดยปกติ (ขึ้นอยู่กับฮาร์ดแวร์) การบีบอัด gzip คือ CPU ผูกไว้ (ประสิทธิภาพเธรดเดียว) และการบีบอัด pigz มักถูกผูกไว้กับ IO
มาร์โก

5

จากman gzip:

   -# --fast --best
          Regulate  the  speed  of compression using the
          specified digit #, where -1  or  --fast  indi‐
          cates  the  fastest  compression  method (less
          compression) and -9 or  --best  indicates  the
          slowest compression method (best compression).
          The default compression level is -6 (that  is,
          biased  towards high compression at expense of
          speed).

3

หากคุณต้องการให้เร็วเนื่องจากปัญหาการล็อกฐานข้อมูลและคุณมีดิสก์ที่เร็ว / ใหญ่พอที่จะเก็บข้อมูลที่ไม่มีการบีบอัดไว้ชั่วคราวคุณสามารถลองใช้วิธีนี้แทน:

mysqldump "$database_name" > "$BACKUP_DIR"/"$database_name".sql
nice gzip "$BACKUP_DIR"/"$database_name".sql &

คือเก็บข้อมูลสำรองไว้ก่อน (ซึ่งเร็วกว่าการ gzipping ถ้าดิสก์เร็วและ CPU ช้า) จากนั้นให้ gzipping เกิดขึ้นในพื้นหลัง

สิ่งนี้อาจช่วยให้คุณใช้อัลกอริธึมการบีบอัดที่ดีกว่าเพราะมันไม่สำคัญอีกต่อไป (โดยตรง) ระยะเวลาในการบีบอัด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.