Làm thế nào để giải nén một tập tin với tỷ lệ phần trăm tối thiểu?


7

Tôi đang sử dụng bzip2 để nén một tập tin, quá trình này mất hơn 100% cpu. Có cách nào để chạy bzip2 với mức tối thiểu CPU.

ubuntu  cpu  gzip  bzip2 

1
Bạn có đặc biệt hỏi làm thế nào để lãng phí thời gian CPU có thể hoạt động bằng cách thay thế nó không? Tại sao?!
David Schwartz

Câu trả lời:


11

Là quá trình này can thiệp vào các quy trình khác trên hệ thống của bạn? Tại sao bạn muốn giới hạn CPU bzip2 sử dụng?

Bạn có thể sử dụng nicelệnh để thay đổi mức độ ưu tiên của quy trình:

$ nice -n 19 bzip2 <file>

Ngoài ra, bạn có thể thử giảm bzip2mức độ nén:

$ bzip2 -1 <file>

Không có may mắn với tốt đẹp. Cho đến khi quá trình này mất hơn 100% cpu.

4
Vâng, có gì khác xảy ra trên hệ thống? Bạn đã không trả lời câu hỏi của tôi - tại sao bạn muốn làm điều này? Tất cả các nicelệnh thực hiện là thay đổi mức ưu tiên, vì vậy nếu không có các tác vụ chuyên sâu về CPU khác xảy ra trên máy chủ thì có, bzip2sẽ sẵn sàng nhận tất cả CPU của bạn và thực sự bạn không thể làm gì về điều đó.
EEAA

6
Để làm rõ những gì EEAA đang nói: không có gì sai khi sử dụng CPU 100%. Đó là những gì bạn muốn bởi vì nó nhanh nhất. Nó sẽ luôn sử dụng CPU 100% khi không có gì khác cho bộ xử lý làm. Khi bộ xử lý có những thứ khác để làm việc, sau đó nó sẽ cân bằng các tác vụ và chia sẻ CPU. Bằng cách đặt giá trị đẹp, bạn đang nói với kernel rằng bzip không quan trọng như các tiến trình khác của bạn, vì vậy nó sẽ cho các tiến trình khác thời gian CPU trước khi đưa nó vào bzip. Đừng lo lắng quá nhiều về tỷ lệ phần trăm.
Tom Marthenal

Cảm ơn @TomMarthenal. Trong sự ngỡ ngàng nửa đêm của tôi, tôi sẽ không thể đưa ra một lời giải thích ngắn gọn như thế. Methinks đến giờ đi ngủ. :)
EEAA

2
@dddddd - Vậy thì đừng lo lắng về điều đó. Nếu bạn chạy lệnh bzip với nice 19, thì nó sẽ được ưu tiên ít hơn nhiều trong trình lập lịch của kernel so với các tiến trình khác. Tuy nhiên, bạn vẫn cần phải lo lắng về những thứ như IO tranh chấp, vì nén / giải nén cũng khá chuyên sâu IO.
EEAA

5

Khuyến nghị: sử dụng các ưu tiên

Ngoài câu trả lời @EEAA, nếu bạn muốn ưu tiên tối đa cho quy trình bzip, để khi các quy trình khác bị ảnh hưởng ở mức tối thiểu, bạn nên sử dụng ionicethêm. Lưu ý, điều đó ionicechỉ hữu ích khi sử dụng bộ lập CFQlịch IO (mặc định trên Kernel, nhưng điều này có thể đã được điều chỉnh bởi cài đặt của bạn). ionicesẽ không có hiệu lực AFAIK nếu bạn đang sử dụng bộ lập lịch deadlinehoặc noopIO.

Để xác minh trình lập lịch IO nào bạn đang sử dụng:

cat /sys/block/<DEVICE>/queue/scheduler

<DEVICE>thiết bị đĩa cứng của bạn ở đâu , ví dụsda

Hiện đang sử dụng ionice, bạn muốn đặt mức ưu tiên IO thấp nhất là lớp 3. Và bạn có thể kết hợp nó với nicenhau:

$ nice -n 19 ionice -c3 bzip2 <file>

Như Tom và EEAA đã giải thích, điều này là đủ tốt. Nhân sẽ đảm bảo rằng bzip có thể chạy nhanh nhất có thể khi không có quá trình nào khác cần CPU hoặc IO. Nhưng nó sẽ ưu tiên cho các quy trình khác nếu họ cần. Đây là sự lựa chọn được đề nghị.

Thay thế: cpulimit - giới hạn việc sử dụng CPU theo tỷ lệ

Bây giờ bạn vẫn có thể sử dụng "giới hạn CPU" trên bzip. Đó không phải là lựa chọn của tôi, nhưng nếu bạn muốn thử nghiệm hoặc thích nó hơn, bạn nên sử dụng cpulimit. Tuy nhiên, nó không thường được đóng gói hoặc cài đặt Linux mặc định. Vì vậy, bạn sẽ phải cài đặt nó. NixCraft có một tài liệu tốt về cách cài đặt và sử dụng cpulimit.
Trang web chính thức là: http://cpulimit.sourceforge.net/

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.