Cách làm 7-Zip nhanh hơn


35

Tôi thường sử dụng WinRAR trên 7-Zip đơn giản vì nó nhanh hơn và chỉ kém hiệu quả hơn khi nén. Tôi đã thực hiện một vài thử nghiệm trên các loại tệp và kích cỡ khác nhau so sánh cài đặt mặc định 7-Zip và WinRAR trên mức nén thông thường và mức nén tốt nhất của chúng, và trong nhiều trường hợp, WinRAR nhanh hơn 50% và trong một số trường hợp, nó thực sự nhanh hơn 100%. Nhưng, tôi thích FOSS hơn. Vì vậy, đây là những câu hỏi của tôi:

  1. Có cách nào để tăng tốc 7-Zip không? Tôi muốn nó ít nhất ngang bằng với tốc độ của WinRAR
  2. Có cách nào để tạo các phân đoạn phục hồi trong 7-Zip như bạn có thể làm trong WinRAR không? Tôi đã không nhìn thấy bất kỳ, nhưng tôi đoán nó có thể là một điều dòng lệnh.
  3. Tôi đã thử nghiệm WinRAR và 7-Zip bằng cách sử dụng phiên bản ổn định mới nhất của từng loại (4 chấm-một cái gì đó với 7-Zip). Là bản phát hành beta 9.x nhanh hơn đáng kể khi nén?

Tôi đang nói về nhanh hơn ở một cài đặt tương đương trong WinRAR, không chỉ hạ thấp mức nén tối thiểu.

Nếu có vấn đề, tôi sử dụng Intel i7 720 (1.6 GHz) / (2.8 GHz) lõi tứ với RAM DDR3 4 GB và phiên bản 64-bit của 7-Zip, và Debian x64 5.0.4 khởi động kép và Windows 7 Nhà.


1
Về # 2 - 7-zip hiện không có bất kỳ loại "hồ sơ phục hồi" hoặc "ecc" nào. Bạn sẽ cần phần mềm của bên thứ 3 như QuickPar / MultiPar hoặc ICE ECC, nhưng sau đó nó không phải là một phần của kho lưu trữ.
afrazier

Câu trả lời:


36

Nếu bạn nhận được bản 7-Zip 9.13 beta, bạn có thể thay đổi loại lưu trữ thành LZMA2 và do đó có thể sử dụng bao nhiêu luồng tùy thích, mặc dù việc sử dụng bộ nhớ tăng lên một cách phi thường.

Cài đặt bản beta, nhấp chuột phải vào nội dung bạn muốn lưu trữ, sau đó trong menu contect 7-Zip, nhấp vào "Thêm vào lưu trữ ..." và bạn sẽ nhận được một cái gì đó tương tự như cửa sổ bên dưới. Ở phía bên trái trong Phương thức nén, bạn sẽ tìm thấy "LZMA2" sẽ cho phép bạn thay đổi số lượng chủ đề sẽ là một tùy chọn xa hơn một chút.

Điều này có khả năng tăng hiệu năng rất lớn trên> bộ xử lý 2 lõi vì nó có thể được điều chỉnh tốt hơn cho hệ thống của bạn và phương pháp nén thông thường chỉ có thể xử lý tối đa 2 luồng.

"/ 1" bạn thấy ở bên phải số hộp chọn chủ đề trong ảnh là số lượng bộ xử lý trong hệ thống của bạn và do đó số lượng chủ đề được đề xuất. I7 của tôi là bộ xử lý lõi tứ nhưng có khả năng siêu phân luồng (thực sự giúp ích ở đây btw) vì vậy nó hiển thị là "/ 8"

văn bản thay thế


Anandtech.com đã sử dụng 7-Zip để giúp đánh giá các cải tiến hiệu suất được tìm thấy trong CPU đa lõi và đa luồng, điều mà theo lý thuyết thì phần lớn là phần lớn trong phần mềm của thế hệ này.
kmarsh

5
Dòng lệnh arg để kích hoạt LZMA2 là gì?
djangofan

@Monkubai: Ở i7 4c-8t trong văn phòng của tôi, tôi không thể có được 7-zip chạy 8 lõi đầy đủ ở chế độ LZMA2 cho dù cài đặt được đặt. Chỉ có phương pháp cho phép nó chạy tất cả 8 luồng đang sử dụng thuật toán BZip2 (từ menu thả xuống) có tỷ lệ nén thấp hơn.
Edward

@Edward bạn đang sử dụng phiên bản nào? Vào 9.20, nếu tôi chọn lzma2 từ danh sách đó, tôi có tùy chọn sử dụng tối đa 8 lõi.
Mokubai

2
@Mokubai 9.20 phiên bản chính thức. Và không có gì sai với UI đồ họa, nó vẫn hiển thị 8/8 thông số lõi trong bảng cài đặt nhưng khi xử lý nó thực sự chỉ sử dụng <20% cpu. Tôi đã thực hiện một nghiên cứu nhanh về SU cho vấn đề này nhưng vẫn chưa tìm ra lý do cho sự kỳ quặc đó. Chỉ cần biết rằng nếu tôi sử dụng dòng lệnh 7z với tham số như -m0 = lzma2 -mmt = 8 thì nén tối đa hóa CPU 100% nhưng một khi tôi chuyển sang GUI, nó sẽ trở về chế độ một luồng hoặc một cái gì đó tương tự ... sử dụng CPU một cách rất kém hiệu quả (<20%).
Edward

31

Vì mỗi luồng dường như nén nhiều tệp cùng một lúc, điều tốt nhất bạn có thể làm để tăng hiệu suất của các công việc zip rất lớn là đặt các luồng thành 1, để chắc chắn rằng ổ cứng của bạn sẽ tìm kiếm một tệp cùng một lúc.

Chúng tôi cải thiện hiệu suất trên tất cả các quy trình sao lưu zip hàng ngày bằng cách thêm -mmt=offvào dòng lệnh 7-zip. Bản sao lưu của chúng tôi về "kho SVN trực quan", được tạo từ nhiều tệp nhỏ, mất từ ​​50 đến 60 phút.

Với -mmt=off, chúng tôi bây giờ luôn luôn làm trong ít hơn năm phút! Và, trong 50 phút này, tất cả các máy chủ của chúng tôi đều rất chậm do các ổ cứng tìm kiếm. Bây giờ, mọi thứ vẫn còn rất nhanh trong năm phút đó.

Đối với mọi thứ bạn làm trên máy, hoạt động của ổ cứng sẽ luôn chậm hơn dung lượng CPU của bạn. Bạn có thể tăng hiệu suất đĩa bằng cách vô hiệu hóa các hoạt động song song và đảm bảo rằng ổ cứng đọc (và ghi) các tệp của bạn từng cái một.

Ngoài ra, tốt hơn là đọc từ đĩa1 và ghi ZIP của bạn vào đĩa2, vì đầu vật lý không chuyển từ đọc sang ghi.

Dòng mẫu để có được tốc độ ZIP tối đa trong khi vẫn giữ hiệu suất máy của bạn:

start "" /wait /belownormal c:\Progra~1\7-Zip\7z.exe a -tzip -mx=1 -mmt=off t:\backup.zip d:\folderToBackup\*

D:T:là 2 đĩa vật lý khác nhau


5
Thật ngạc nhiên khi điều này hoàn toàn ngược lại với câu trả lời được đề xuất, nhưng thực sự là chính xác. Tôi vừa thực hiện một thao tác lưu trữ đi từ 12 giờ xuống còn 2 bằng cách thay đổi sang sử dụng một luồng.
N Jones

2
Thật. Điều này làm việc cho tôi quá. Có lẽ nó có ý nghĩa bởi vì anh ta đang sử dụng -mx=1(gần như không nén). Nếu bạn không nén, phần lớn công việc được thực hiện bởi ổ cứng. Nếu bạn đặt -mx=9bộ xử lý thực sự cần phải làm việc để nén tệp. Tôi sẽ cần phải thử nó, nhưng tùy thuộc vào nút cổ chai là gì (HDD hoặc CPU), nó có thể tốt hơn hoặc xấu hơn.
Diego Jancic

9
Câu trả lời này rất cụ thể đối với một công nghệ lão hóa. Có thể không hữu ích khi thử điều này với SSD vì thời gian tìm kiếm thấp hơn rất nhiều. IOPS ngẫu nhiên ít có khả năng là nút cổ chai. Trường hợp của bạn khá đặc biệt vì bạn thực hiện nén rất ít. Về cơ bản bạn đã làm một bản sao tập tin. Vì vậy, yeah, truy cập tuần tự trên một HD quay rõ ràng là một người chiến thắng. Các giai đoạn 7zip điển hình sẽ có khả năng bị ràng buộc CPU, không bị ràng buộc IO. Vì vậy, sử dụng tất cả các lõi CPU là điều cần thiết. Nhưng đối với những người trong tình huống tương tự, lời khuyên của bạn rất có giá trị.
dss539

1
Sử dụng -mmt=offlà nhanh hơn ngay cả với -m0=lzma2 -mx=5. (Không có -mmt=off: 1m27.811s thực, người dùng 2m4.976, sys 0m3.729s . Với -mmt=off: 1m18.896s thực, người dùng 1m17.160s, sys 0m1.661s )
Ostrokach

Có vẻ như tôi chậm hơn rất nhiều khi giảm các luồng xuống còn 1. Với 1 luồng cho 20 GB tệp, nó đang xử lý với tốc độ khoảng 2 MB / giây. Với 16 luồng, nó được xử lý với tốc độ khoảng 16 MB / giây.
Lightyear Buzz

0

Tất cả các thuật toán nén mà tôi đã sử dụng gần đây (ZIP, RAR, 7z, tar / bzip2) đều bị ràng buộc I / O, không bị ràng buộc CPU. Xem MenuMeter trên máy tính xách tay Mac của tôi cho thấy hoạt động đĩa liên tục, nhưng chỉ hoạt động CPU ít hơn 50%.

Vì vậy, cách để tăng tốc độ nén / giải nén là tăng tốc đĩa của bạn. Điều này không phải lúc nào cũng có thể.

"Giải pháp" của tôi cho việc này là chỉ làm một việc khác trong khi tôi đang nén thứ gì đó. :-)


2
Nếu đĩa I / O là vấn đề của Matt, điều đó có nghĩa là WinRAR bằng cách nào đó có thể đọc từ đĩa nhanh hơn 7Zip trên hệ thống của anh ta ... Điều đó nghe có vẻ không ổn đối với tôi.
trả trước

1
Có thể WinRAR sử dụng I / O đĩa thông minh hơn; Tôi biết zip của Info-ZIP bị cản trở bởi bộ đệm I / O thực sự nhỏ. Nhưng vâng, nó có thể là một sự khác biệt giữa các thuật toán nén.
chrish

7z chắc chắn không bị ràng buộc I / O ngay cả trong chế độ nhanh.
Sange Borsch

Hầu hết các phương pháp bạn đã mô tả không nén song song, do đó chỉ sử dụng 1 lõi CPU của bạn do đó trên máy 2 lõi, bạn nhận được 50%. Tôi e rằng CPU bị ràng buộc trên máy Mac của bạn, không bị ràng buộc IO và hầu hết các máy Mac đều có SSD không thực sự bị tìm kiếm đĩa. 7z có thể nén song song nếu bạn chọn tùy chọn để làm như vậy. (tar, zip, bzip, gzip, xs thường không)
Martin

0

Trong công ty của tôi, chúng tôi đang làm việc với phiên bản 7-zip cũ (4.52 beta) và chúng tôi đang chạy lệnh sau:

"C:\Program Files\7-Zip\7z.exe" a -mx7 -mmt -sfx -xr!*.<exclude_extension> <destination>.exe <source_directory>\* 

Điều này đang hoạt động tốt, nhưng sau khi vừa nâng cấp lên phiên bản mới hơn 16.04 (32 bit), hiệu suất đã giảm đi rất nhiều, vì vậy tôi đã quyết định hạ cấp trở lại phiên bản cũ.


0

Một mẹo nhỏ khác để cải thiện hiệu suất khi bạn sử dụng mã như ví dụ này:

$7zip = "$env:ProgramFiles\7-Zip\7z.exe"
set-alias sz $7zip
$FileZip = "$DiscoZip\temp\$TempFile"
foreach ($DirData in $ListDir) { $out7z = (sz a $FileZip $DirData) }

là, nếu có thể, có trong mảng $ ListDir liệt kê các thư mục theo kích thước, từ nhỏ nhất đến lớn nhất. Điều này xảy ra bởi vì ở mỗi chu trình foreach, 7zip tạo ra một tệp tạm thời lớn hơn (hoặc lớn hơn) so với tệp gốc, sau đó thêm tệp mới vào bên trong chúng. Tôi đã thử với các trường hợp có hai hoặc nhiều thư mục lớn một số MB và một GB nhiều GB và việc tiết kiệm thời gian là theo thứ tự vài phút.


Tôi tin rằng điều này chỉ áp dụng khi thêm tệp vào kho lưu trữ hiện có. Khi thêm nhiều tệp cùng một lúc, chỉ một tệp tạm thời sẽ được sử dụng. Khi tạo một kho lưu trữ mới, một tệp tạm thời sẽ không được sử dụng.
Daniel B

-1

Tôi đoán là việc tăng tốc 7-Zip là không thể nếu không viết lại các thuật toán nén / khử của nó, có thể có một số loại điều chỉnh tăng tốc độ nhưng có lẽ sẽ chỉ tăng 10 hoặc 15%, không phải là khổng lồ Tăng 50-100% mà bạn đang tìm kiếm.


6
Không đúng chút nào. Bạn có thể tăng tốc độ 7-zip một cách ồ ạt bằng cách thay đổi nó khỏi cài đặt mặc định. Trong thực tế, các cài đặt mặc định được điều chỉnh cho kích thước tệp nhỏ nhất (và thuật toán nén chậm nhất - BZip2). Thay đổi nó thành nén ZIP và LZMA thành "Nhanh nhất" làm cho nó nhanh hơn.
NickG 24/2/2015
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.