Tôi đã có một ý tưởng để nhanh chóng điểm chuẩn một số chương trình giải nén. Ví dụ: đối với gz, tôi sẽ chạy lệnh:
timeout 10 zcat foo.gz | wc -c
Mà sẽ đo lượng dữ liệu mà bộ giải nén có thể trích xuất trong 10 giây.
Vấn đề duy nhất là, nó không hoạt động: vì zcat bị giết, wc cũng bị giết, vì vậy tôi không nhận được số byte, chỉ là một Terminated
tin nhắn.
Vì vậy, câu hỏi là: có cách nào để lấy số đếm từ wc , bằng cách chặn tín hiệu bằng cách nào đó hoặc sử dụng thay thế thay vì wc in kết quả ngay cả khi nhận được tín hiệu hạn.
Tất nhiên, có những lựa chọn thay thế:
Viết vào một tệp tạm thời:
timeout 10 zcat foo.gz > /dev/shm/x ; du -sb /dev/shm/x ; rm -r /dev/shm/x
Vấn đề với điều này là sử dụng rất nhiều bộ nhớ và cũng có thể có một số hình phạt về hiệu suất.Thay vào đó, sử dụng ulimit:
ulimit -t 10; zcat foo.gz | wc -c
Điều này cũng hoạt động, nhưng chỉ đo thời gian cpu, do đó làm chậm do I / O (ví dụ do quá trình nén kém hơn và không thể đọc thêm byte từ đĩa).Tạo các tệp thử nghiệm nhỏ hơn:
Tất nhiên, điều này có thể hoạt động và có thể là giải pháp tốt nhất. Tuy nhiên, điều này tạo ra rất nhiều tập tin tạm thời.