Varnish Enterprise 6.0.17r4 is a feature and bug fix release. The
headline change is a rewrite of the MSE4 eviction (LRU) machinery to
run lock-free, which significantly improves performance and tail
latency for caches with high object churn. The release also
adds new tuning knobs for MSE4 and expands vmod_tcp with backend-side
TCP information logging.
The new features and notable changes are highlighted below. Please see the changelog for the complete list of changes.
Massive Storage Engine 4 (MSE4) introduces a lockless LRU (Least Recently Used) eviction algorithm developed to resolve production bottlenecks in highly taxing, exabyte-scale workloads. The new implementation manages the eviction list without taking any mutexes, improving performance for caches with high object churn by allowing entries to be inserted, promoted, and evicted in parallel across any CPU core. In testing under concurrent workloads, the lockless design resolved previous performance regressions and stabilized latencies, sustaining 75,000 chunk evictions per second at 1.2 terabits per second on Gen 5 NVMes, with a p50 of 1.65 ms and a p99 of 3.5 ms for 2M chunks.
Configuration impact and subdivisions
Because the LRU lists are now lockless, the historical need for storage subdivisions has largely gone away. Previously, subdivisions were configured primarily to introduce additional mutexes to artificially distribute load and achieve parallelism.
To reflect this optimization, the default_subdivisions setting has
been changed from 4 to 1. While the underlying subdivision
infrastructure remains intact, and utilizing it would simply create
multiple lockless LRU lists per subdivision, it is our strong
recommendation to run with just one subdivision moving forward. We
advise reviewing and updating your MSE configuration to align with
this new architectural default.
Alongside the lockless rewrite, two new parameters give operators finer control over eviction behavior:
*reorder_interval*: a new per-category setting, together with
the default_reorder_interval environment parameter, controls the
minimum interval between LRU reorder operations. This replaces the
role previously played by the global lru_interval parameter, which
no longer has any effect on MSE4 caches.
eviction_busy_promotion: a new environment parameter that
controls promotion of busy entries during eviction. When an entry
has been skipped this many times due to being busy, it is promoted
to the head of the eviction list so that it no longer blocks
eviction at the tail. Defaults to 4; set to 0 to disable.
vmod_tcp: backend TCP information loggingA new log_backend_info() function mirrors the client-side
log_info() for backend connections. It logs selected kernel TCP
metrics for the backend socket at the end of the backend transaction,
under the betcpinfo record prefix by default.
Field selection, delta: prefixes, and the text / column / json
output formats all work the same way as for log_info(). When
extrachance retries kick in, one record is produced per attempt, so a
single fetch can yield multiple betcpinfo records on a flaky path.
Typical usage:
sub vcl_backend_response {
tcp.log_backend_info();
}
This helps diagnose backend-side network issues such as
retransmissions, congestion-window evolution, and RTT on a per-request
basis. See the
vmod_tcp reference
for the full list of available fields.
vmod_tcp client logging on early session end: vmod_tcp now
properly reports client-side TCP information at the end of
processing even when the client session is ended early. (VS issue
#3115)