Skip to content
Snippets Groups Projects
  1. May 27, 2014
  2. May 26, 2014
  3. May 25, 2014
  4. May 23, 2014
    • Raphael S. Carvalho's avatar
      zfs: Enable compression on zfs dataset when creating the image · 6a29063c
      Raphael S. Carvalho authored
      
      This patch enables LZ4 compression on the ZFS dataset right after its
      insertion in the pool. Then the image creation process will go through
      all the steps with compression enabled, and when it's done, compression
      is disabled. From that moment on, compression stops taking effect, and
      files previously compressed will be still supported.
      
      Why disabling compression after image creation?
      There seems to be corner-cases where setting compression by default
      would affect applications performance.
      For example, applications that compress data themselves (e.g. Cassandra)
      might end up slower as ZFS would be duplicating the compression process
      that was previously done, and consequently wasting CPU cycles.
      It's worth mentioning that LZ4 is ~300% faster than LZJB when compressing
      'in-compressible' data, so it might be good even for Cassandra.
      
      Additional information: The first version of this patch used the LZJB
      algorithm, however, it slowed down read operations on compressed files.
      On the other hand, LZ4 improves read on compressed files, improves boot
      time, and still provides a good compression ratio.
      
      RESULTS
      =====
      
      - UNCOMPRESSED:
      * Image size
      -rw-r--r--. 1 root root 154533888 May 19 23:02 build/release/usr.img
      
      * Read benchmark
      REPORT
      -----
      Files:    552
      Read:    127399kb
      Time:    1069.90ms
      MBps:    115.90
      
      * Boot time
      1)
          ZFS mounted: 426.57ms, (+157.75ms)
      2)
          ZFS mounted: 439.13ms, (+156.24ms)
      
      - COMPRESSED (LZ4):
      * Image size
      -rw-r--r--. 1 root root 81002496 May 19 23:33 build/release/usr.img
      
      * Read benchmark
      REPORT
      -----
      Files:    552
      Read:    127399kb
      Time:    957.96ms
      MBps:    129.44
      
      * Boot time
      1)
          ZFS mounted: 414.55ms, (+145.47ms)
      2)
          ZFS mounted: 403.72ms, (+142.82ms)
      
      Signed-off-by: default avatarRaphael S. Carvalho <raphaelsc@cloudius-systems.com>
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      6a29063c
    • Raphael S. Carvalho's avatar
      mkfs: Code refactoring and allow instances of the same shared object · 9ca6522a
      Raphael S. Carvalho authored
      
      Besides refactoring the code, this patch makes mkfs support more than
      one instance of the same shared object within the same mkfs instance,
      i.e. by releasing the resources at the function prologue.
      
      Signed-off-by: default avatarRaphael S. Carvalho <raphaelsc@cloudius-systems.com>
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      9ca6522a
    • Raphael S. Carvalho's avatar
      tests: Add read-only fsop benchmark · cb5db36c
      Raphael S. Carvalho authored
      
      Useful for getting a notion of response time and throughput
      on sequential read operations.
      Random read option should be added later on.
      Currently being used by me to measure read performance on
      compressed vs uncompressed data.
      
      Example output:
      OSv v0.08-160-gddb9322
      eth0: 192.168.122.15
      /zpool.so: 96kb: 1.77ms, (+1.77ms)
      /libzfs.so: 211kb: 6.57ms, (+4.80ms)
      /zfs.so: 96kb: 8.25ms, (+1.68ms)
      /tools/mkfs.so: 10kb: 9.32ms, (+1.07ms)
      /tools/cpiod.so: 244kb: 14.08ms, (+4.76ms)
      ...
      /usr/lib/jvm/jre/lib/content-types.properties: 5kb: 1066.17ms, (+2.87ms)
      /usr/lib/jvm/jre/lib/cmm/GRAY.pf: 556b: 1066.74ms, (+0.57ms)
      /usr/lib/jvm/jre/lib/cmm/CIEXYZ.pf: 784b: 1067.34ms, (+0.60ms)
      /usr/lib/jvm/jre/lib/cmm/sRGB.pf: 6kb: 1067.96ms, (+0.62ms)
      /usr/lib/jvm/jre/lib/cmm/LINEAR_RGB.pf: 488b: 1068.61ms, (+0.64ms)
      /usr/lib/jvm/jre/lib/cmm/PYCC.pf: 228kb: 1073.96ms, (+5.36ms)
      /usr/lib/jvm/jre/lib/sound.properties: 1kb: 1074.65ms, (+0.69ms)
      
      REPORT
      -----
      Files:	552
      Read:	127395kb
      Time:	1074.65ms
      MBps:	115.39
      
      Signed-off-by: default avatarRaphael S. Carvalho <raphaelsc@cloudius-systems.com>
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      cb5db36c
    • Raphael S. Carvalho's avatar
      zfs: Port lz4 compression algorithm from FreeBSD · ac3f540a
      Raphael S. Carvalho authored
      
      OSv port details:
      - Discarded manpage changes.
      - lz4 license was added to the licenses directory.
      - Addressed some conflicts in zfs/zfs_ioctl.c.
      - Add unused attributed to a few functions in zfs/lz4.c which are
      actually unused.
      
       * Illumos zfs issue #3035 [1] LZ4 compression support in ZFS.
      
      LZ4 is a new high-speed BSD-licensed compression algorithm created
      by Yann Collet that delivers very high compression and decompression
      performance compared to lzjb (>50% faster on compression, >80% faster
      on decompression and around 3x faster on compression of incompressible
      data), while giving better compression ratio [1].
      
      FreeBSD commit hash: c6d9dc1
      
      Signed-off-by: default avatarRaphael S. Carvalho <raphaelsc@cloudius-systems.com>
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      ac3f540a
    • Glauber Costa's avatar
      memset: make memset faster for small sizes · 28ff5b27
      Glauber Costa authored
      
      Just like memcpy, memset can also benefit from special cases for small sizes.
      However, as expected, the tradeoffs are different and the benefit is not as
      large. In the best case, we are able to get it better up to 64 bytes. There
      should still be a gain, because in workloads where memcpy will deal with small
      sizes, memset will likely do so as well.
      
      Again, I have compared the simple loop, duff's device, and "glommer's device",
      with the latest being the winner. Here are the results, up to the point each
      one starts losing:
      
      Original:
      =========
      
      memset,4,9.007000,9.161000,9.024967,0.042445
      memset,8,9.007000,9.137000,9.028934,0.043388
      memset,16,9.006000,9.267000,9.028168,0.056487
      memset,32,9.007000,11.719000,9.287668,0.716163
      memset,64,9.007000,9.143000,9.023834,0.034745
      memset,128,9.007000,9.174000,9.030134,0.044414
      
      Loop:
      =====
      
      memset,4,3.122000,3.293000,3.158033,0.026586
      memset,8,4.151000,5.077000,4.570933,0.207710
      memset,16,7.021000,8.288000,7.873499,0.276310
      memset,32,19.414000,19.792999,19.551334,0.086234
      
      Duff:
      =====
      
      memset,4,3.602000,4.829000,3.936233,0.425657
      memset,8,4.117000,4.526000,4.282266,0.100237
      memset,16,4.889000,5.227000,5.105134,0.084525
      memset,32,8.748000,8.884000,8.763433,0.038910
      memset,64,16.983999,17.163000,17.018702,0.051896
      
      Glommer:
      ========
      
      memset,4,3.524000,3.664000,3.601167,0.028642
      memset,8,3.088000,3.144000,3.092500,0.009790
      memset,16,4.117000,4.170000,4.126300,0.014074
      memset,32,4.888000,5.400000,5.172900,0.123619
      memset,64,6.963000,7.023000,6.968966,0.013802
      memset,128,11.065000,11.174000,11.076533,0.027541
      
      Signed-off-by: default avatarGlauber Costa <glommer@cloudius-systems.com>
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      28ff5b27
    • Glauber Costa's avatar
      tests: increment memcpy tests to test memset too · 94f00eec
      Glauber Costa authored
      
      It is really the same kind of test, so let's just reuse memcpy example
      
      Signed-off-by: default avatarGlauber Costa <glommer@cloudius-systems.com>
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      94f00eec
    • Pawel Dziepak's avatar
      memory_analyzer: major rework · 5878840b
      Pawel Dziepak authored
      
      This patch makes memory_analyzer understand the newly introduced tracepoint
      arguments: allocator type, allocated memory and requested alignment.
      Allocations are grouped and shown in as a tree together with frequency
      information, number of blocks that hasn't been freed yet and amount of
      memory wasted by internal fragmentation.
      
      Signed-off-by: default avatarPawel Dziepak <pdziepak@quarnos.org>
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      5878840b
    • Pawel Dziepak's avatar
Loading