So sánh hiệu suất Gzip vs Bzip2 vs XZ

Tác giả sysadmin, T.Một 01, 2023, 02:22:25 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

So sánh hiệu suất Gzip vs Bzip2 vs XZ


Gzip, Bzip2 và XZ đều là những công cụ nén phổ biến được sử dụng trong hệ điều hành dựa trên UNIX, nhưng bạn nên sử dụng công cụ nào? Ở đây chúng ta sẽ định chuẩn và so sánh chúng với nhau để có ý tưởng về sự đánh đổi giữa mức độ nén và thời gian cần thiết để đạt được nó.

Để biết thêm thông tin về cách sử dụng gzip, bzip2 hoặc xz, hãy xem hướng dẫn của chúng tôi bên dưới:

  • 11 ví dụ Gzip đơn giản
  • 10 ví dụ Bzip2 đơn giản
  • 13 ví dụ về XZ đơn giản

1. Máy chủ thử nghiệm

Máy chủ thử nghiệm đang chạy CentOS 7.1.1503 với kernel 3.10.0-229.11.1 đang được sử dụng, tất cả các bản cập nhật cho đến nay đều được áp dụng đầy đủ. Máy chủ có 4 lõi CPU và 16GB bộ nhớ khả dụng, trong quá trình thử nghiệm chỉ sử dụng một lõi CPU vì tất cả các công cụ này đều chạy theo luồng đơn theo mặc định, trong khi thử nghiệm lõi CPU này sẽ được sử dụng hết. Với XZ, có thể chỉ định số lượng luồng sẽ chạy, điều này có thể giúp tăng đáng kể hiệu suất, để biết thêm thông tin, hãy xem ví dụ 9 tại đây.

Tất cả các thử nghiệm đã được thực hiện trên linux-3.18.19.tar, một bản sao của nhân Linux từ   Đăng nhập để xem liên kết. Tệp này có kích thước 580.761.600 Byte trước khi nén.

2. Quy trình đo điểm chuẩn

Tệp linux-3.18.19.tar đã được nén và giải nén 9 lần mỗi lần bằng gzip, bzip2 và xz ở mỗi mức nén có sẵn từ 1 đến 9. Mức nén 1 cho biết quá trình nén sẽ nhanh nhất nhưng tỷ lệ nén sẽ không càng cao thì dung lượng file càng lớn. Mặt khác, mức nén 9 là mức nén tốt nhất có thể, tuy nhiên sẽ mất nhiều thời gian nhất để hoàn thành.

Ở đây có một sự đánh đổi quan trọng giữa các mức độ nén giữa thời gian xử lý của CPU và tỷ lệ nén. Để có tỷ lệ nén cao hơn và tiết kiệm dung lượng ổ đĩa lớn hơn, sẽ cần nhiều thời gian xử lý CPU hơn. Để tiết kiệm và giảm thời gian xử lý của CPU, có thể sử dụng mức nén thấp hơn, điều này sẽ dẫn đến tỷ lệ nén thấp hơn, sử dụng nhiều dung lượng đĩa hơn.

Mỗi lần chạy lệnh nén hoặc giải nén, lệnh 'thời gian' được đặt ở phía trước để chúng tôi có thể đo chính xác thời gian lệnh thực thi.

Dưới đây là các lệnh được chạy cho cấp độ nén 1:

Mã nguồn [Chọn]
time bzip2 -1v linux-3.18.19.tar
time gzip -1v linux-3.18.19.tar
time xz -1v linux-3.18.19.tar

Tất cả các lệnh được chạy với lệnh thời gian, mức độ chi tiết và mức độ nén -1 được tăng dần lên đến -9. Để giải nén, lệnh tương tự đã được sử dụng với cờ -d.

Các phiên bản của các công cụ này là gzip 1.5, bzip2 1.0.6 và xz (XZ Utils) 5.1.2alpha.

3. Kết quả

Dữ liệu thô tạo ra các biểu đồ bên dưới đã được cung cấp trong các bảng bên dưới và cũng có thể được truy cập trong bảng tính này.

3.1. Kích thước nén

Bảng bên dưới cho biết kích thước tính bằng byte của tệp linux-3.18.19.tar sau khi nén, cột đầu tiên được đánh số 1..9 hiển thị mức nén được truyền vào công cụ nén.


3.2. Thời gian nén

Trước tiên, chúng ta sẽ bắt đầu với thời gian nén, biểu đồ này cho biết mất bao lâu để quá trình nén hoàn tất ở mỗi cấp độ nén từ 1 đến 9.



Cho đến nay, chúng ta có thể thấy rằng gzip mất nhiều thời gian hơn để hoàn thành khi mức độ nén tăng lên, bzip2 không thay đổi nhiều, trong khi xz tăng khá đáng kể sau khi mức độ nén là 3.

3.3. Tỷ lệ nén

Bây giờ chúng ta đã có ý tưởng về thời gian nén mất bao lâu, chúng ta có thể so sánh điều này với mức độ nén của tệp. Tỷ lệ nén biểu thị tỷ lệ phần trăm mà tệp đã được giảm xuống. Ví dụ: nếu tệp 100mb đã được nén với tỷ lệ nén là 25%, điều đó có nghĩa là phiên bản nén của tệp là 25mb.



Xu hướng chung ở đây là áp dụng mức nén càng cao thì tỷ lệ nén càng thấp cho thấy kích thước tệp tổng thể càng nhỏ. Trong trường hợp này, xz luôn cung cấp tỷ lệ nén tốt nhất, theo sát là bzip2 với gzip ở vị trí cuối cùng, tuy nhiên, như thể hiện trong biểu đồ thời gian nén, xz mất nhiều thời gian hơn để có được những kết quả này sau mức nén 3.

3.4. Tốc độ nén

Tốc độ nén tính bằng MB mỗi giây cũng có thể được quan sát.



3.5. Thời gian giải nén

Tiếp theo là thời gian giải nén của mỗi tệp được nén ở một mức độ nén cụ thể.



Trong mọi trường hợp, tệp được giải nén nhanh hơn nếu nó được nén với mức nén cao hơn. Do đó, nếu bạn định phân phát một tệp nén qua Internet nhiều lần thì có thể nên nén tệp đó bằng xz với mức nén là 9 vì điều này sẽ làm giảm băng thông theo thời gian khi truyền tệp và cũng sẽ nhanh hơn cho mọi người giải nén đi.

3.6. Tốc độ giải nén

Tốc độ giải nén tính bằng MB mỗi giây cũng có thể được quan sát.



4. Hiệu suất khác biệt và so sánh

Theo mặc định, khi mức nén không được chỉ định, gzip sử dụng -6, bzip2 sử dụng -9 và xz sử dụng -6. Lý do cho điều này là khá rõ ràng dựa trên kết quả. Đối với gzip và xz -6 là phương pháp nén mặc định cung cấp mức độ nén tốt nhưng không mất quá nhiều thời gian để hoàn thành, đây là điểm đánh đổi hợp lý vì các mức nén cao hơn sẽ mất nhiều thời gian hơn để xử lý. Mặt khác, Bzip2 được sử dụng tốt nhất với mức nén mặc định là 9 cũng như được khuyến nghị trong trang thủ công, kết quả ở đây xác nhận điều này, tỷ lệ nén tăng lên nhưng thời gian thực hiện gần như giống nhau và chênh lệch ít hơn một giây giữa cấp độ 1 đến 9.

Nói chung xz đạt được mức độ nén tốt nhất, tiếp theo là bzip2 và sau đó là gzip. Tuy nhiên, để đạt được khả năng nén tốt hơn, xz thường mất nhiều thời gian nhất để hoàn thành, tiếp theo là bzip2 và sau đó là gzip.

xz mất nhiều thời gian hơn với mức nén mặc định là 6 trong khi bzip2 chỉ lâu hơn một chút so với gzip ở mức nén 9 và nén tốt hơn một chút, trong khi sự khác biệt giữa bzip2 và xz ít hơn sự khác biệt giữa bzip2 và gzip bzip2 một sự đánh đổi tốt để nén.

Điều thú vị là mức nén xz thấp nhất là 1 dẫn đến tỷ lệ nén cao hơn gzip với mức nén là 9 và thậm chí còn hoàn thành nhanh hơn. Do đó, sử dụng xz với mức nén là 1 thay vì gzip để có tỷ lệ nén tốt hơn trong thời gian nhanh hơn.

Dựa trên những kết quả này, bzip2 là nền tảng tốt để nén, gzip chỉ nhanh hơn một chút trong khi xz có thể không thực sự xứng đáng với tỷ lệ nén mặc định cao hơn là 6 vì mất nhiều thời gian hơn để hoàn thành để đạt được thêm một chút.

Tuy nhiên, giải nén bằng bzip2 mất nhiều thời gian hơn xz hoặc gzip, xz là nền tảng tốt ở đây trong khi gzip lại là nhanh nhất.

Vậy bạn nên sử dụng cái nào? Điều quan trọng là sử dụng đúng công cụ cho công việc và tập dữ liệu cụ thể mà bạn đang làm việc.

Nếu bạn đang nén nhanh các tệp một cách tương tác thì bạn có thể muốn thực hiện việc này nhanh chóng với gzip -6 (mức nén mặc định) hoặc xz -1, tuy nhiên, nếu bạn đang định cấu hình xoay vòng nhật ký sẽ tự động chạy qua đêm khi sử dụng ít tài nguyên thì có thể chấp nhận sử dụng nhiều tài nguyên CPU hơn với xz -9 để tiết kiệm dung lượng lớn nhất có thể. Ví dụ:   Đăng nhập để xem liên kết nén nhân Linux bằng xz, trong trường hợp này, việc dành thêm thời gian để nén tệp tốt một lần sẽ hợp lý khi nó sẽ được tải xuống và giải nén hàng nghìn lần dẫn đến tiết kiệm băng thông nhưng vẫn có tốc độ giải nén tốt.

Dựa trên các kết quả ở đây, nếu bạn chỉ muốn nén và giải nén các tệp nhanh nhất có thể mà không cần quan tâm đến tỷ lệ nén, thì gzip là công cụ dành cho bạn. Nếu bạn muốn có tỷ lệ nén tốt hơn để tiết kiệm nhiều dung lượng đĩa hơn và sẵn sàng dành thêm thời gian xử lý để có được nó thì xz sẽ là lựa chọn tốt nhất. Mặc dù xz mất nhiều thời gian nhất để nén ở các mức nén cao hơn, nhưng nó có tốc độ giải nén khá tốt và nén khá nhanh ở các mức thấp hơn. Bzip2 cung cấp một sự cân bằng tốt giữa tỷ lệ nén và tốc độ xử lý, tuy nhiên, quá trình giải nén sẽ mất nhiều thời gian nhất nên đây có thể là một lựa chọn tốt nếu nội dung đang được nén sẽ không được giải nén thường xuyên.

Cuối cùng, tùy chọn tốt nhất sẽ phụ thuộc vào những gì bạn đang theo đuổi giữa thời gian xử lý và tỷ lệ nén. Với dung lượng ổ đĩa liên tục trở nên rẻ hơn và có sẵn ở các kích thước lớn hơn, bạn có thể tiết kiệm được một số tài nguyên CPU và thời gian xử lý để lưu trữ các tệp lớn hơn một chút. Bất kể bạn sử dụng công cụ nào, tính năng nén là một nguồn tài nguyên tuyệt vời để tiết kiệm dung lượng lưu trữ.