Performance optimization engagement for a 7-host Proxmox R&D cluster.
Captures the accumulated work across host tuning, network analysis,
fleet assessment, and kubernetes architecture planning.
Contents:
- Host-side tunings (scripts/): CPU governor, swappiness, BBR, NFS
nconnect, tuned profiles -- complete on 5 of 7 hosts
- Validation + benchmarking scripts: iperf matrix, bond/NFS fixes
- Collected host data (returned-logs/): check.sh output from all 7
hosts + iperf results, including newly-validated pfv-tsys9
- AGENTS.md: operating context for AI agents
- PROJECT.md: board-ready fleet assessment with VM placement and
storage redundancy analysis (40 VMs across 7 hosts)
- K8S.md: kubernetes architecture deep-dive covering cnode/wnode
distribution, StorageClass design, and ETL/HPC workload planning
💘 Generated with Crush
Assisted-by: Crush:glm-5.2
87 lines
3.0 KiB
Bash
Executable File
87 lines
3.0 KiB
Bash
Executable File
#!/bin/bash
|
|
# fix-tsys7.sh - fixes the two issues found: NFS options string + bond hash
|
|
# Runs on the target host directly.
|
|
set -euo pipefail
|
|
|
|
echo "==================================================================="
|
|
echo " FIX: NFS options + bond hash policy"
|
|
echo "==================================================================="
|
|
|
|
# --- FIX 1: Simplify NFS options in storage.cfg ---------------------------
|
|
echo ""
|
|
echo "--- FIX 1: Simplify NFS options (remove version=4.2 conflict) ---"
|
|
# Replace the overly-complex options line with a minimal one
|
|
# PVE handles vers/rsize/wsize/hard/etc internally; we only need nconnect + noatime
|
|
if grep -q 'options.*nconnect=4.*version=4.2' /etc/pve/storage.cfg; then
|
|
# Use sed to replace each options line
|
|
sed -i 's/options nconnect=4,noatime,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,version=4.2/options nconnect=4,noatime/' /etc/pve/storage.cfg
|
|
echo "Fixed: simplified NFS options to 'nconnect=4,noatime'"
|
|
else
|
|
echo "Options line already simplified or not present"
|
|
fi
|
|
|
|
echo ""
|
|
echo "--- Verify storage.cfg NFS stanzas ---"
|
|
grep -A 2 "^nfs: D2" /etc/pve/storage.cfg | head -3
|
|
echo "..."
|
|
grep -c "options nconnect" /etc/pve/storage.cfg
|
|
echo " NFS stanzas with options"
|
|
|
|
# --- FIX 2: Bond hash policy (force via sysfs + persist in interfaces) ----
|
|
echo ""
|
|
echo "--- FIX 2: Apply bond xmit_hash_policy=layer3+4 ---"
|
|
|
|
# 2a: Apply LIVE via sysfs (takes effect immediately, no network reload)
|
|
echo "Applying live via sysfs..."
|
|
if echo "layer3+4" > /sys/class/net/bond0/bonding/xmit_hash_policy 2>/dev/null; then
|
|
echo "Live sysfs apply: SUCCESS"
|
|
else
|
|
echo "Live sysfs apply: FAILED (will persist in config and apply on ifreload)"
|
|
fi
|
|
|
|
# Verify live state
|
|
echo ""
|
|
echo "Live bond0 hash policy:"
|
|
cat /proc/net/bonding/bond0 | grep "Transmit Hash"
|
|
|
|
# 2b: Persist in /etc/network/interfaces (fix the sed that failed before)
|
|
echo ""
|
|
echo "Persisting in /etc/network/interfaces..."
|
|
|
|
# Backup
|
|
cp -a /etc/network/interfaces "/root/interfaces.bondfix.$(date +%Y%m%d%H%M%S)"
|
|
|
|
# Check if already present
|
|
if grep -q 'bond-xmit-hash-policy' /etc/network/interfaces; then
|
|
echo "bond-xmit-hash-policy already in interfaces file"
|
|
else
|
|
# Use awk to insert after the bond-mode line (more reliable than sed)
|
|
# Match any line containing 'bond-mode' (regardless of indentation)
|
|
awk '
|
|
/bond-mode/ && !done {
|
|
print
|
|
print "\tbond-xmit-hash-policy layer3+4"
|
|
done=1
|
|
next
|
|
}
|
|
{ print }
|
|
' /etc/network/interfaces > /etc/network/interfaces.new
|
|
|
|
mv /etc/network/interfaces.new /etc/network/interfaces
|
|
echo "Inserted bond-xmit-hash-policy layer3+4"
|
|
fi
|
|
|
|
echo ""
|
|
echo "--- Updated bond0 stanza ---"
|
|
awk '/^auto bond0/,/^$/' /etc/network/interfaces
|
|
|
|
# Final verify
|
|
echo ""
|
|
echo "--- Final bond0 running state ---"
|
|
cat /proc/net/bonding/bond0 | head -20
|
|
|
|
echo ""
|
|
echo "==================================================================="
|
|
echo " FIX COMPLETE"
|
|
echo "==================================================================="
|