[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