Operating System Tuning for Cassandra
Optimize your Linux operating system for Cassandra performance.
Disk I/O Settings
Section titled “Disk I/O Settings”Scheduler
Section titled “Scheduler”# Check current schedulercat /sys/block/sda/queue/scheduler
# Set to deadline or noop for SSDsecho deadline > /sys/block/sda/queue/scheduler# Or for NVMeecho none > /sys/block/nvme0n1/queue/schedulerRead-Ahead
Section titled “Read-Ahead”# Set read-ahead (8KB for SSDs, 64KB for HDDs)blockdev --setra 8 /dev/sda
# Verifyblockdev --getra /dev/sdaPersistent Configuration
Section titled “Persistent Configuration”ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/scheduler}="deadline"ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/read_ahead_kb}="8"ACTION=="add|change", KERNEL=="nvme[0-9]*", ATTR{queue/scheduler}="none"Memory Settings
Section titled “Memory Settings”# Disable swap (recommended)swapoff -a
# Or set swappiness to minimumecho 0 > /proc/sys/vm/swappiness
# Persistentecho "vm.swappiness = 0" >> /etc/sysctl.confZone Reclaim
Section titled “Zone Reclaim”# Disable zone reclaim for NUMAecho 0 > /proc/sys/vm/zone_reclaim_modeDirty Pages
Section titled “Dirty Pages”vm.dirty_background_ratio = 5vm.dirty_ratio = 80Network Tuning
Section titled “Network Tuning”TCP Settings
Section titled “TCP Settings”# Increase socket buffer sizesnet.core.rmem_max = 16777216net.core.wmem_max = 16777216net.core.rmem_default = 16777216net.core.wmem_default = 16777216net.core.optmem_max = 40960
# TCP buffersnet.ipv4.tcp_rmem = 4096 87380 16777216net.ipv4.tcp_wmem = 4096 65536 16777216
# Connection handlingnet.core.netdev_max_backlog = 50000net.core.somaxconn = 65535net.ipv4.tcp_max_syn_backlog = 30000
# Timeoutsnet.ipv4.tcp_fin_timeout = 10net.ipv4.tcp_keepalive_time = 60net.ipv4.tcp_keepalive_probes = 3net.ipv4.tcp_keepalive_intvl = 10Apply Changes
Section titled “Apply Changes”sysctl -pFile Descriptors
Section titled “File Descriptors”Limits
Section titled “Limits”cassandra soft nofile 100000cassandra hard nofile 100000cassandra soft nproc 32768cassandra hard nproc 32768cassandra soft memlock unlimitedcassandra hard memlock unlimitedcassandra soft as unlimitedcassandra hard as unlimitedVerify
Section titled “Verify”# As cassandra userulimit -n # File descriptorsulimit -u # Processesulimit -l # Memory lockTransparent Huge Pages
Section titled “Transparent Huge Pages”Disable THP - causes latency spikes with Cassandra.
# Check current statuscat /sys/kernel/mm/transparent_hugepage/enabledcat /sys/kernel/mm/transparent_hugepage/defrag
# Disableecho never > /sys/kernel/mm/transparent_hugepage/enabledecho never > /sys/kernel/mm/transparent_hugepage/defragPersistent Disable
Section titled “Persistent Disable”# /etc/rc.local or systemd serviceif test -f /sys/kernel/mm/transparent_hugepage/enabled; then echo never > /sys/kernel/mm/transparent_hugepage/enabledfiif test -f /sys/kernel/mm/transparent_hugepage/defrag; then echo never > /sys/kernel/mm/transparent_hugepage/defragfiCPU Settings
Section titled “CPU Settings”CPU Governor
Section titled “CPU Governor”# Set to performancefor cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do echo performance > $cpudone
# Verifycat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor# Verify NUMA topologynumactl --hardware
# Run Cassandra with NUMA awarenessnumactl --interleave=all cassandraFilesystem
Section titled “Filesystem”Filesystem selection significantly impacts Cassandra performance, particularly for commit log operations. The choice between XFS and ext4 depends on workload characteristics and Linux distribution.
Quick recommendations:
| Use Case | Filesystem | Notes |
|---|---|---|
| Data directories | XFS | Optimized for large files and parallel I/O |
| Commit logs | ext4 or XFS + compression | ext4 has better memory-mapped I/O performance |
→ Filesystem Selection Guide - Complete architecture comparison, benchmarks, and configuration
Basic mount options:
# XFS for data/dev/sdb1 /var/lib/cassandra/data xfs defaults,noatime,nodiratime 0 2
# ext4 for commit logs/dev/sdc1 /var/lib/cassandra/commitlog ext4 defaults,noatime,nodiratime 0 2Complete Configuration Script
Section titled “Complete Configuration Script”#!/bin/bash# Disable swapswapoff -a
# Disable THPecho never > /sys/kernel/mm/transparent_hugepage/enabledecho never > /sys/kernel/mm/transparent_hugepage/defrag
# Set swappinesssysctl -w vm.swappiness=0
# Disk scheduler (adjust device names)echo deadline > /sys/block/sda/queue/scheduler
# Apply sysctl settingssysctl -p
echo "OS tuning applied"Next Steps
Section titled “Next Steps”- Filesystem Selection - XFS vs ext4 architecture and recommendations
- JVM Tuning - JVM optimization
- Hardware - Hardware sizing
- Performance Overview - Performance guide