Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Google snappy in C for Linux Kernel
C Python Makefile Shell Other
Branch: master

cl_tester -S d test failed on AArch64 when decompressing data without

header because the header length was hard-coded to 2 bytes.

The header stores length of decompressed data. The length of
decompressed data depends on memory page size. The page size can be larger
on AArch64 or PPC64 platforms. The header encodes 32-bit integer into
7-bits per byte string. Resulting header can occupy more than 2 bytes.

Fix proposed by Marcin Juszkiewicz <>.


Signed-off-by: Petr Písař <>
Tested-off-by: Marcin Juszkiewicz <>
latest commit d7bc683b6e
@ppisar ppisar authored zt-initech committed
Failed to load latest commit information.
python move python toys
testdata check for memeory leaks
.gitignore add `make` byproduct to .gitignore
Makefile This patch adds two new "make install" arguments:
README updated readme
block_compressor.c use 8kb work memory to compress 4kb pages, like google's code.
block_compressor_benchmark.txt update userspace benchmarks
cl_tester.c cl_tester -S d test failed on AArch64 when decompressing data without
csnappy.h Fix issue #20 from zeevt/csnappy: include stdint.h
csnappy_compat.h Sereal's csnappy Win32 fixes
csnappy_compress.c Fix 64 bit big endian code path in decoder.
csnappy_decompress.c Fix integer truncation error during decompression
csnappy_internal.h Sereal's csnappy Win32 fixes
csnappy_internal_userspace.h fix compilation with musl
debugfs_input.txt zram now uses headerless snappy streams to save 2 bytes and a few cpu…
kernel_3_2_10.patch a current linux kernel patch
snappy_tester.patch update snappy tester patch
unaligned_arm.s ARM optimizations. There will be more. In particular ARMv6 has unalig…
unaligned_test.c tester for ARM on android
userspace_benchmark.txt update userspace benchmarks
zram_benchmark.txt split zram benchmark from readme big endian fixes, courtesy of debian ppc qemu image


Google Snappy, available at
is a compression library designed for speed rather than compression ratios.

It is not a new concept by far. The Linux kernel currently uses LZO as the
 default fast compressor. Snappy works faster, though achieves less compression.

Google's code is written in C with a lot of C++. Some of the more interesting
 features that rely on C++ appear to have been elided from the open source
 version of Snappy.

To get the codebase into a shape that can be accepted into the mainline
 Linux kernel and used with zram (
Being able to compress vmlinux and initrd with Snappy is a secondary goal.
Same for support in Squashfs and other parts of the kernel that currently
 support LZO.

I cut out or ported to plain ANSI C the necessary code and headers.
To cause less confusion, I call this project (and files) csnappy.
The API looks right, but I welcome comments.
The code *has* been tested in kernel-space using a patched zram and it works.

The code has been tested in a qemu emulating a PowerPC Mac and ARMv5TE running
 Debian Wheezy.

I also use an ARMv6 Android phone for testing.

Testing on other hardware or platforms is welcome.

Note: The userspace tester is a hack, as is the shared library.

Someone wrote a perl wrapper for csnappy:

Patch for upstream snappy tester is available: snappy_tester.patch
Patch for linux kernel is available: kernel_3_2_10.patch

Benchmark in userspace: userspace_benchmark.txt
Benchmark in kernel space with zram: zram_benchmark.txt
Something went wrong with that request. Please try again.