1. 08 Nov, 2024 1 commit
    • Nugine's avatar
      Optimize PFCOUNT, PFMERGE command by SIMD acceleration (#13558) · fdeb9762
      Nugine authored
      This PR optimizes the performance of HyperLogLog commands (PFCOUNT,
      PFMERGE) by adding AVX2 fast paths.
      
      Two AVX2 functions are added for conversion between raw representation
      and dense representation. They are 15 ~ 30 times faster than scalar
      implementaion. Note that sparse representation is not accelerated.
      
      AVX2 fast paths are enabled when the CPU supports AVX2 (checked at
      runtime) and the hyperloglog configuration is default (HLL_REGISTERS ==
      16384 && HLL_BITS == 6).
      
      When merging 3 dense hll structures, the benchmark shows a 12x speedup
      compared to the scalar version.
      
      ```
      pfcount key1 key2 key3
      pfmerge keyall key1 key2 key3
      ```
      
      ```
      ======================================================================================================
      Type             Ops/sec    Avg. Latency     p50 Latency     p99 Latency   p99.9 Latency       KB/sec 
      ------------------------------------------------------------------------------------------------------
      PFCOUNT-scalar    5570.09        35.89060        32.51100        65.27900        69.11900       299.17
      PFCOUNT-avx2     72604.92         2.82072         2.73500         5.50300         7.13500      3899.68
      ------------------------------------------------------------------------------------------------------
      PFMERGE-scalar    7879.13        25.52156        24.19100        46.33500        48.38300       492.45
      PFMERGE-avx2    126448.64         1.58120         1.53500         3.08700         4.89500      7903.04
      ------------------------------------------------------------------------------------------------------
      
      scalar: redis:unstable   9906daf5
      avx2:   Nugine:hll-simd  02e09f85ac07eace50ebdddd0fd70822f7b9152d 
      
      CPU:    13th Gen Intel® Core™ i9-13900H × 20
      Memory: 32.0 GiB
      OS:     Ubuntu 22.04.5 LTS
      ```
      
      Experiment repo: https://github.com/Nugine/redis-hyperloglog
      Benchmark script:
      https://github.com/Nugine/redis-hyperloglog/blob/main/scripts/memtier.sh
      Algorithm:
      https://github.com/Nugine/redis-hyperloglog/blob/main/cpp/bench.cpp
      
      
      
      resolves #13551
      
      ---------
      Co-authored-by: default avatarYuan Wang <wangyuancode@163.com>
      Co-authored-by: default avatardebing.sun <debing.sun@redis.com>
      fdeb9762
  2. 18 Oct, 2024 1 commit
  3. 19 Aug, 2024 1 commit
    • Meir Shpilraien (Spielrein)'s avatar
      Avoid used_memory contention when update from multiple threads. (#13431) · 3264deb2
      Meir Shpilraien (Spielrein) authored
      The PR attempt to avoid contention on the `used_memory` global variable
      when allocate or free memory from multiple threads at the same time.
      
      Each time a thread is allocating or releasing a memory, it needs to
      update the `used_memory` global variable. This update might cause a
      contention when done aggressively from multiple threads.
      
      ### The solution
      
      Instead of having a single global variable that need to be updated from
      multiple thread. We create an array of used_memory, each entry in the
      array is updated by a single thread and the main thread summarizes all
      the values to accumulate the memory usage.
      
      This solution, though reduces the contention between threads on updating
      the `used_memory` global variable, it adds work to the main thread that
      need to summarize all the entries at the `used_memory` array. To avoid
      increasing the work done by the main thread by too much, we limit the
      size of the used memory array to 16. This means that up to 16 threads
      can run without any contention between them. If there are more than 16
      threads, we will reuse entries on the used_memory array, in this case we
      might still have contention between threads, but it will be much less
      significant.
      
      Notice, that in order to really avoid contention, the entries in the
      `used_memory` array must reside on different cache lines. To achieve
      that we create a struct with padding such that its size will be exactly
      cache_line size. In addition we make sure the address of the
      `used_memory` array will be aligned to cache_line size.
      
      ### Benchmark
      
      Some benchmark shows improvement (up to 15%):
      
      | Test Case |Baseline unstable (median obs. +- std.dev)|Comparison
      test_used_memory_per_thread_array (median obs. +- std.dev)|% change
      (higher-better)| Note |
      
      |-------------------------------------------------------------------------------|------------------------------------------|--------------------------------------------------------------------:|------------------------|------------------------------------|
      |memtier_benchmark-1key-list-100-elements-lrange-all-elements | 92657 +-
      2.0% (2 datapoints) | 101445|9.5% |IMPROVEMENT |
      |memtier_benchmark-1key-list-1K-elements-lrange-all-elements | 14965 +-
      1.3% (2 datapoints) | 16296|8.9% |IMPROVEMENT |
      |memtier_benchmark-1key-set-10-elements-smembers-pipeline-10 | 431019 +-
      5.2% (2 datapoints) | 461039|7.0% |waterline=5.2%. IMPROVEMENT |
      |memtier_benchmark-1key-set-100-elements-smembers | 74367 +- 0.0% (2
      datapoints) | 80190|7.8% |IMPROVEMENT |
      |memtier_benchmark-1key-set-1K-elements-smembers | 11730 +- 0.4% (2
      datapoints) | 13519|15.3% |IMPROVEMENT |
      
      
      Full results:
      
      | Test Case |Baseline unstable (median obs. +- std.dev)|Comparison
      test_used_memory_per_thread_array (median obs. +- std.dev)|% change
      (higher-better)| Note |
      
      |-------------------------------------------------------------------------------|------------------------------------------|--------------------------------------------------------------------:|------------------------|------------------------------------|
      |memtier_benchmark-10Mkeys-load-hash-5-fields-with-1000B-values | 88613
      +- 1.0% (2 datapoints) | 88688|0.1% |No Change |
      
      |memtier_benchmark-10Mkeys-load-hash-5-fields-with-1000B-values-pipeline-10
      | 124786 +- 1.2% (2 datapoints) | 123671|-0.9% |No Change |
      |memtier_benchmark-10Mkeys-load-hash-5-fields-with-100B-values | 122460
      +- 1.4% (2 datapoints) | 122990|0.4% |No Change |
      
      |memtier_benchmark-10Mkeys-load-hash-5-fields-with-100B-values-pipeline-10
      | 333384 +- 5.1% (2 datapoints) | 319221|-4.2% |waterline=5.1%.
      potential REGRESSION|
      |memtier_benchmark-10Mkeys-load-hash-5-fields-with-10B-values | 137354
      +- 0.3% (2 datapoints) | 138759|1.0% |No Change |
      
      |memtier_benchmark-10Mkeys-load-hash-5-fields-with-10B-values-pipeline-10
      | 401261 +- 4.3% (2 datapoints) | 398524|-0.7% |No Change |
      |memtier_benchmark-1Mkeys-100B-expire-use-case | 179058 +- 0.4% (2
      datapoints) | 180114|0.6% |No Change |
      |memtier_benchmark-1Mkeys-10B-expire-use-case | 180390 +- 0.2% (2
      datapoints) | 180401|0.0% |No Change |
      |memtier_benchmark-1Mkeys-1KiB-expire-use-case | 175993 +- 0.7% (2
      datapoints) | 175147|-0.5% |No Change |
      |memtier_benchmark-1Mkeys-4KiB-expire-use-case | 165771 +- 0.0% (2
      datapoints) | 164434|-0.8% |No Change |
      |memtier_benchmark-1Mkeys-bitmap-getbit-pipeline-10 | 931339 +- 2.1% (2
      datapoints) | 929487|-0.2% |No Change |
      |memtier_benchmark-1Mkeys-generic-exists-pipeline-10 | 999462 +- 0.4% (2
      datapoints) | 963226|-3.6% |potential REGRESSION |
      |memtier_benchmark-1Mkeys-generic-expire-pipeline-10 | 905333 +- 1.4% (2
      datapoints) | 896673|-1.0% |No Change |
      |memtier_benchmark-1Mkeys-generic-expireat-pipeline-10 | 885015 +- 1.0%
      (2 datapoints) | 865010|-2.3% |No Change |
      |memtier_benchmark-1Mkeys-generic-pexpire-pipeline-10 | 897115 +- 1.2%
      (2 datapoints) | 887544|-1.1% |No Change |
      |memtier_benchmark-1Mkeys-generic-scan-pipeline-10 | 451103 +- 3.2% (2
      datapoints) | 465571|3.2% |potential IMPROVEMENT |
      |memtier_benchmark-1Mkeys-generic-touch-pipeline-10 | 996809 +- 0.6% (2
      datapoints) | 984478|-1.2% |No Change |
      |memtier_benchmark-1Mkeys-generic-ttl-pipeline-10 | 979570 +- 1.7% (2
      datapoints) | 958752|-2.1% |No Change |
      
      |memtier_benchmark-1Mkeys-hash-hget-hgetall-hkeys-hvals-with-100B-values
      | 180888 +- 0.5% (2 datapoints) | 182295|0.8% |No Change |
      
      |memtier_benchmark-1Mkeys-hash-hmget-5-fields-with-100B-values-pipeline-10
      | 717881 +- 1.0% (2 datapoints) | 724814|1.0% |No Change |
      |memtier_benchmark-1Mkeys-hash-transactions-multi-exec-pipeline-20 |
      1055447 +- 0.4% (2 datapoints) | 1065836|1.0% |No Change |
      |memtier_benchmark-1Mkeys-lhash-hexists | 164332 +- 0.1% (2 datapoints)
      | 163636|-0.4% |No Change |
      |memtier_benchmark-1Mkeys-lhash-hincbry | 171674 +- 0.3% (2 datapoints)
      | 172737|0.6% |No Change |
      |memtier_benchmark-1Mkeys-list-lpop-rpop-with-100B-values | 180904 +-
      1.1% (2 datapoints) | 179467|-0.8% |No Change |
      |memtier_benchmark-1Mkeys-list-lpop-rpop-with-10B-values | 181746 +-
      0.8% (2 datapoints) | 182416|0.4% |No Change |
      |memtier_benchmark-1Mkeys-list-lpop-rpop-with-1KiB-values | 182004 +-
      0.7% (2 datapoints) | 180237|-1.0% |No Change |
      |memtier_benchmark-1Mkeys-load-hash-5-fields-with-1000B-values | 105191
      +- 0.9% (2 datapoints) | 105058|-0.1% |No Change |
      
      |memtier_benchmark-1Mkeys-load-hash-5-fields-with-1000B-values-pipeline-10
      | 150683 +- 0.9% (2 datapoints) | 153597|1.9% |No Change |
      |memtier_benchmark-1Mkeys-load-hash-hmset-5-fields-with-1000B-values |
      104122 +- 0.7% (2 datapoints) | 105236|1.1% |No Change |
      |memtier_benchmark-1Mkeys-load-list-with-100B-values | 149770 +- 0.9% (2
      datapoints) | 150510|0.5% |No Change |
      |memtier_benchmark-1Mkeys-load-list-with-10B-values | 165537 +- 1.9% (2
      datapoints) | 164329|-0.7% |No Change |
      |memtier_benchmark-1Mkeys-load-list-with-1KiB-values | 113315 +- 0.5% (2
      datapoints) | 114110|0.7% |No Change |
      |memtier_benchmark-1Mkeys-load-stream-1-fields-with-100B-values | 131201
      +- 0.7% (2 datapoints) | 129545|-1.3% |No Change |
      
      |memtier_benchmark-1Mkeys-load-stream-1-fields-with-100B-values-pipeline-10
      | 352891 +- 2.8% (2 datapoints) | 348338|-1.3% |No Change |
      |memtier_benchmark-1Mkeys-load-stream-5-fields-with-100B-values | 104386
      +- 0.7% (2 datapoints) | 105796|1.4% |No Change |
      
      |memtier_benchmark-1Mkeys-load-stream-5-fields-with-100B-values-pipeline-10
      | 227593 +- 5.5% (2 datapoints) | 218783|-3.9% |waterline=5.5%.
      potential REGRESSION|
      |memtier_benchmark-1Mkeys-load-string-with-100B-values | 167552 +- 0.2%
      (2 datapoints) | 170282|1.6% |No Change |
      |memtier_benchmark-1Mkeys-load-string-with-100B-values-pipeline-10 |
      646888 +- 0.5% (2 datapoints) | 639680|-1.1% |No Change |
      |memtier_benchmark-1Mkeys-load-string-with-10B-values | 174891 +- 0.7%
      (2 datapoints) | 174382|-0.3% |No Change |
      |memtier_benchmark-1Mkeys-load-string-with-10B-values-pipeline-10 |
      749988 +- 5.1% (2 datapoints) | 769986|2.7% |waterline=5.1%. No Change |
      |memtier_benchmark-1Mkeys-load-string-with-1KiB-values | 155929 +- 0.1%
      (2 datapoints) | 156387|0.3% |No Change |
      |memtier_benchmark-1Mkeys-load-zset-with-10-elements-double-score |
      92241 +- 0.2% (2 datapoints) | 92189|-0.1% |No Change |
      |memtier_benchmark-1Mkeys-load-zset-with-10-elements-int-score | 114328
      +- 1.3% (2 datapoints) | 113154|-1.0% |No Change |
      |memtier_benchmark-1Mkeys-string-get-100B | 180685 +- 0.2% (2
      datapoints) | 180359|-0.2% |No Change |
      |memtier_benchmark-1Mkeys-string-get-100B-pipeline-10 | 991291 +- 3.1%
      (2 datapoints) | 1020086|2.9% |No Change |
      |memtier_benchmark-1Mkeys-string-get-10B | 181183 +- 0.3% (2 datapoints)
      | 177868|-1.8% |No Change |
      |memtier_benchmark-1Mkeys-string-get-10B-pipeline-10 | 1032554 +- 0.8%
      (2 datapoints) | 1023120|-0.9% |No Change |
      |memtier_benchmark-1Mkeys-string-get-1KiB | 180479 +- 0.9% (2
      datapoints) | 182215|1.0% |No Change |
      |memtier_benchmark-1Mkeys-string-get-1KiB-pipeline-10 | 979286 +- 0.9%
      (2 datapoints) | 989888|1.1% |No Change |
      |memtier_benchmark-1Mkeys-string-mget-1KiB | 121950 +- 0.4% (2
      datapoints) | 120996|-0.8% |No Change |
      |memtier_benchmark-1key-geo-60M-elements-geodist | 179404 +- 1.0% (2
      datapoints) | 181232|1.0% |No Change |
      |memtier_benchmark-1key-geo-60M-elements-geodist-pipeline-10 | 1023797
      +- 0.5% (2 datapoints) | 1014980|-0.9% |No Change |
      |memtier_benchmark-1key-geo-60M-elements-geohash | 180808 +- 1.2% (2
      datapoints) | 180606|-0.1% |No Change |
      |memtier_benchmark-1key-geo-60M-elements-geohash-pipeline-10 | 1056458
      +- 1.6% (2 datapoints) | 1040050|-1.6% |No Change |
      |memtier_benchmark-1key-geo-60M-elements-geopos | 181808 +- 0.2% (2
      datapoints) | 175945|-3.2% |potential REGRESSION |
      |memtier_benchmark-1key-geo-60M-elements-geopos-pipeline-10 | 1038180 +-
      3.4% (2 datapoints) | 1033005|-0.5% |No Change |
      |memtier_benchmark-1key-geo-60M-elements-geosearch-fromlonlat | 142614
      +- 0.3% (2 datapoints) | 144259|1.2% |No Change |
      |memtier_benchmark-1key-geo-60M-elements-geosearch-fromlonlat-bybox |
      141008 +- 0.4% (2 datapoints) | 139602|-1.0% |No Change |
      
      |memtier_benchmark-1key-geo-60M-elements-geosearch-fromlonlat-pipeline-10
      | 560698 +- 0.8% (2 datapoints) | 548806|-2.1% |No Change |
      |memtier_benchmark-1key-list-10-elements-lrange-all-elements | 166132 +-
      0.9% (2 datapoints) | 170259|2.5% |No Change |
      |memtier_benchmark-1key-list-100-elements-lrange-all-elements | 92657 +-
      2.0% (2 datapoints) | 101445|9.5% |IMPROVEMENT |
      |memtier_benchmark-1key-list-1K-elements-lrange-all-elements | 14965 +-
      1.3% (2 datapoints) | 16296|8.9% |IMPROVEMENT |
      |memtier_benchmark-1key-pfadd-4KB-values-pipeline-10 | 264156 +- 0.2% (2
      datapoints) | 262582|-0.6% |No Change |
      |memtier_benchmark-1key-set-10-elements-smembers | 138916 +- 1.7% (2
      datapoints) | 138016|-0.6% |No Change |
      |memtier_benchmark-1key-set-10-elements-smembers-pipeline-10 | 431019 +-
      5.2% (2 datapoints) | 461039|7.0% |waterline=5.2%. IMPROVEMENT |
      |memtier_benchmark-1key-set-10-elements-smismember | 173545 +- 1.1% (2
      datapoints) | 173488|-0.0% |No Change |
      |memtier_benchmark-1key-set-100-elements-smembers | 74367 +- 0.0% (2
      datapoints) | 80190|7.8% |IMPROVEMENT |
      |memtier_benchmark-1key-set-100-elements-smismember | 155682 +- 1.6% (2
      datapoints) | 151367|-2.8% |No Change |
      |memtier_benchmark-1key-set-1K-elements-smembers | 11730 +- 0.4% (2
      datapoints) | 13519|15.3% |IMPROVEMENT |
      |memtier_benchmark-1key-set-200K-elements-sadd-constant | 181070 +- 1.1%
      (2 datapoints) | 180214|-0.5% |No Change |
      |memtier_benchmark-1key-set-2M-elements-sadd-increasing | 166364 +- 0.1%
      (2 datapoints) | 166944|0.3% |No Change |
      |memtier_benchmark-1key-zincrby-1M-elements-pipeline-1 | 46071 +- 0.6%
      (2 datapoints) | 44979|-2.4% |No Change |
      |memtier_benchmark-1key-zrank-1M-elements-pipeline-1 | 48429 +- 0.4% (2
      datapoints) | 49265|1.7% |No Change |
      |memtier_benchmark-1key-zrem-5M-elements-pipeline-1 | 48528 +- 0.4% (2
      datapoints) | 48869|0.7% |No Change |
      |memtier_benchmark-1key-zrevrangebyscore-256K-elements-pipeline-1 |
      100580 +- 1.5% (2 datapoints) | 101782|1.2% |No Change |
      |memtier_benchmark-1key-zrevrank-1M-elements-pipeline-1 | 48621 +- 2.0%
      (2 datapoints) | 48473|-0.3% |No Change |
      |memtier_benchmark-1key-zset-10-elements-zrange-all-elements | 83485 +-
      0.6% (2 datapoints) | 83095|-0.5% |No Change |
      
      |memtier_benchmark-1key-zset-10-elements-zrange-all-elements-long-scores
      | 118673 +- 0.8% (2 datapoints) | 118006|-0.6% |No Change |
      |memtier_benchmark-1key-zset-100-elements-zrange-all-elements | 19009 +-
      1.1% (2 datapoints) | 19293|1.5% |No Change |
      |memtier_benchmark-1key-zset-100-elements-zrangebyscore-all-elements |
      18957 +- 0.5% (2 datapoints) | 19419|2.4% |No Change |
      
      |memtier_benchmark-1key-zset-100-elements-zrangebyscore-all-elements-long-scores|
      171693 +- 0.5% (2 datapoints) | 172432|0.4% |No Change |
      |memtier_benchmark-1key-zset-1K-elements-zrange-all-elements | 3566 +-
      0.6% (2 datapoints) | 3672|3.0% |No Change |
      |memtier_benchmark-1key-zset-1M-elements-zcard-pipeline-10 | 1067713 +-
      0.4% (2 datapoints) | 1071550|0.4% |No Change |
      |memtier_benchmark-1key-zset-1M-elements-zrevrange-5-elements | 169195
      +- 0.7% (2 datapoints) | 169620|0.3% |No Change |
      |memtier_benchmark-1key-zset-1M-elements-zscore-pipeline-10 | 914338 +-
      0.2% (2 datapoints) | 905540|-1.0% |No Change |
      |memtier_benchmark-2keys-lua-eval-hset-expire | 88346 +- 1.7% (2
      datapoints) | 87259|-1.2% |No Change |
      |memtier_benchmark-2keys-lua-evalsha-hset-expire | 103273 +- 1.2% (2
      datapoints) | 102393|-0.9% |No Change |
      |memtier_benchmark-2keys-set-10-100-elements-sdiff | 15418 +- 10.9%
      UNSTABLE (2 datapoints) | 14369|-6.8% |UNSTABLE (very high variance) |
      |memtier_benchmark-2keys-set-10-100-elements-sinter | 83601 +- 3.6% (2
      datapoints) | 82508|-1.3% |No Change |
      |memtier_benchmark-2keys-set-10-100-elements-sunion | 14942 +- 11.2%
      UNSTABLE (2 datapoints) | 14001|-6.3% |UNSTABLE (very high variance) |
      |memtier_benchmark-2keys-stream-5-entries-xread-all-entries | 75938 +-
      0.4% (2 datapoints) | 76565|0.8% |No Change |
      |memtier_benchmark-2keys-stream-5-entries-xread-all-entries-pipeline-10
      | 120781 +- 1.1% (2 datapoints) | 119142|-1.4% |No Change |
      3264deb2
  4. 20 Mar, 2024 1 commit
  5. 12 Mar, 2024 1 commit
  6. 08 Oct, 2023 1 commit
    • Jachin's avatar
      Fix compile on macOS 13 (#12611) · a2b0701d
      Jachin authored
      Use the __MAC_OS_X_VERSION_MIN_REQUIRED macro to detect the
      macOS system version instead of using MAC_OS_X_VERSION_10_6.
      
      From MacOSX14.0.sdk, the default definitions of MAC_OS_X_VERSION_xxx have
      been removed in usr/include/AvailabilityMacros.h. It includes AvailabilityVersions.h,
      where the following condition must be met:
      `#if (!defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)) || defined(_DARWIN_C_SOURCE)`
      Only then will MAC_OS_X_VERSION_xxx be defined.
      However, in the project, _DARWIN_C_SOURCE is not defined, which leads to the
      loss of the definition for MAC_OS_X_VERSION_10_6.
      a2b0701d
  7. 18 Apr, 2023 1 commit
    • sundb's avatar
      Fix some compile warnings and errors when building with gcc-12 or clang (#12035) · 42c8c618
      sundb authored
      This PR is to fix the compilation warnings and errors generated by the latest
      complier toolchain, and to add a new runner of the latest toolchain for daily CI.
      
      ## Fix various compilation warnings and errors
      
      1) jemalloc.c
      
      COMPILER: clang-14 with FORTIFY_SOURCE
      
      WARNING:
      ```
      src/jemalloc.c:1028:7: warning: suspicious concatenation of string literals in an array initialization; did you mean to separate the elements with a comma? [-Wstring-concatenation]
                          "/etc/malloc.conf",
                          ^
      src/jemalloc.c:1027:3: note: place parentheses around the string literal to silence warning
                      "\"name\" of the file referenced by the symbolic link named "
                      ^
      ```
      
      REASON:  the compiler to alert developers to potential issues with string concatenation
      that may miss a comma,
      just like #9534 which misses a comma.
      
      SOLUTION: use `()` to tell the compiler that these two line strings are continuous.
      
      2) config.h
      
      COMPILER: clang-14 with FORTIFY_SOURCE
      
      WARNING:
      ```
      In file included from quicklist.c:36:
      ./config.h:319:76: warning: attribute declaration must precede definition [-Wignored-attributes]
      char *strcat(char *restrict dest, const char *restrict src) __attribute__((deprecated("please avoid use of unsafe C functions. prefer use of redis_strlcat instead")));
      ```
      
      REASON: Enabling _FORTIFY_SOURCE will cause the compiler to use `strcpy()` with check,
      it results in a deprecated attribute declaration after including <features.h>.
      
      SOLUTION: move the deprecated attribute declaration from config.h to fmacro.h before "#include <features.h>".
      
      3) networking.c
      
      COMPILER: GCC-12
      
      WARNING: 
      ```
      networking.c: In function ‘addReplyDouble.part.0’:
      networking.c:876:21: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=]
        876 |         dbuf[start] = '$';
            |                     ^
      networking.c:868:14: note: at offset -5 into destination object ‘dbuf’ of size 5152
        868 |         char dbuf[MAX_LONG_DOUBLE_CHARS+32];
            |              ^
      networking.c:876:21: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=]
        876 |         dbuf[start] = '$';
            |                     ^
      networking.c:868:14: note: at offset -6 into destination object ‘dbuf’ of size 5152
        868 |         char dbuf[MAX_LONG_DOUBLE_CHARS+32];
      ```
      
      REASON: GCC-12 predicts that digits10() may return 9 or 10 through `return 9 + (v >= 1000000000UL)`.
      
      SOLUTION: add an assert to let the compiler know the possible length;
      
      4) redis-cli.c & redis-benchmark.c
      
      COMPILER: clang-14 with FORTIFY_SOURCE
      
      WARNING:
      ```
      redis-benchmark.c:1621:2: warning: embedding a directive within macro arguments has undefined behavior [-Wembedded-directive] #ifdef USE_OPENSSL
      redis-cli.c:3015:2: warning: embedding a directive within macro arguments has undefined behavior [-Wembedded-directive] #ifdef USE_OPENSSL
      ```
      
      REASON: when _FORTIFY_SOURCE is enabled, the compiler will use the print() with
      check, which is a macro. this may result in the use of directives within the macro, which
      is undefined behavior.
      
      SOLUTION: move the directives-related code out of `print()`.
      
      5) server.c
      
      COMPILER: gcc-13 with FORTIFY_SOURCE
      
      WARNING:
      ```
      In function 'lookupCommandLogic',
          inlined from 'lookupCommandBySdsLogic' at server.c:3139:32:
      server.c:3102:66: error: '*(robj **)argv' may be used uninitialized [-Werror=maybe-uninitialized]
       3102 |     struct redisCommand *base_cmd = dictFetchValue(commands, argv[0]->ptr);
            |                                                              ~~~~^~~
      ```
      
      REASON: The compiler thinks that the `argc` returned by `sdssplitlen()` could be 0,
      resulting in an empty array of size 0 being passed to lookupCommandLogic.
      this should be a false positive, `argc` can't be 0 when strings are not NULL.
      
      SOLUTION: add an assert to let the compiler know that `argc` is positive.
      
      6) sha1.c
      
      COMPILER: gcc-12
      
      WARNING:
      ```
      In function ‘SHA1Update’,
          inlined from ‘SHA1Final’ at sha1.c:195:5:
      sha1.c:152:13: warning: ‘SHA1Transform’ reading 64 bytes from a region of size 0 [-Wstringop-overread]
        152 |             SHA1Transform(context->state, &data[i]);
            |             ^
      sha1.c:152:13: note: referencing argument 2 of type ‘const unsigned char[64]’
      sha1.c: In function ‘SHA1Final’:
      sha1.c:56:6: note: in a call to function ‘SHA1Transform’
         56 | void SHA1Transform(uint32_t state[5], const unsigned char buffer[64])
            |      ^
      In function ‘SHA1Update’,
          inlined from ‘SHA1Final’ at sha1.c:198:9:
      sha1.c:152:13: warning: ‘SHA1Transform’ reading 64 bytes from a region of size 0 [-Wstringop-overread]
        152 |             SHA1Transform(context->state, &data[i]);
            |             ^
      sha1.c:152:13: note: referencing argument 2 of type ‘const unsigned char[64]’
      sha1.c: In function ‘SHA1Final’:
      sha1.c:56:6: note: in a call to function ‘SHA1Transform’
         56 | void SHA1Transform(uint32_t state[5], const unsigned char buffer[64])
      ```
      
      REASON: due to the bug[https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80922], when
      enable LTO, gcc-12 will not see `diagnostic ignored "-Wstringop-overread"`, resulting in a warning.
      
      SOLUTION: temporarily set SHA1Update to noinline to avoid compiler warnings due
      to LTO being enabled until the above gcc bug is fixed.
      
      7) zmalloc.h
      
      COMPILER: GCC-12
      
      WARNING: 
      ```
      In function ‘memset’,
          inlined from ‘moduleCreateContext’ at module.c:877:5,
          inlined from ‘RM_GetDetachedThreadSafeContext’ at module.c:8410:5:
      /usr/include/x86_64-linux-gnu/bits/string_fortified.h:59:10: warning: ‘__builtin_memset’ writing 104 bytes into a region of size 0 overflows the destination [-Wstringop-overflow=]
         59 |   return __builtin___memset_chk (__dest, __ch, __len,
      ```
      
      REASON: due to the GCC-12 bug [https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96503],
      GCC-12 cannot see alloc_size, which causes GCC to think that the actual size of memory
      is 0 when checking with __glibc_objsize0().
      
      SOLUTION: temporarily set malloc-related interfaces to `noinline` to avoid compiler warnings
      due to LTO being enabled until the above gcc bug is fixed.
      
      ## Other changes
      1) Fixed `ps -p [pid]`  doesn't output `<defunct>` when using procps 4.x causing `replication
        child dies when parent is killed - diskless` test to fail.
      2) Add a new fortify CI with GCC-13 and ubuntu-lunar docker image.
      42c8c618
  8. 05 Mar, 2023 1 commit
  9. 12 Feb, 2023 1 commit
    • Tian's avatar
      Reclaim page cache of RDB file (#11248) · 7dae142a
      Tian authored
      # Background
      The RDB file is usually generated and used once and seldom used again, but the content would reside in page cache until OS evicts it. A potential problem is that once the free memory exhausts, the OS have to reclaim some memory from page cache or swap anonymous page out, which may result in a jitters to the Redis service.
      
      Supposing an exact scenario, a high-capacity machine hosts many redis instances, and we're upgrading the Redis together. The page cache in host machine increases as RDBs are generated. Once the free memory drop into low watermark(which is more likely to happen in older Linux kernel like 3.10, before [watermark_scale_factor](https://lore.kernel.org/lkml/1455813719-2395-1-git-send-email-hannes@cmpxchg.org/) is introduced, the `low watermark` is linear to `min watermark`, and there'is not too much buffer space for `kswapd` to be wake up to reclaim memory), a `direct reclaim` happens, which means the process would stall to wait for memory allocation.
      
      # What the PR does
      The PR introduces a capability to reclaim the cache when the RDB is operated. Generally there're two cases, read and write the RDB. For read it's a little messy to address the incremental reclaim, so the reclaim is done in one go in background after the load is finished to avoid blocking the work thread. For write, incremental reclaim amortizes the work of reclaim so no need to put it into background, and the peak watermark of cache can be reduced in this way.
      
      Two cases are addresses specially, replication and restart, for both of which the cache is leveraged to speed up the processing, so the reclaim is postponed to a right time. To do this, a flag is added to`rdbSave` and `rdbLoad` to control whether the cache need to be kept, with the default value false.
      
      # Something deserve noting
      1. Though `posix_fadvise` is the POSIX standard, but only few platform support it, e.g. Linux, FreeBSD 10.0.
      2. In Linux `posix_fadvise` only take effect on writeback-ed pages, so a `sync`(or `fsync`, `fdatasync`) is needed to flush the dirty page before `posix_fadvise` if we reclaim write cache.
      
      # About test
      A unit test is added to verify the effect of `posix_fadvise`.
      In integration test overall cache increase is checked, as well as the cache backed by RDB as a specific TCL test is executed in isolated Github action job.
      7dae142a
  10. 02 Oct, 2022 1 commit
  11. 18 Jul, 2022 1 commit
    • ranshid's avatar
      Avoid using unsafe C functions (#10932) · eacca729
      ranshid authored
      replace use of:
      sprintf --> snprintf
      strcpy/strncpy  --> redis_strlcpy
      strcat/strncat  --> redis_strlcat
      
      **why are we making this change?**
      Much of the code uses some unsafe variants or deprecated buffer handling
      functions.
      While most cases are probably not presenting any issue on the known path
      programming errors and unterminated strings might lead to potential
      buffer overflows which are not covered by tests.
      
      **As part of this PR we change**
      1. added implementation for redis_strlcpy and redis_strlcat based on the strl implementation: https://linux.die.net/man/3/strl
      2. change all occurrences of use of sprintf with use of snprintf
      3. change occurrences of use of  strcpy/strncpy with redis_strlcpy
      4. change occurrences of use of strcat/strncat with redis_strlcat
      5. change the behavior of ll2string/ull2string/ld2string so that it will always place null
        termination ('\0') on the output buffer in the first index. this was done in order to make
        the use of these functions more safe in cases were the user will not check the output
        returned by them (for example in rdbRemoveTempFile)
      6. we added a compiler directive to issue a deprecation error in case a use of
        sprintf/strcpy/strcat is found during compilation which will result in error during compile time.
        However keep in mind that since the deprecation attribute is not supported on all compilers,
        this is expected to fail during push workflows.
      
      
      **NOTE:** while this is only an initial milestone. We might also consider
      using the *_s implementation provided by the C11 Extensions (however not
      yet widly supported). I would also suggest to start
      looking at static code analyzers to track unsafe use cases.
      For example LLVM clang checker supports security.insecureAPI.DeprecatedOrUnsafeBufferHandling
      which can help locate unsafe function usage.
      https://clang.llvm.org/docs/analyzer/checkers.html#security-insecureapi-deprecatedorunsafebufferhandling-c
      The main reason not to onboard it at this stage is that the alternative
      excepted by clang is to use the C11 extensions which are not always
      supported by stdlib.
      eacca729
  12. 20 Apr, 2022 1 commit
  13. 28 Dec, 2021 1 commit
  14. 11 Nov, 2021 1 commit
    • Ozan Tezcan's avatar
      Add sanitizer support and clean up sanitizer findings (#9601) · b91d8b28
      Ozan Tezcan authored
      - Added sanitizer support. `address`, `undefined` and `thread` sanitizers are available.  
      - To build Redis with desired sanitizer : `make SANITIZER=undefined`
      - There were some sanitizer findings, cleaned up codebase
      - Added tests with address and undefined behavior sanitizers to daily CI.
      - Added tests with address sanitizer to the per-PR CI (smoke out mem leaks sooner).
      
      Basically, there are three types of issues : 
      
      **1- Unaligned load/store** : Most probably, this issue may cause a crash on a platform that
      does not support unaligned access. Redis does unaligned access only on supported platforms.
      
      **2- Signed integer overflow.** Although, signed overflow issue can be problematic time to time
      and change how compiler generates code, current findings mostly about signed shift or simple
      addition overflow. For most platforms Redis can be compiled for, this wouldn't cause any issue
      as far as I can tell (checked generated code on godbolt.org).
      
       **3 -Minor leak** (redis-cli), **use-after-free**(just before calling exit());
      
      UB means nothing guaranteed and risky to reason about program behavior but I don't think any
      of the fixes here worth backporting. As sanitizers are now part of the CI, preventing new issues
      will be the real benefit. 
      b91d8b28
  15. 15 Oct, 2021 1 commit
  16. 30 Aug, 2021 1 commit
    • Wang Yuan's avatar
      Use sync_file_range to optimize fsync if possible (#9409) · 9a0c0617
      Wang Yuan authored
      We implement incremental data sync in rio.c by call fsync, on slow disk, that may cost a lot of time,
      sync_file_range could provide async fsync, so we could serialize key/value and sync file data at the same time.
      
      > one tip for sync_file_range usage: http://lkml.iu.edu/hypermail/linux/kernel/1005.2/01845.html
      
      Additionally, this change avoids a single large write to be used, which can result in a mass of dirty
      pages in the kernel (increasing the risk of someone else's write to block).
      
      On HDD, current solution could reduce approximate half of dumping RDB time,
      this PR costs 50s for dump 7.7G rdb but unstable branch costs 93s.
      On NVME SSD, this PR can't reduce much time,  this PR costs 40s, unstable branch costs 48s.
      
      Moreover, I find calling data sync every 4MB is better than 32MB.
      9a0c0617
  17. 14 Aug, 2021 1 commit
  18. 05 Jul, 2021 1 commit
    • Oran Agra's avatar
      Use accept4 on linux instead of fcntl to make a client socket non-blocking (#9177) · 5a3de819
      Oran Agra authored
      
      
      This reduces system calls on linux when a new connection is made / accepted.
      
      Changes:
      * Add the SOCK_CLOEXEC option to the accept4() call
        This  ensure that a fork/exec call does not leak a file descriptor.
      * Move anetCloexec and connNonBlock info anetGenericAccept
      * Moving connNonBlock from accept handlers to anetGenericAccept
      
      Moving connNonBlock from createClient, is safe because createClient is
      used in the following ways:
      1. without a connection (fake client)
      2. on an accepted connection (see above)
      3. creating the master client by using connConnect (see below)
      
      The third case, can either use anetTcpNonBlockConnect, or connTLSConnect
      which is by default non-blocking.
      Co-authored-by: default avatarRajiv Kurian <geetasen@gmail.com>
      Co-authored-by: default avatarOran Agra <oran@redislabs.com>
      Co-authored-by: default avatarYoav Steinberg <yoav@redislabs.com>
      5a3de819
  19. 23 Feb, 2021 1 commit
    • Yossi Gottlieb's avatar
      Fix failed tests on Linux Alpine and add a CI job. (#8532) · 95ea7454
      Yossi Gottlieb authored
      * Remove linux/version.h dependency.
      
      This introduces unnecessary dependencies, and generally not a good idea
      as the platform we build on may be different than the platform we run
      on.
      
      To determine if sync_file_range exists we can simply rely on header file
      hints.
      
      * Fix setproctitle() on libmusl.
      
      The previous ifdef checks were a bit too strict for no apparent
      reason.
      
      * Fix tests failure on Linux with no backtrace.
      
      * Add alpine daily CI job.
      95ea7454
  20. 06 Dec, 2020 2 commits
    • David CARLIER's avatar
      ec951cdc
    • Oran Agra's avatar
      Sanitize dump payload: performance optimizations and tuning · e288430c
      Oran Agra authored
      First, if the ziplist header is surely inside the ziplist, do fast path
      decoding rather than the careful one.
      
      In that case, streamline the encoding if-else chain to be executed only
      once, and the encoding validity tested at the end.
      
      encourage inlining
      
      likely / unlikely hints for speculative execution
      
      Assertion used _exit(1) to tell the compiler that the code after them is
      not reachable and get rid of warnings.
      
      But in some cases assertions are placed inside tight loops, and any
      piece of code in them can slow down execution (code cache and other
      reasons), instead using either abort() or better yet, unreachable
      builtin.
      e288430c
  21. 23 Nov, 2020 1 commit
  22. 20 Nov, 2020 1 commit
  23. 25 Oct, 2020 1 commit
  24. 29 Sep, 2020 1 commit
  25. 23 Sep, 2020 1 commit
  26. 10 Sep, 2020 1 commit
    • Oran Agra's avatar
      Squash merging 125 typo/grammar/comment/doc PRs (#7773) · 1c710385
      Oran Agra authored
      
      
      List of squashed commits or PRs
      ===============================
      
      commit 66801ea
      Author: hwware <wen.hui.ware@gmail.com>
      Date:   Mon Jan 13 00:54:31 2020 -0500
      
          typo fix in acl.c
      
      commit 46f55db
      Author: Itamar Haber <itamar@redislabs.com>
      Date:   Sun Sep 6 18:24:11 2020 +0300
      
          Updates a couple of comments
      
          Specifically:
      
          * RM_AutoMemory completed instead of pointing to docs
          * Updated link to custom type doc
      
      commit 61a2aa0
      Author: xindoo <xindoo@qq.com>
      Date:   Tue Sep 1 19:24:59 2020 +0800
      
          Correct errors in code comments
      
      commit a5871d1
      Author: yz1509 <pro-756@qq.com>
      Date:   Tue Sep 1 18:36:06 2020 +0800
      
          fix typos in module.c
      
      commit 41eede7
      Author: bookug <bookug@qq.com>
      Date:   Sat Aug 15 01:11:33 2020 +0800
      
          docs: fix typos in comments
      
      commit c303c84
      Author: lazy-snail <ws.niu@outlook.com>
      Date:   Fri Aug 7 11:15:44 2020 +0800
      
          fix spelling in redis.conf
      
      commit 1eb76bf
      Author: zhujian <zhujianxyz@gmail.com>
      Date:   Thu Aug 6 15:22:10 2020 +0800
      
          add a missing 'n' in comment
      
      commit 1530ec2
      Author: Daniel Dai <764122422@qq.com>
      Date:   Mon Jul 27 00:46:35 2020 -0400
      
          fix spelling in tracking.c
      
      commit e517b31
      Author: Hunter-Chen <huntcool001@gmail.com>
      Date:   Fri Jul 17 22:33:32 2020 +0800
      
          Update redis.conf
      Co-authored-by: default avatarItamar Haber <itamar@redislabs.com>
      
      commit c300eff
      Author: Hunter-Chen <huntcool001@gmail.com>
      Date:   Fri Jul 17 22:33:23 2020 +0800
      
          Update redis.conf
      Co-authored-by: default avatarItamar Haber <itamar@redislabs.com>
      
      commit 4c058a8
      Author: 陈浩鹏 <chenhaopeng@heytea.com>
      Date:   Thu Jun 25 19:00:56 2020 +0800
      
          Grammar fix and clarification
      
      commit 5fcaa81
      Author: bodong.ybd <bodong.ybd@alibaba-inc.com>
      Date:   Fri Jun 19 10:09:00 2020 +0800
      
          Fix typos
      
      commit 4caca9a
      Author: Pruthvi P <pruthvi@ixigo.com>
      Date:   Fri May 22 00:33:22 2020 +0530
      
          Fix typo eviciton => eviction
      
      commit b2a25f6
      Author: Brad Dunbar <dunbarb2@gmail.com>
      Date:   Sun May 17 12:39:59 2020 -0400
      
          Fix a typo.
      
      commit 12842ae
      Author: hwware <wen.hui.ware@gmail.com>
      Date:   Sun May 3 17:16:59 2020 -0400
      
          fix spelling in redis conf
      
      commit ddba07c
      Author: Chris Lamb <chris@chris-lamb.co.uk>
      Date:   Sat May 2 23:25:34 2020 +0100
      
          Correct a "conflicts" spelling error.
      
      commit 8fc7bf2
      Author: Nao YONASHIRO <yonashiro@r.recruit.co.jp>
      Date:   Thu Apr 30 10:25:27 2020 +0900
      
          docs: fix EXPIRE_FAST_CYCLE_DURATION to ACTIVE_EXPIRE_CYCLE_FAST_DURATION
      
      commit 9b2b67a
      Author: Brad Dunbar <dunbarb2@gmail.com>
      Date:   Fri Apr 24 11:46:22 2020 -0400
      
          Fix a typo.
      
      commit 0746f10
      Author: devilinrust <63737265+devilinrust@users.noreply.github.com>
      Date:   Thu Apr 16 00:17:53 2020 +0200
      
          Fix typos in server.c
      
      commit 92b588d
      Author: benjessop12 <56115861+benjessop12@users.noreply.github.com>
      Date:   Mon Apr 13 13:43:55 2020 +0100
      
          Fix spelling mistake in lazyfree.c
      
      commit 1da37aa
      Merge: 2d4ba28 af347a8c
      Author: hwware <wen.hui.ware@gmail.com>
      Date:   Thu Mar 5 22:41:31 2020 -0500
      
          Merge remote-tracking branch 'upstream/unstable' into expiretypofix
      
      commit 2d4ba28
      Author: hwware <wen.hui.ware@gmail.com>
      Date:   Mon Mar 2 00:09:40 2020 -0500
      
          fix typo in expire.c
      
      commit 1a746f7
      Author: SennoYuki <minakami1yuki@gmail.com>
      Date:   Thu Feb 27 16:54:32 2020 +0800
      
          fix typo
      
      commit 8599b1a
      Author: dongheejeong <donghee950403@gmail.com>
      Date:   Sun Feb 16 20:31:43 2020 +0000
      
          Fix typo in server.c
      
      commit f38d4e8
      Author: hwware <wen.hui.ware@gmail.com>
      Date:   Sun Feb 2 22:58:38 2020 -0500
      
          fix typo in evict.c
      
      commit fe143fc
      Author: Leo Murillo <leonardo.murillo@gmail.com>
      Date:   Sun Feb 2 01:57:22 2020 -0600
      
          Fix a few typos in redis.conf
      
      commit 1ab4d21
      Author: viraja1 <anchan.viraj@gmail.com>
      Date:   Fri Dec 27 17:15:58 2019 +0530
      
          Fix typo in Latency API docstring
      
      commit ca1f70e
      Author: gosth <danxuedexing@qq.com>
      Date:   Wed Dec 18 15:18:02 2019 +0800
      
          fix typo in sort.c
      
      commit a57c06b
      Author: ZYunH <zyunhjob@163.com>
      Date:   Mon Dec 16 22:28:46 2019 +0800
      
          fix-zset-typo
      
      commit b8c92b5
      Author: git-hulk <hulk.website@gmail.com>
      Date:   Mon Dec 16 15:51:42 2019 +0800
      
          FIX: typo in cluster.c, onformation->information
      
      commit 9dd981c
      Author: wujm2007 <jim.wujm@gmail.com>
      Date:   Mon Dec 16 09:37:52 2019 +0800
      
          Fix typo
      
      commit e132d7a
      Author: Sebastien Williams-Wynn <s.williamswynn.mail@gmail.com>
      Date:   Fri Nov 15 00:14:07 2019 +0000
      
          Minor typo change
      
      commit 47f44d5
      Author: happynote3966 <01ssrmikururudevice01@gmail.com>
      Date:   Mon Nov 11 22:08:48 2019 +0900
      
          fix comment typo in redis-cli.c
      
      commit b8bdb0d
      Author: fulei <fulei@kuaishou.com>
      Date:   Wed Oct 16 18:00:17 2019 +0800
      
          Fix a spelling mistake of comments  in defragDictBucketCallback
      
      commit 0def46a
      Author: fulei <fulei@kuaishou.com>
      Date:   Wed Oct 16 13:09:27 2019 +0800
      
          fix some spelling mistakes of comments in defrag.c
      
      commit f3596fd
      Author: Phil Rajchgot <tophil@outlook.com>
      Date:   Sun Oct 13 02:02:32 2019 -0400
      
          Typo and grammar fixes
      
          Redis and its documentation are great -- just wanted to submit a few corrections in the spirit of Hacktoberfest. Thanks for all your work on this project. I use it all the time and it works beautifully.
      
      commit 2b928cd
      Author: KangZhiDong <worldkzd@gmail.com>
      Date:   Sun Sep 1 07:03:11 2019 +0800
      
          fix typos
      
      commit 33aea14
      Author: Axlgrep <axlgrep@gmail.com>
      Date:   Tue Aug 27 11:02:18 2019 +0800
      
          Fixed eviction spelling issues
      
      commit e282a80
      Author: Simen Flatby <simen@oms.no>
      Date:   Tue Aug 20 15:25:51 2019 +0200
      
          Update comments to reflect prop name
      
          In the comments the prop is referenced as replica-validity-factor,
          but it is really named cluster-replica-validity-factor.
      
      commit 74d1f9a
      Author: Jim Green <jimgreen2013@qq.com>
      Date:   Tue Aug 20 20:00:31 2019 +0800
      
          fix comment error, the code is ok
      
      commit eea1407
      Author: Liao Tonglang <liaotonglang@gmail.com>
      Date:   Fri May 31 10:16:18 2019 +0800
      
          typo fix
      
          fix cna't to can't
      
      commit 0da553c
      Author: KAWACHI Takashi <tkawachi@gmail.com>
      Date:   Wed Jul 17 00:38:16 2019 +0900
      
          Fix typo
      
      commit 7fc8fb6
      Author: Michael Prokop <mika@grml.org>
      Date:   Tue May 28 17:58:42 2019 +0200
      
          Typo fixes
      
          s/familar/familiar/
          s/compatiblity/compatibility/
          s/ ot / to /
          s/itsef/itself/
      
      commit 5f46c9d
      Author: zhumoing <34539422+zhumoing@users.noreply.github.com>
      Date:   Tue May 21 21:16:50 2019 +0800
      
          typo-fixes
      
          typo-fixes
      
      commit 321dfe1
      Author: wxisme <850885154@qq.com>
      Date:   Sat Mar 16 15:10:55 2019 +0800
      
          typo fix
      
      commit b4fb131
      Merge: 267e0e6 3df1eb85
      Author: Nikitas Bastas <nikitasbst@gmail.com>
      Date:   Fri Feb 8 22:55:45 2019 +0200
      
          Merge branch 'unstable' of antirez/redis into unstable
      
      commit 267e0e6
      Author: Nikitas Bastas <nikitasbst@gmail.com>
      Date:   Wed Jan 30 21:26:04 2019 +0200
      
          Minor typo fix
      
      commit 30544e7
      Author: inshal96 <39904558+inshal96@users.noreply.github.com>
      Date:   Fri Jan 4 16:54:50 2019 +0500
      
          remove an extra 'a' in the comments
      
      commit 337969d
      Author: BrotherGao <yangdongheng11@gmail.com>
      Date:   Sat Dec 29 12:37:29 2018 +0800
      
          fix typo in redis.conf
      
      commit 9f4b121
      Merge: 423a030 e504583b
      Author: BrotherGao <yangdongheng@xiaomi.com>
      Date:   Sat Dec 29 11:41:12 2018 +0800
      
          Merge branch 'unstable' of antirez/redis into unstable
      
      commit 423a030
      Merge: 42b02b7 46a51cdc
      Author: 杨东衡 <yangdongheng@xiaomi.com>
      Date:   Tue Dec 4 23:56:11 2018 +0800
      
          Merge branch 'unstable' of antirez/redis into unstable
      
      commit 42b02b7
      Merge: 68c0e6e3 b8febe60
      
      
      Author: Dongheng Yang <yangdongheng11@gmail.com>
      Date:   Sun Oct 28 15:54:23 2018 +0800
      
          Merge pull request #1 from antirez/unstable
      
          update local data
      
      commit 714b589
      Author: Christian <crifei93@gmail.com>
      Date:   Fri Dec 28 01:17:26 2018 +0100
      
          fix typo "resulution"
      
      commit e23259d
      Author: garenchan <1412950785@qq.com>
      Date:   Wed Dec 26 09:58:35 2018 +0800
      
          fix typo: segfauls -> segfault
      
      commit a9359f8
      Author: xjp <jianping_xie@aliyun.com>
      Date:   Tue Dec 18 17:31:44 2018 +0800
      
          Fixed REDISMODULE_H spell bug
      
      commit a12c3e4
      Author: jdiaz <jrd.palacios@gmail.com>
      Date:   Sat Dec 15 23:39:52 2018 -0600
      
          Fixes hyperloglog hash function comment block description
      
      commit 770eb11
      Author: 林上耀 <1210tom@163.com>
      Date:   Sun Nov 25 17:16:10 2018 +0800
      
          fix typo
      
      commit fd97fbb
      Author: Chris Lamb <chris@chris-lamb.co.uk>
      Date:   Fri Nov 23 17:14:01 2018 +0100
      
          Correct "unsupported" typo.
      
      commit a85522d
      Author: Jungnam Lee <jungnam.lee@oracle.com>
      Date:   Thu Nov 8 23:01:29 2018 +0900
      
          fix typo in test comments
      
      commit ade8007
      Author: Arun Kumar <palerdot@users.noreply.github.com>
      Date:   Tue Oct 23 16:56:35 2018 +0530
      
          Fixed grammatical typo
      
          Fixed typo for word 'dictionary'
      
      commit 869ee39
      Author: Hamid Alaei <hamid.a85@gmail.com>
      Date:   Sun Aug 12 16:40:02 2018 +0430
      
          fix documentations: (ThreadSafeContextStart/Stop -> ThreadSafeContextLock/Unlock), minor typo
      
      commit f89d158
      Author: Mayank Jain <mayankjain255@gmail.com>
      Date:   Tue Jul 31 23:01:21 2018 +0530
      
          Updated README.md with some spelling corrections.
      
          Made correction in spelling of some misspelled words.
      
      commit 892198e
      Author: dsomeshwar <someshwar.dhayalan@gmail.com>
      Date:   Sat Jul 21 23:23:04 2018 +0530
      
          typo fix
      
      commit 8a4d780
      Author: Itamar Haber <itamar@redislabs.com>
      Date:   Mon Apr 30 02:06:52 2018 +0300
      
          Fixes some typos
      
      commit e3acef6
      Author: Noah Rosamilia <ivoahivoah@gmail.com>
      Date:   Sat Mar 3 23:41:21 2018 -0500
      
          Fix typo in /deps/README.md
      
      commit 04442fb
      Author: WuYunlong <xzsyeb@126.com>
      Date:   Sat Mar 3 10:32:42 2018 +0800
      
          Fix typo in readSyncBulkPayload() comment.
      
      commit 9f36880
      Author: WuYunlong <xzsyeb@126.com>
      Date:   Sat Mar 3 10:20:37 2018 +0800
      
          replication.c comment: run_id -> replid.
      
      commit f866b4a
      Author: Francesco 'makevoid' Canessa <makevoid@gmail.com>
      Date:   Thu Feb 22 22:01:56 2018 +0000
      
          fix comment typo in server.c
      
      commit 0ebc69b
      Author: 줍 <jubee0124@gmail.com>
      Date:   Mon Feb 12 16:38:48 2018 +0900
      
          Fix typo in redis.conf
      
          Fix `five behaviors` to `eight behaviors` in [this sentence ](antirez/redis@unstable/redis.conf#L564)
      
      commit b50a620
      Author: martinbroadhurst <martinbroadhurst@users.noreply.github.com>
      Date:   Thu Dec 28 12:07:30 2017 +0000
      
          Fix typo in valgrind.sup
      
      commit 7d8f349
      Author: Peter Boughton <peter@sorcerersisle.com>
      Date:   Mon Nov 27 19:52:19 2017 +0000
      
          Update CONTRIBUTING; refer doc updates to redis-doc repo.
      
      commit 02dec7e
      Author: Klauswk <klauswk1@hotmail.com>
      Date:   Tue Oct 24 16:18:38 2017 -0200
      
          Fix typo in comment
      
      commit e1efbc8
      Author: chenshi <baiwfg2@gmail.com>
      Date:   Tue Oct 3 18:26:30 2017 +0800
      
          Correct two spelling errors of comments
      
      commit 93327d8
      Author: spacewander <spacewanderlzx@gmail.com>
      Date:   Wed Sep 13 16:47:24 2017 +0800
      
          Update the comment for OBJ_ENCODING_EMBSTR_SIZE_LIMIT's value
      
          The value of OBJ_ENCODING_EMBSTR_SIZE_LIMIT is 44 now instead of 39.
      
      commit 63d361f
      Author: spacewander <spacewanderlzx@gmail.com>
      Date:   Tue Sep 12 15:06:42 2017 +0800
      
          Fix <prevlen> related doc in ziplist.c
      
          According to the definition of ZIP_BIG_PREVLEN and other related code,
          the guard of single byte <prevlen> should be 254 instead of 255.
      
      commit ebe228d
      Author: hanael80 <hanael80@gmail.com>
      Date:   Tue Aug 15 09:09:40 2017 +0900
      
          Fix typo
      
      commit 6b696e6
      Author: Matt Robenolt <matt@ydekproductions.com>
      Date:   Mon Aug 14 14:50:47 2017 -0700
      
          Fix typo in LATENCY DOCTOR output
      
      commit a2ec6ae
      Author: caosiyang <caosiyang@qiyi.com>
      Date:   Tue Aug 15 14:15:16 2017 +0800
      
          Fix a typo: form => from
      
      commit 3ab7699
      Author: caosiyang <caosiyang@qiyi.com>
      Date:   Thu Aug 10 18:40:33 2017 +0800
      
          Fix a typo: replicationFeedSlavesFromMaster() => replicationFeedSlavesFromMasterStream()
      
      commit 72d43ef
      Author: caosiyang <caosiyang@qiyi.com>
      Date:   Tue Aug 8 15:57:25 2017 +0800
      
          fix a typo: servewr => server
      
      commit 707c958
      Author: Bo Cai <charpty@gmail.com>
      Date:   Wed Jul 26 21:49:42 2017 +0800
      
          redis-cli.c typo: conut -> count.
      Signed-off-by: default avatarBo Cai <charpty@gmail.com>
      
      commit b9385b2
      Author: JackDrogon <jack.xsuperman@gmail.com>
      Date:   Fri Jun 30 14:22:31 2017 +0800
      
          Fix some spell problems
      
      commit 20d9230
      Author: akosel <aaronjkosel@gmail.com>
      Date:   Sun Jun 4 19:35:13 2017 -0500
      
          Fix typo
      
      commit b167bfc
      Author: Krzysiek Witkowicz <krzysiekwitkowicz@gmail.com>
      Date:   Mon May 22 21:32:27 2017 +0100
      
          Fix #4008 small typo in comment
      
      commit 2b78ac8
      Author: Jake Clarkson <jacobwclarkson@gmail.com>
      Date:   Wed Apr 26 15:49:50 2017 +0100
      
          Correct typo in tests/unit/hyperloglog.tcl
      
      commit b0f1cdb
      Author: Qi Luo <qiluo-msft@users.noreply.github.com>
      Date:   Wed Apr 19 14:25:18 2017 -0700
      
          Fix typo
      
      commit a90b0f9
      Author: charsyam <charsyam@naver.com>
      Date:   Thu Mar 16 18:19:53 2017 +0900
      
          fix typos
      
          fix typos
      
          fix typos
      
      commit 8430a79
      Author: Richard Hart <richardhart92@gmail.com>
      Date:   Mon Mar 13 22:17:41 2017 -0400
      
          Fixed log message typo in listenToPort.
      
      commit 481a1c2
      Author: Vinod Kumar <kumar003vinod@gmail.com>
      Date:   Sun Jan 15 23:04:51 2017 +0530
      
          src/db.c: Correct "save" -> "safe" typo
      
      commit 586b4d3
      Author: wangshaonan <wshn13@gmail.com>
      Date:   Wed Dec 21 20:28:27 2016 +0800
      
          Fix typo they->the in helloworld.c
      
      commit c1c4b5e
      Author: Jenner <hypxm@qq.com>
      Date:   Mon Dec 19 16:39:46 2016 +0800
      
          typo error
      
      commit 1ee1a3f
      Author: tielei <43289893@qq.com>
      Date:   Mon Jul 18 13:52:25 2016 +0800
      
          fix some comments
      
      commit 11a41fb
      Author: Otto Kekäläinen <otto@seravo.fi>
      Date:   Sun Jul 3 10:23:55 2016 +0100
      
          Fix spelling in documentation and comments
      
      commit 5fb5d82
      Author: francischan <f1ancis621@gmail.com>
      Date:   Tue Jun 28 00:19:33 2016 +0800
      
          Fix outdated comments about redis.c file.
          It should now refer to server.c file.
      
      commit 6b254bc
      Author: lmatt-bit <lmatt123n@gmail.com>
      Date:   Thu Apr 21 21:45:58 2016 +0800
      
          Refine the comment of dictRehashMilliseconds func
      
      SLAVECONF->REPLCONF in comment - by andyli029
      
      commit ee9869f
      Author: clark.kang <charsyam@naver.com>
      Date:   Tue Mar 22 11:09:51 2016 +0900
      
          fix typos
      
      commit f7b3b11
      Author: Harisankar H <harisankarh@gmail.com>
      Date:   Wed Mar 9 11:49:42 2016 +0530
      
          Typo correction: "faield" --> "failed"
      
          Typo correction: "faield" --> "failed"
      
      commit 3fd40fc
      Author: Itamar Haber <itamar@redislabs.com>
      Date:   Thu Feb 25 10:31:51 2016 +0200
      
          Fixes a typo in comments
      
      commit 621c160
      Author: Prayag Verma <prayag.verma@gmail.com>
      Date:   Mon Feb 1 12:36:20 2016 +0530
      
          Fix typo in Readme.md
      
          Spelling mistakes -
          `eviciton` > `eviction`
          `familar` > `familiar`
      
      commit d7d07d6
      Author: WonCheol Lee <toctoc21c@gmail.com>
      Date:   Wed Dec 30 15:11:34 2015 +0900
      
          Typo fixed
      
      commit a4dade7
      Author: Felix Bünemann <buenemann@louis.info>
      Date:   Mon Dec 28 11:02:55 2015 +0100
      
          [ci skip] Improve supervised upstart config docs
      
          This mentions that "expect stop" is required for supervised upstart
          to work correctly. See http://upstart.ubuntu.com/cookbook/#expect-stop
      
      
          for an explanation.
      
      commit d9caba9
      Author: daurnimator <quae@daurnimator.com>
      Date:   Mon Dec 21 18:30:03 2015 +1100
      
          README: Remove trailing whitespace
      
      commit 72d42e5
      Author: daurnimator <quae@daurnimator.com>
      Date:   Mon Dec 21 18:29:32 2015 +1100
      
          README: Fix typo. th => the
      
      commit dd6e957
      Author: daurnimator <quae@daurnimator.com>
      Date:   Mon Dec 21 18:29:20 2015 +1100
      
          README: Fix typo. familar => familiar
      
      commit 3a12b23
      Author: daurnimator <quae@daurnimator.com>
      Date:   Mon Dec 21 18:28:54 2015 +1100
      
          README: Fix typo. eviciton => eviction
      
      commit 2d1d03b
      Author: daurnimator <quae@daurnimator.com>
      Date:   Mon Dec 21 18:21:45 2015 +1100
      
          README: Fix typo. sever => server
      
      commit 3973b06
      Author: Itamar Haber <itamar@garantiadata.com>
      Date:   Sat Dec 19 17:01:20 2015 +0200
      
          Typo fix
      
      commit 4f2e460
      Author: Steve Gao <fu@2token.com>
      Date:   Fri Dec 4 10:22:05 2015 +0800
      
          Update README - fix typos
      
      commit b21667c
      Author: binyan <binbin.yan@nokia.com>
      Date:   Wed Dec 2 22:48:37 2015 +0800
      
          delete redundancy color judge in sdscatcolor
      
      commit 88894c7
      Author: binyan <binbin.yan@nokia.com>
      Date:   Wed Dec 2 22:14:42 2015 +0800
      
          the example output shoule be HelloWorld
      
      commit 2763470
      Author: binyan <binbin.yan@nokia.com>
      Date:   Wed Dec 2 17:41:39 2015 +0800
      
          modify error word keyevente
      Signed-off-by: default avatarbinyan <binbin.yan@nokia.com>
      
      commit 0847b3d
      Author: Bruno Martins <bscmartins@gmail.com>
      Date:   Wed Nov 4 11:37:01 2015 +0000
      
          typo
      
      commit bbb9e9e
      Author: dawedawe <dawedawe@gmx.de>
      Date:   Fri Mar 27 00:46:41 2015 +0100
      
          typo: zimap -> zipmap
      
      commit 5ed297e
      Author: Axel Advento <badwolf.bloodseeker.rev@gmail.com>
      Date:   Tue Mar 3 15:58:29 2015 +0800
      
          Fix 'salve' typos to 'slave'
      
      commit edec9d6
      Author: LudwikJaniuk <ludvig.janiuk@gmail.com>
      Date:   Wed Jun 12 14:12:47 2019 +0200
      
          Update README.md
      Co-Authored-By: default avatarQix <Qix-@users.noreply.github.com>
      
      commit 692a7af
      Author: LudwikJaniuk <ludvig.janiuk@gmail.com>
      Date:   Tue May 28 14:32:04 2019 +0200
      
          grammar
      
      commit d962b0a
      Author: Nick Frost <nickfrostatx@gmail.com>
      Date:   Wed Jul 20 15:17:12 2016 -0700
      
          Minor grammar fix
      
      commit 24fff01aaccaf5956973ada8c50ceb1462e211c6 (typos)
      Author: Chad Miller <chadm@squareup.com>
      Date:   Tue Sep 8 13:46:11 2020 -0400
      
          Fix faulty comment about operation of unlink()
      
      commit 3cd5c1f3326c52aa552ada7ec797c6bb16452355
      Author: Kevin <kevin.xgr@gmail.com>
      Date:   Wed Nov 20 00:13:50 2019 +0800
      
          Fix typo in server.c.
      
      From a83af59 Mon Sep 17 00:00:00 2001
      From: wuwo <wuwo@wacai.com>
      Date: Fri, 17 Mar 2017 20:37:45 +0800
      Subject: [PATCH] falure to failure
      
      From c961896 Mon Sep 17 00:00:00 2001
      From: =?UTF-8?q?=E5=B7=A6=E6=87=B6?= <veficos@gmail.com>
      Date: Sat, 27 May 2017 15:33:04 +0800
      Subject: [PATCH] fix typo
      
      From e600ef2 Mon Sep 17 00:00:00 2001
      From: "rui.zou" <rui.zou@yunify.com>
      Date: Sat, 30 Sep 2017 12:38:15 +0800
      Subject: [PATCH] fix a typo
      
      From c7d07fa Mon Sep 17 00:00:00 2001
      From: Alexandre Perrin <alex@kaworu.ch>
      Date: Thu, 16 Aug 2018 10:35:31 +0200
      Subject: [PATCH] deps README.md typo
      
      From b25cb67 Mon Sep 17 00:00:00 2001
      From: Guy Korland <gkorland@gmail.com>
      Date: Wed, 26 Sep 2018 10:55:37 +0300
      Subject: [PATCH 1/2] fix typos in header
      
      From ad28ca6 Mon Sep 17 00:00:00 2001
      From: Guy Korland <gkorland@gmail.com>
      Date: Wed, 26 Sep 2018 11:02:36 +0300
      Subject: [PATCH 2/2] fix typos
      
      commit 34924cdedd8552466fc22c1168d49236cb7ee915
      Author: Adrian Lynch <adi_ady_ade@hotmail.com>
      Date:   Sat Apr 4 21:59:15 2015 +0100
      
          Typos fixed
      
      commit fd2a1e7
      Author: Jan <jsteemann@users.noreply.github.com>
      Date:   Sat Oct 27 19:13:01 2018 +0200
      
          Fix typos
      
          Fix typos
      
      commit e14e47c1a234b53b0e103c5f6a1c61481cbcbb02
      Author: Andy Lester <andy@petdance.com>
      Date:   Fri Aug 2 22:30:07 2019 -0500
      
          Fix multiple misspellings of "following"
      
      commit 79b948ce2dac6b453fe80995abbcaac04c213d5a
      Author: Andy Lester <andy@petdance.com>
      Date:   Fri Aug 2 22:24:28 2019 -0500
      
          Fix misspelling of create-cluster
      
      commit 1fffde52666dc99ab35efbd31071a4c008cb5a71
      Author: Andy Lester <andy@petdance.com>
      Date:   Wed Jul 31 17:57:56 2019 -0500
      
          Fix typos
      
      commit 204c9ba9651e9e05fd73936b452b9a30be456cfe
      Author: Xiaobo Zhu <xiaobo.zhu@shopee.com>
      Date:   Tue Aug 13 22:19:25 2019 +0800
      
          fix typos
      
      Squashed commit of the following:
      
      commit 1d9aaf8
      Author: danmedani <danmedani@gmail.com>
      Date:   Sun Aug 2 11:40:26 2015 -0700
      
      README typo fix.
      
      Squashed commit of the following:
      
      commit 32bfa7c
      Author: Erik Dubbelboer <erik@dubbelboer.com>
      Date:   Mon Jul 6 21:15:08 2015 +0200
      
      Fixed grammer
      
      Squashed commit of the following:
      
      commit b24f69c
      Author: Sisir Koppaka <sisir.koppaka@gmail.com>
      Date:   Mon Mar 2 22:38:45 2015 -0500
      
      utils/hashtable/rehashing.c: Fix typos
      
      Squashed commit of the following:
      
      commit 4e04082
      Author: Erik Dubbelboer <erik@dubbelboer.com>
      Date:   Mon Mar 23 08:22:21 2015 +0000
      
      Small config file documentation improvements
      
      Squashed commit of the following:
      
      commit acb8773
      Author: ctd1500 <ctd1500@gmail.com>
      Date:   Fri May 8 01:52:48 2015 -0700
      
      Typo and grammar fixes in readme
      
      commit 2eb75b6
      Author: ctd1500 <ctd1500@gmail.com>
      Date:   Fri May 8 01:36:18 2015 -0700
      
      fixed redis.conf comment
      
      Squashed commit of the following:
      
      commit a8249a2
      Author: Masahiko Sawada <sawada.mshk@gmail.com>
      Date:   Fri Dec 11 11:39:52 2015 +0530
      
      Revise correction of typos.
      
      Squashed commit of the following:
      
      commit 3c02028
      Author: zhaojun11 <zhaojun11@jd.com>
      Date:   Wed Jan 17 19:05:28 2018 +0800
      
      Fix typos include two code typos in cluster.c and latency.c
      
      Squashed commit of the following:
      
      commit 9dba47c
      Author: q191201771 <191201771@qq.com>
      Date:   Sat Jan 4 11:31:04 2020 +0800
      
      fix function listCreate comment in adlist.c
      
      Update src/server.c
      
      commit 2c7c2cb536e78dd211b1ac6f7bda00f0f54faaeb
      Author: charpty <charpty@gmail.com>
      Date:   Tue May 1 23:16:59 2018 +0800
      
          server.c typo: modules system dictionary type comment
      Signed-off-by: default avatarcharpty <charpty@gmail.com>
      
      commit a8395323fb63cb59cb3591cb0f0c8edb7c29a680
      Author: Itamar Haber <itamar@redislabs.com>
      Date:   Sun May 6 00:25:18 2018 +0300
      
          Updates test_helper.tcl's help with undocumented options
      
          Specifically:
      
          * Host
          * Port
          * Client
      
      commit bde6f9ced15755cd6407b4af7d601b030f36d60b
      Author: wxisme <850885154@qq.com>
      Date:   Wed Aug 8 15:19:19 2018 +0800
      
          fix comments in deps files
      
      commit 3172474ba991532ab799ee1873439f3402412331
      Author: wxisme <850885154@qq.com>
      Date:   Wed Aug 8 14:33:49 2018 +0800
      
          fix some comments
      
      commit 01b6f2b6858b5cf2ce4ad5092d2c746e755f53f0
      Author: Thor Juhasz <thor@juhasz.pro>
      Date:   Sun Nov 18 14:37:41 2018 +0100
      
          Minor fixes to comments
      
          Found some parts a little unclear on a first read, which prompted me to have a better look at the file and fix some minor things I noticed.
          Fixing minor typos and grammar. There are no changes to configuration options.
          These changes are only meant to help the user better understand the explanations to the various configuration options
      1c710385
  27. 12 Aug, 2020 1 commit
    • Yossi Gottlieb's avatar
      Add oom-score-adj configuration option to control Linux OOM killer. (#1690) · 2530dc0e
      Yossi Gottlieb authored
      Add Linux kernel OOM killer control option.
      
      This adds the ability to control the Linux OOM killer oom_score_adj
      parameter for all Redis processes, depending on the process role (i.e.
      master, replica, background child).
      
      A oom-score-adj global boolean flag control this feature. In addition,
      specific values can be configured using oom-score-adj-values if
      additional tuning is required.
      2530dc0e
  28. 06 Jun, 2020 1 commit
  29. 12 May, 2020 1 commit
  30. 04 May, 2020 1 commit
  31. 02 May, 2020 1 commit
    • zhenwei pi's avatar
      Support setcpuaffinity on linux/bsd · 1a0deab2
      zhenwei pi authored
      Currently, there are several types of threads/child processes of a
      redis server. Sometimes we need deeply optimise the performance of
      redis, so we would like to isolate threads/processes.
      
      There were some discussion about cpu affinity cases in the issue:
      https://github.com/antirez/redis/issues/2863
      
      
      
      So implement cpu affinity setting by redis.conf in this patch, then
      we can config server_cpulist/bio_cpulist/aof_rewrite_cpulist/
      bgsave_cpulist by cpu list.
      
      Examples of cpulist in redis.conf:
      server_cpulist 0-7:2      means cpu affinity 0,2,4,6
      bio_cpulist 1,3           means cpu affinity 1,3
      aof_rewrite_cpulist 8-11  means cpu affinity 8,9,10,11
      bgsave_cpulist 1,10-11    means cpu affinity 1,10,11
      
      Test on linux/freebsd, both work fine.
      Signed-off-by: default avatarzhenwei pi <pizhenwei@bytedance.com>
      1a0deab2
  32. 20 Apr, 2020 1 commit
    • antirez's avatar
      Implement redis_set_thread_title for MacOS. · c7db333a
      antirez authored
      Strange enough, pthread_setname_np() produces a warning for not defined
      function even if pthread is included. Moreover the MacOS documentation
      claims the return value for the function is void, but actually is int.
      
      Related to #7089.
      c7db333a
  33. 18 Apr, 2020 1 commit
    • zhenwei pi's avatar
      Threaded IO: set thread name for redis-server · 5010da6a
      zhenwei pi authored
      
      
      Set thread name for each thread of redis-server, this helps us to
      monitor the utilization and optimise the performance.
      
      And suggested-by Salvatore, implement this feature for multi
      platforms. Currently support linux and bsd, ignore other OS.
      
      An exmaple on Linux:
       # top -d 5 -p `pidof redis-server ` -H
      
          PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
      3682671 root      20   0  227744   8248   3836 R 99.2  0.0   0:19.53 redis-server
      3682677 root      20   0  227744   8248   3836 S 26.4  0.0   0:04.15 io_thd_3
      3682675 root      20   0  227744   8248   3836 S 23.6  0.0   0:03.98 io_thd_1
      3682676 root      20   0  227744   8248   3836 S 23.6  0.0   0:03.97 io_thd_2
      3682672 root      20   0  227744   8248   3836 S  0.2  0.0   0:00.02 bio_close_file
      3682673 root      20   0  227744   8248   3836 S  0.2  0.0   0:00.02 bio_aof_fsync
      3682674 root      20   0  227744   8248   3836 S  0.0  0.0   0:00.00 bio_lazy_free
      3682678 root      20   0  227744   8248   3836 S  0.0  0.0   0:00.00 jemalloc_bg_thd
      3682682 root      20   0  227744   8248   3836 S  0.0  0.0   0:00.00 jemalloc_bg_thd
      3682683 root      20   0  227744   8248   3836 S  0.0  0.0   0:00.00 jemalloc_bg_thd
      3682684 root      20   0  227744   8248   3836 S  0.0  0.0   0:00.00 jemalloc_bg_thd
      3682685 root      20   0  227744   8248   3836 S  0.0  0.0   0:00.00 jemalloc_bg_thd
      3682687 root      20   0  227744   8248   3836 S  0.0  0.0   0:00.00 jemalloc_bg_thd
      
      Another exmaple on FreeBSD-12.1:
        PID USERNAME    PRI NICE   SIZE    RES STATE    C   TIME    WCPU COMMAND
       5212 root        100    0    48M  7280K CPU2     2   0:26  99.52% redis-server{redis-server}
       5212 root         38    0    48M  7280K umtxn    4   0:06  26.94% redis-server{io_thd_3}
       5212 root         36    0    48M  7280K umtxn    6   0:06  26.84% redis-server{io_thd_1}
       5212 root         39    0    48M  7280K umtxn    1   0:06  25.30% redis-server{io_thd_2}
       5212 root         20    0    48M  7280K uwait    3   0:00   0.00% redis-server{redis-server}
       5212 root         21    0    48M  7280K uwait    2   0:00   0.00% redis-server{bio_close_file}
       5212 root         21    0    48M  7280K uwait    3   0:00   0.00% redis-server{bio_aof_fsync}
       5212 root         21    0    48M  7280K uwait    0   0:00   0.00% redis-server{bio_lazy_free}
      Signed-off-by: default avatarzhenwei pi <pizhenwei@bytedance.com>
      5010da6a
  34. 14 Apr, 2020 1 commit
  35. 25 Nov, 2018 2 commits
  36. 15 Mar, 2018 1 commit
  37. 23 Feb, 2017 1 commit
  38. 19 Feb, 2017 1 commit