[Spice-devel] [spice-common PATCH v4] Add LZ4 data compression and used it in spicevmc channel
Snir Sheriber
ssheribe at redhat.com
Wed May 11 08:53:48 UTC 2016
Hi,
On 05/10/2016 02:25 PM, Christophe Fergeau wrote:
> Have you measured how much of a gain lz4 compression gives for some use
> cases?
I've made some testing- when compressing usb storage device with ntfs
fs it's mostly depends on the files which are being transfer, the
compression ratio can be 9:10 for already-compressed\binary files and up to 1:9
for documents\code\other files (and during mounting empty\not-full fs-
the compression ratio is always very high since a lot of "empty" data is
being sent). so basically the results seems pretty good for file systems
-with the camera device the compression ratio was not high (data is already
compressed)
-for devices with small data packets (e.g keyboard) data will be sent
uncompressed
The perf testing has shown that the cpu is not being significantly
influenced by the compression.
> Christophe
>
> On Thu, May 05, 2016 at 02:43:32PM +0300, Snir Sheriber wrote:
>> Compressed message type is CompressedData which contains compression
>> type (1 byte) followed by the uncompressed data size (4 bytes) followed
>> by the compressed data size (4 bytes) followed by the compressed data
>> ---
>> common/client_marshallers.h | 1 +
>> common/messages.h | 7 +++++++
>> spice.proto | 15 +++++++++++++++
>> 3 files changed, 23 insertions(+)
>>
>> diff --git a/common/client_marshallers.h b/common/client_marshallers.h
>> index 728987e..2074323 100644
>> --- a/common/client_marshallers.h
>> +++ b/common/client_marshallers.h
>> @@ -33,6 +33,7 @@ SPICE_BEGIN_DECLS
>> typedef struct {
>> void (*msg_SpiceMsgEmpty)(SpiceMarshaller *m, SpiceMsgEmpty *msg);
>> void (*msg_SpiceMsgData)(SpiceMarshaller *m, SpiceMsgData *msg);
>> + void (*msg_SpiceMsgCompressedData)(SpiceMarshaller *m, SpiceMsgCompressedData *msg);
>> void (*msgc_ack_sync)(SpiceMarshaller *m, SpiceMsgcAckSync *msg);
>> void (*msgc_pong)(SpiceMarshaller *m, SpiceMsgPing *msg);
>> void (*msgc_disconnecting)(SpiceMarshaller *m, SpiceMsgDisconnect *msg);
>> diff --git a/common/messages.h b/common/messages.h
>> index f537950..d001850 100644
>> --- a/common/messages.h
>> +++ b/common/messages.h
>> @@ -55,6 +55,13 @@ typedef struct SpiceMsgData {
>> uint8_t data[0];
>> } SpiceMsgData;
>>
>> +typedef struct SpiceMsgCompressedData {
>> + uint8_t type;
>> + uint32_t uncompressed_size;
>> + uint32_t compressed_size;
>> + uint8_t compressed_data[0];
>> +} SpiceMsgCompressedData;
>> +
>> typedef struct SpiceMsgEmpty {
>> uint8_t padding;
>> } SpiceMsgEmpty;
>> diff --git a/spice.proto b/spice.proto
>> index 4a0778d..ea29fb0 100644
>> --- a/spice.proto
>> +++ b/spice.proto
>> @@ -120,6 +120,19 @@ message Data {
>> uint8 data[] @end @ctype(uint8_t);
>> } @nocopy;
>>
>> +enum8 data_compression_type {
>> + NONE,
>> + LZ4,
>> + INVALID,
>> +};
>> +
>> +message CompressedData {
>> + data_compression_type type;
>> + uint32 uncompressed_size;
>> + uint32 compressed_size;
>> + uint8 compressed_data[] @end;
>> +} @ctype(SpiceMsgCompressedData);
>> +
>> struct ChannelWait {
>> uint8 channel_type;
>> uint8 channel_id;
>> @@ -1373,8 +1386,10 @@ channel SmartcardChannel : BaseChannel {
>> channel SpicevmcChannel : BaseChannel {
>> server:
>> Data data = 101;
>> + CompressedData compressed_data = 102;
>> client:
>> Data data = 101;
>> + CompressedData compressed_data = 102;
>> };
>>
>> channel UsbredirChannel : SpicevmcChannel {
>> --
>> 2.5.5
>>
>> _______________________________________________
>> Spice-devel mailing list
>> Spice-devel at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/spice-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/spice-devel/attachments/20160511/f7998538/attachment-0001.html>
More information about the Spice-devel
mailing list