Kompresi adaptif CPU

10

Anggap saya perlu mengirim beberapa data dari satu komputer ke komputer lain, melalui jaringan yang cukup cepat ... misalnya koneksi 100Mbit standar (~ 10MB / s). Drive disk saya adalah HDD standar, sehingga kecepatannya berkisar antara 30MB / s dan 100MB / s. Jadi saya kira mengompresi data dengan cepat bisa membantu.

Tapi ... Saya tidak ingin dibatasi oleh CPU. Jika saya memilih algoritma yang intensif pada CPU, transfer sebenarnya akan lebih lambat daripada tanpa kompresi.

Ini sulit dengan kompresor seperti GZIP dan BZIP2 karena Anda biasanya mengatur kekuatan kompresi sekali untuk seluruh transfer, dan aliran data saya terkadang mudah, kadang sulit dikompres - ini membuat proses menjadi tidak optimal karena kadang-kadang saya tidak menggunakan CPU penuh, dan terkadang bandwidth kurang dimanfaatkan.

Apakah ada program kompresi yang akan beradaptasi dengan CPU / bandwidth saat ini dan mencapai sweet spot sehingga transfer akan optimal? Idealnya untuk Linux, tapi saya masih penasaran dengan semua solusi. Saya ingin melihat sesuatu yang kompatibel dengan dekompresor GZIP / BZIP2, tetapi ini tidak perlu.

Jadi saya ingin mengoptimalkan total waktu transfer, bukan hanya jumlah byte yang dikirim.

Juga saya tidak perlu dekompresi waktu nyata ... kompresi waktu nyata sudah cukup. Host tujuan dapat memproses data nanti di waktu luangnya. Saya tahu ini tidak banyak berubah (kompresi biasanya lebih banyak CPU-intensif daripada dekompresi), tetapi jika ada solusi yang bisa menggunakan fakta ini, semua lebih baik.

Setiap kali saya mentransfer data yang berbeda, dan saya benar-benar ingin melakukan transfer satu kali ini secepat mungkin. Jadi saya tidak akan mendapat manfaat dari mendapatkan beberapa transfer lebih cepat karena kompresi yang lebih kuat.

Terima kasih,

liori
sumber
1
+1 ide yang menarik dan berpotensi bermanfaat. Jika Anda pernah menemukan beberapa cara yang baik untuk melakukan ini, saya ingin mendengarnya.
David Cary

Jawaban:

3

Ini adalah subjek penelitian saat ini - terutama di bidang jaringan sensor di mana tujuannya adalah untuk meminimalkan penggunaan daya, daripada memaksimalkan throughput. Namun, prinsip kompresi adaptif sama.

Berikut ini makalah terbaru dari seorang profesor di USC .

Mungkin Anda bisa mencoba menerapkan algoritme-nya? Saya yakin akan ada banyak orang yang tertarik dengan implementasi yang baik.

sml
sumber
Saya ingin, jika saya bisa ... batasan waktu manusia yang biasa berlaku di sini. Tetap saya bisa menjadi yang pertama mengujinya ;-) Terima kasih atas tautan ke makalah, saya mungkin mencoba mencari orang lain yang mungkin tertarik.
liori
2

Hum, pertanyaan ini sudah lebih dari satu tahun sekarang, jadi ini mungkin berlalu tanpa disadari:

Ngomong-ngomong, Google baru-baru ini menerbitkan Snappy yang mungkin persis seperti yang Anda cari, yaitu:

[...] Itu tidak bertujuan untuk kompresi maksimum, atau kompatibilitas dengan pustaka kompresi lainnya; sebaliknya, ini bertujuan untuk kecepatan yang sangat tinggi dan kompresi yang masuk akal. Misalnya, dibandingkan dengan mode tercepat zlib, Snappy adalah urutan besarnya lebih cepat untuk sebagian besar input, tetapi file terkompresi yang dihasilkan di mana saja dari 20% hingga 100% lebih besar [...]

Ini diimplementasikan dalam C ++ dengan binding tersedia untuk C dan berbagai bahasa lainnya.

phw
sumber
Oh, tidak, itu tidak akan luput dari perhatian, setidaknya oleh saya ;-) Dan sepertinya tidak adaptif dalam arti yang saya cari - hanya cepat.
liori