Memcached 1.6.34+ extstore Hybrid RAM + NVMe Flash Config
# Memcached 1.6.34+ Hybrid DRAM + NVMe Flash (extstore) Systemd Environment
# Place in /etc/sysconfig/memcached or /etc/default/memcached
# Architecture: 16 GB RAM (keys, headers & hot small items) + 128 GB dedicated NVMe file
PORT="11211"
USER="memcached"
MAXCONN="8192"
# 16384 MB DRAM ceiling for hash table, metadata headers, and items < ext_item_size
CACHESIZE="16384"
# Security & Networking: Disable UDP (-U 0), bind internal interface, 8 worker threads
# Extended (-o) options:
# modern = Segmented HOT/WARM/COLD LRU +slab_reassign +lru_crawler +lru_maintainer
# slab_automove=1 = Automatically move 1MB pages across slab classes as item sizes shift
# ext_path = Dedicated NVMe file path & capacity (pre-create directory on local XFS/ext4 NVMe)
# ext_item_size=1024 = Offload values >= 1 KB to NVMe; keep tiny counters/flags purely in DRAM
# ext_wbuf_size=8 = 8 MB sequential write buffer (minimizes SSD write amplification)
# ext_threads=6 = Dedicated async disk reader/writer threads
# ext_compact_under=4 = Compact sparse flash pages when free fragments exceed threshold
OPTIONS="-l 127.0.0.1 -U 0 -t 8 -o modern,slab_automove=1,ext_path=/var/lib/memcached-nvme/extstore.bin:128G,ext_item_size=1024,ext_wbuf_size=8,ext_threads=6"
# --- Live Health & Headroom Telemetry (run via socat / nc) ---
# printf "stats extstore
quit
" | nc -U /run/memcached/memcached.sock || nc 127.0.0.1 11211
# Watch:
# extstore_memory_pressure (target < 80%; 100% means RAM header headroom is full)
# extstore_bytes_used / extstore_page_evictions / extstore_io_queue