Kompresja adaptacyjna do procesora

10

Załóżmy, że muszę wysłać niektóre dane z jednego komputera do drugiego, za pośrednictwem dość szybkiej sieci ... na przykład standardowe połączenie 100 Mb / s (~ 10 MB / s). Moje napędy dyskowe są standardowymi dyskami twardymi, więc ich prędkość wynosi od 30 MB / s do 100 MB / s. Sądzę więc, że kompresja danych w locie może pomóc.

Ale ... Nie chcę być ograniczany przez procesor. Jeśli wybiorę algorytm intensywnie obciążający procesor, transfer będzie przebiegał wolniej niż bez kompresji.

Jest to trudne w przypadku kompresorów takich jak GZIP i BZIP2, ponieważ zwykle ustawiasz siłę kompresji raz dla całego transferu, a moje strumienie danych są czasami łatwe, czasem trudne do kompresji - to sprawia, że ​​proces nie jest optymalny, ponieważ czasami nie używam pełnego procesora, a czasem przepustowość nie jest w pełni wykorzystywana.

Czy istnieje program do kompresji, który dostosowałby się do bieżącego procesora / przepustowości i trafił w najlepsze miejsce, aby transfer był optymalny? Idealnie dla Linuksa, ale wciąż jestem ciekawy wszystkich rozwiązań. Chciałbym zobaczyć coś kompatybilnego z dekompresorami GZIP / BZIP2, ale nie jest to konieczne.

Chciałbym więc zoptymalizować całkowity czas przesyłania, a nie tylko ilość bajtów do wysłania.

Nie potrzebuję też dekompresji w czasie rzeczywistym ... wystarczy kompresja w czasie rzeczywistym. Host docelowy może przetwarzać dane później w wolnym czasie. Wiem, że niewiele się to zmienia (kompresja wymaga zwykle dużo więcej procesora niż dekompresji), ale jeśli istnieje rozwiązanie, które mogłoby wykorzystać ten fakt, tym lepiej.

Za każdym razem, gdy przesyłam różne dane, i naprawdę chcę, aby te jednorazowe transfery były jak najszybsze. Więc nie skorzystam z szybszego uzyskiwania wielu przelewów z powodu silniejszej kompresji.

Dzięki,

liori
źródło
1
+1 interesujący i potencjalnie przydatny pomysł. Jeśli znajdziesz jakieś dobre sposoby, aby to zrobić, chciałbym o tym usłyszeć.
David Cary,

Odpowiedzi:

3

Jest to aktualny przedmiot badań - przede wszystkim w obszarze sieci czujników, w których celem jest zminimalizowanie zużycia energii, a nie maksymalizacja przepustowości. Zasada kompresji adaptacyjnej jest jednak taka sama.

Oto ostatni artykuł profesora z USC .

Może mógłbyś spróbować wdrożyć jego algorytm? Jestem pewien, że wiele osób byłoby zainteresowanych dobrą implementacją.

sml
źródło
Chciałbym, gdybym mógł ... obowiązują tu jednak zwykłe ludzkie ograniczenia czasowe. Nadal mogę go jako pierwszy przetestować ;-) Dziękuję za linki do artykułów, mogę spróbować znaleźć inne osoby, które mogą być zainteresowane.
liori
2

Hum, to pytanie jest starsze niż rok, więc może minąć niezauważone:

W każdym razie Google niedawno opublikował Snappy'ego, który może być dokładnie tym, czego szukasz, a mianowicie:

[...] Nie ma na celu maksymalnej kompresji ani kompatybilności z żadną inną biblioteką kompresji; zamiast tego dąży do bardzo dużych prędkości i rozsądnej kompresji. Na przykład, w porównaniu do najszybszego trybu zlib, Snappy jest o rząd wielkości szybszy dla większości danych wejściowych, ale uzyskane skompresowane pliki są od 20% do 100% większe [...]

Jest zaimplementowany w C ++ z powiązaniami dostępnymi dla C i szeregu innych języków.

phw
źródło
Och, nie, nie zostanie to zauważone, przynajmniej przeze mnie ;-) I wygląda na to, że nie jest adaptacyjne w sensie, którego szukam - jest po prostu szybkie.
liori