CPU 대응 압축 … 나는 CPU에

표준 100Mbit 연결 (~ 10MB / s)과 같이 매우 빠른 네트워크를 통해 한 컴퓨터에서 다른 컴퓨터로 데이터를 보내야한다고 가정 해 봅시다. 내 디스크 드라이브는 표준 HDD이므로 속도는 30MB / s에서 100MB / s 사이입니다. 따라서 데이터를 즉시 압축하면 도움이 될 것 같습니다.

그러나 … 나는 CPU에 의해 제한되고 싶지 않습니다. CPU를 많이 사용하는 알고리즘을 선택하면 실제로 압축이없는 것보다 전송 속도가 느려집니다.

GZIP 및 BZIP2와 같은 압축기에서는 일반적으로 전체 전송에 대해 압축 강도를 한 번 설정하고 데이터 스트림이 때때로 쉽고 압축하기가 어렵 기 때문에 어려움이 있습니다. 때로는 대역폭이 부족합니다.

현재 CPU / 대역폭에 적응하고 스위트 스폿에 도달하여 전송이 최적이되는 압축 프로그램이 있습니까? 이상적으로는 Linux에 적합하지만 여전히 모든 솔루션에 대해 궁금합니다. GZIP / BZIP2 압축 해 제기와 호환되는 것을보고 싶지만 반드시 그런 것은 아닙니다.

그래서 단순히 전송할 바이트의 양이 아니라 총 전송 시간을 최적화하고 싶습니다.

또한 실시간 압축 풀기가 필요하지 않습니다 … 실시간 압축이면 충분합니다. 대상 호스트는 나중에 여분의 시간에 데이터를 처리 할 수 ​​있습니다. 나는 이것이 많이 변하지 않는다는 것을 알고 있습니다 (압축은 일반적으로 압축 해제보다 CPU를 많이 사용합니다).하지만이 사실을 사용할 수있는 솔루션이 있다면 더 좋습니다.

다른 데이터를 전송할 때마다 가능한 한 빨리 이러한 일회성 전송을 원합니다. 따라서 더 강한 압축으로 인해 여러 전송을 더 빨리 얻는 데 도움이되지 않습니다.

감사,



답변

이는 현재 연구 대상이며, 주로 처리량을 최대화하기보다는 전력 사용량을 최소화하는 것이 목표 인 센서 네트워크 영역에서 이루어집니다. 그러나 적응 압축의 원리는 동일합니다.

다음USC 교수 의 최근 논문입니다 .

아마도 그의 알고리즘을 구현할 수 있습니까? 나는 좋은 구현에 관심이 많은 사람들이있을 것이라고 확신합니다.


답변

흠,이 질문은 이제 1 년이 넘었으므로, 이것은 눈에 띄지 않을 수도 있습니다.

어쨌든 Google은 최근 Snappy 를 게시했습니다 .

[…] 최대 압축 또는 다른 압축 라이브러리와의 호환성을 목표로하지 않습니다. 대신, 매우 빠른 속도와 합리적인 압축을 목표로합니다. 예를 들어, 가장 빠른 zlib 모드에 비해 Snappy는 대부분의 입력에서 훨씬 빠르지 만 결과 압축 파일은 20 %에서 100 %까지 커집니다.

C 및 기타 다양한 언어에 사용할 수있는 바인딩으로 C ++로 구현됩니다.