2015-08-07 19 views
5

Chúng tôi có một số kho lưu trữ thực sự lớn trong git, trong đó chúng tôi đã quan sát cách nén từ xa/máy chủ là một nút cổ chai khi nhân bản/kéo. Với cách git phổ biến đã trở thành và đó là sử dụng zlib, có nén zlib này được tối ưu hóa?Git DEFLATE/tối ưu hóa zlib

Một chi tiết giấy Intel làm thế nào họ có thể tăng tốc nén Deflate với một yếu tố của khoảng ~ 4 lần mặc dù với một tỷ lệ nén nhỏ hơn:

http://www.intel.com/content/dam/www/public/us/en/documents/white-papers/ia-deflate-compression-paper.pdf

giấy khác cho thấy tốc độ tăng của ~ 1,8 lần nơi tỷ lệ nén được bảo quản đối với hầu hết nén 'mức' (1-9):

http://www.intel.com/content/dam/www/public/us/en/documents/white-papers/zlib-compression-whitepaper-copy.pdf

tối ưu hóa sau này là có vẻ như sẵn trên github: 01.

zlib có vẻ khá cũ (trong ngành công nghiệp tốc độ nhanh này) bản phát hành mới nhất là từ tháng 4 năm 2013. Đã có bất kỳ nỗ lực nào để tối ưu hóa SIMD zlib cho các thế hệ bộ xử lý mới không? Hoặc là có lựa chọn thay thế để sử dụng zlib trong git?

Tôi hiểu rằng bạn có thể chỉ định mức nén trong git sẽ tác động đến tốc độ và tỷ lệ nén. Tuy nhiên, ở trên cho thấy có thể thực hiện các cải tiến hiệu suất khá lớn trên zlib mà không làm giảm tỷ lệ nén.

Vì vậy, để tóm tắt lại, có bất kỳ triển khai git hiện có nào sử dụng giải pháp thay thế zlib hoặc zlib được tối ưu hóa cao không?

PS: Có vẻ như rất nhiều nhà phát triển/máy chủ sẽ được hưởng lợi từ điều này (thậm chí phát thải khí nhà kính;)).

Trả lời

0

Tôi không biết bất kỳ triển khai git nào bằng cách sử dụng zlib được tối ưu hóa hoặc các lựa chọn thay thế. Tuy nhiên, tôi đã thực hiện một số điều tra về nén và cân bằng giữa mức nén và tốc độ và nếu bạn muốn cải thiện hiệu suất đáng kể, bạn sẽ có kết quả tốt hơn với thuật toán mới được thiết kế với tốc độ cao hơn là cố gắng tối ưu hóa thuật toán hiện tại. LZ4 là một ví dụ điển hình về thuật toán nén được thiết kế với tốc độ là ưu tiên trên tỷ lệ nén.

Bản chất của thuật toán nén có nghĩa là chúng không có xu hướng song song hoặc SIMDify (thực sự là một loại song song) rất hiệu quả, đặc biệt nếu chúng không được thiết kế với mục tiêu đó. Nén bởi bản chất của nó liên quan đến phụ thuộc dữ liệu nối tiếp trên một dòng.

Một điều cần xem xét với thuật toán nén là liệu có nên ưu tiên tốc độ nén hoặc giải nén hay không. Nếu nút cổ chai của bạn là thời gian máy chủ nén dữ liệu thì bạn muốn tập trung vào nén nhanh nhưng trong các trường hợp khác, bạn nén một lần và giải nén thường xuyên (tải nội dung trò chơi hoặc tìm nạp trang web tĩnh), thì bạn có thể muốn ưu tiên tốc độ giải nén.

+0

Cảm ơn, tôi hiểu, liên quan đến điều này tôi có thể hỏi tại sao "đồng bằng" không được nén trước trong git?Theo như tôi hiểu kho git chỉ lưu trữ các đối tượng nén, tại sao nó lại có giải nén và nén khi gửi cho một máy khách? – nietras

+0

Tuy nhiên, khi các liên kết hiển thị với một số sửa đổi, việc nén/giải nén có thể được thực hiện nhanh hơn với các hướng dẫn SIMD, đó là những gì Intel đã hiển thị. – nietras

4

Có những đóng góp thực tế cho việc giảm zlib từ Intel chưa được tích hợp. Bạn có thể xem this fork of zlib có một số tích hợp thử nghiệm các cải tiến của Intel và Cloudfare để nén. Bạn có thể thử biên dịch với git để xem nó như thế nào.

zlib lớn hơn bạn nghĩ. Hầu hết các mã nén là tương đối không thay đổi từ 20 năm trước. Giải nén được viết lại khoảng 12 năm trước.

+0

Cảm ơn! Điều này có vẻ thú vị. Tôi có bất kỳ lý do tại sao điều này không nhận được nhiều sự quan tâm hoặc tại sao nỗ lực không được thực hiện để tích hợp điều này vào thư viện zlib chính? – nietras