diff --git a/Proxmox/RAID0-x3-tuning.md b/Proxmox/RAID0-x3-tuning.md new file mode 100644 index 0000000..be7a5dd --- /dev/null +++ b/Proxmox/RAID0-x3-tuning.md @@ -0,0 +1,271 @@ +# Вариант 1 — Пересоздание XFS на том же логическом томе (`vg0/data`) + +Этот вариант подходит, если ты готов удалить все виртуальные машины и контейнеры (VM/LXC) +и настроить их заново. Он полностью очищает файловую систему `/var/lib/vz` +и создаёт новую XFS с оптимальными параметрами под RAID0 (6×NVMe, chunk 128 KB). + +--- + +## 🔹 Шаги + +### 1. Останови все контейнеры и ВМ +```bash +qm list +pct list +systemctl stop pvedaemon pve-cluster pve-storage pveproxy +``` + +--- + +### 2. Размонтируй `/var/lib/vz` +```bash +umount /var/lib/vz +``` + +Если появится ошибка `busy`, проверь, какие процессы удерживают каталог: +```bash +lsof +D /var/lib/vz +``` +и заверши эти процессы. + +--- + +### 3. Пересоздай файловую систему XFS +Оптимальные параметры для RAID0 с chunk = 1 Mb и 6 дисков для блокчейнов: +```bash +mkfs.xfs -f -s size=4096 -l size=1g -n size=4096 -d su=1m,sw=3 /dev/md3 +``` +Проверка, что XFS «увидел» выравнивание: +```bash +xfs_info /dev/md3 | egrep 'sunit|swidth|sectsz' +# Ожидаем: sunit=256 (256 * 4K = 1MiB), swidth=768 (768 * 4K = 3MiB), sectsz=4096 +``` + +```bash +mkdir -p /var/lib/vz +UUID=$(blkid -s UUID -o value /dev/md3) +echo "UUID=$UUID /var/lib/vz xfs defaults,noatime,inode64,logbufs=8,logbsize=256k 0 2" >> /etc/fstab +mount -a +``` + + +### 6. Перезапусти службы Proxmox +```bash +systemctl start pve-cluster pvedaemon pve-storage pveproxy +``` +--- + +## ✅ Результат + +После выполнения этих шагов: + +- `/var/lib/vz` будет чистой, новой XFS-файловой системой, + оптимизированной под RAID0 (3×NVMe, chunk 1 МБ). +- Proxmox автоматически подхватит хранилище после старта сервисов. +- Система готова к развертыванию новых VM и LXC-контейнеров. +--- + +### 📋 Проверка + +После монтирования убедись в правильности параметров: +```bash +xfs_info /var/lib/vz | grep -E "sunit|swidth" +df -h /var/lib/vz +``` +Ожидаемые значения: +``` + = sunit=256 swidth=1536 blks + = sectsz=4096 sunit=1 blks, lazy-count=1 +Filesystem Size Used Avail Use% Mounted on +/dev/md3 11T 205G 11T 2% /var/lib/vz +``` + +----- +Да — ✅ эти настройки стоит применить, особенно если у тебя RAID 0 из нескольких NVMe и ты используешь ноду (например, Reth / Nethermind / Erigon) с большими sequential-чтениями и trace/debug. +Разберём по пунктам, зачем каждая настройка: + +🧠 1. read_ahead_kb + +Позволяет ядру читать данные «с запасом» при последовательном чтении. + +Устройство Значение Эффект +/sys/block/md1/queue/read_ahead_kb 4096 RAID-массив (XFS): читать по 4 МБ заранее +/sys/block/nvme*/queue/read_ahead_kb + +👉 На Ethereum-архивах (особенно при trace и debug) это даёт +10-20 % скорости при холодных чтениях и снижает IOPS-нагрузку. + +⚙️ 2. irqbalance + +Этот демон равномерно распределяет аппаратные прерывания NVMe-дисков между CPU-ядрами. +Без него все IRQ могут обрабатываться одним ядром, и даже самый быстрый RAID будет «тормозить» при многопоточном доступе. + +Установка и включение: +```bash +apt update +apt install irqbalance -y +systemctl enable --now irqbalance +systemctl status irqbalance +``` + +```bash +echo 4096 | sudo tee /sys/block/md3/queue/read_ahead_kb +for d in /sys/block/nvme*n1/queue/read_ahead_kb; do echo 2048 | sudo tee "$d"; done +``` + +💾 3. Применение постоянных значений + +Чтобы после перезагрузки не сбрасывались, добавь в /etc/rc.local или systemd-юнит, например: +```bash +cat >/usr/local/sbin/raid-tuning.sh <<'EOF' +#!/usr/bin/env bash +set -euo pipefail + +# RAID массив(ы): 4 MiB readahead +[ -e /sys/block/md3/queue/read_ahead_kb ] && echo 4096 > /sys/block/md3/queue/read_ahead_kb + +# NVMe диски: 2 MiB readahead + scheduler=none +for d in /sys/block/nvme*n1; do + [ -e "$d/queue/read_ahead_kb" ] && echo 2048 > "$d/queue/read_ahead_kb" + [ -e "$d/queue/scheduler" ] && echo none > "$d/queue/scheduler" +done +EOF + +chmod +x /usr/local/sbin/raid-tuning.sh + +``` + + +```bash +cat >/etc/systemd/system/raid-tuning.service <<'EOF' +[Unit] +Description=RAID/NVMe tuning +After=mdadm-raid.service local-fs.target +Wants=mdadm-raid.service + +[Service] +Type=oneshot +ExecStart=/usr/local/sbin/raid-tuning.sh +RemainAfterExit=yes + +[Install] +WantedBy=multi-user.target +EOF + +``` + +```bash +systemctl daemon-reload +systemctl enable --now raid-tuning.service +systemctl enable --now fstrim.timer +systemctl status raid-tuning.service --no-pager +``` +```bash +for f in /sys/block/md*/queue/read_ahead_kb; do printf "%s: %s\n" "$f" "$(cat "$f")"; done +for f in /sys/block/nvme*n1/queue/read_ahead_kb; do printf "%s: %s\n" "$f" "$(cat "$f")"; done +``` + + +🧠 Что делает irqbalance +irqbalance автоматически распределяет аппаратные прерывания (IRQ) от NVMe, сетевых и других устройств по разным CPU-ядрам. +Для серверов с: +несколькими NVMe, +RAID0, +большим количеством потоков (64 ядра, как у тебя на EPYC 7502P), +это снижает latency и делает нагрузку по NVMe-дискам ровнее. +🔍 Проверка распределения IRQ +После запуска можно убедиться, что прерывания действительно разнесены по ядрам: +```bash +grep -i nvme /proc/interrupts +``` +```bash +161: 1000000 0 0 0 IR-PCI-MSI nvme0q1 +162: 0 900000 0 0 IR-PCI-MSI nvme1q1 +163: 0 0 800000 0 IR-PCI-MSI nvme2q1 +``` + +Быстрый sanity-тест диска: +```bash +fio --name=seqread --filename=/var/lib/vz/fio.test --size=20G --rw=read --bs=1M --iodepth=32 --direct=1 --runtime=30 --time_based --group_reporting +fio --name=seqwrite --filename=/var/lib/vz/fio.test --size=20G --rw=write --bs=1M --iodepth=32 --direct=1 --runtime=30 --time_based --group_reporting +rm -f /var/lib/vz/fio.test +``` +RAID0x6 +```bash +seqread: (g=0): rw=read, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=psync, iodepth=32 +fio-3.39 +Starting 1 process +seqread: Laying out IO file (1 file / 20480MiB) +note: both iodepth >= 1 and synchronous I/O engine are selected, queue depth will be capped at 1 +Jobs: 1 (f=1): [R(1)][100.0%][r=2943MiB/s][r=2942 IOPS][eta 00m:00s] +seqread: (groupid=0, jobs=1): err= 0: pid=211291: Thu Oct 23 08:39:48 2025 + read: IOPS=2923, BW=2924MiB/s (3066MB/s)(85.7GiB/30001msec) + clat (usec): min=182, max=2295, avg=341.71, stdev=229.11 + lat (usec): min=183, max=2295, avg=341.74, stdev=229.11 + clat percentiles (usec): + | 1.00th=[ 186], 5.00th=[ 186], 10.00th=[ 186], 20.00th=[ 188], + | 30.00th=[ 192], 40.00th=[ 192], 50.00th=[ 192], 60.00th=[ 194], + | 70.00th=[ 619], 80.00th=[ 619], 90.00th=[ 619], 95.00th=[ 619], + | 99.00th=[ 635], 99.50th=[ 1057], 99.90th=[ 2180], 99.95th=[ 2278], + | 99.99th=[ 2278] + bw ( MiB/s): min= 2864, max= 2984, per=100.00%, avg=2925.56, stdev=28.52, samples=59 + iops : min= 2864, max= 2984, avg=2925.56, stdev=28.52, samples=59 + lat (usec) : 250=66.13%, 500=0.04%, 750=33.32%, 1000=0.01% + lat (msec) : 2=0.31%, 4=0.19% + cpu : usr=0.18%, sys=20.96%, ctx=87762, majf=0, minf=264 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued rwts: total=87717,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=32 + +Run status group 0 (all jobs): + READ: bw=2924MiB/s (3066MB/s), 2924MiB/s-2924MiB/s (3066MB/s-3066MB/s), io=85.7GiB (92.0GB), run=30001-30001msec + +Disk stats (read/write): + dm-2: ios=87372/3, sectors=178921472/40, merge=0/0, ticks=27671/0, in_queue=27671, util=92.36%, aggrios=701744/661, aggsectors=179644416/101672, aggrmerge=0/0, aggrticks=76026/107, aggrin_queue=76133, aggrutil=92.29% + md1: ios=701744/661, sectors=179644416/101672, merge=0/0, ticks=76026/107, in_queue=76133, util=92.29%, aggrios=116956/89, aggsectors=29940736/16945, aggrmerge=1/20, aggrticks=20080/38, aggrin_queue=20118, aggrutil=58.99% + nvme1n1: ios=116964/81, sectors=29942784/16624, merge=4/10, ticks=13644/33, in_queue=13676, util=17.87% + nvme5n1: ios=116944/125, sectors=29937664/17208, merge=0/39, ticks=51833/67, in_queue=51900, util=58.99% + nvme2n1: ios=116944/87, sectors=29937664/16960, merge=0/48, ticks=16230/34, in_queue=16263, util=7.48% + nvme3n1: ios=116960/75, sectors=29941760/17488, merge=4/1, ticks=14628/31, in_queue=14660, util=12.67% + nvme0n1: ios=116964/84, sectors=29942784/16792, merge=0/22, ticks=10502/34, in_queue=10535, util=7.43% + nvme4n1: ios=116960/85, sectors=29941760/16600, merge=0/4, ticks=13645/34, in_queue=13678, util=14.23% +seqwrite: (g=0): rw=write, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=psync, iodepth=32 +fio-3.39 +Starting 1 process +note: both iodepth >= 1 and synchronous I/O engine are selected, queue depth will be capped at 1 +Jobs: 1 (f=1): [W(1)][100.0%][w=2927MiB/s][w=2927 IOPS][eta 00m:00s] +seqwrite: (groupid=0, jobs=1): err= 0: pid=211615: Thu Oct 23 08:40:18 2025 + write: IOPS=2940, BW=2940MiB/s (3083MB/s)(86.1GiB/30001msec); 0 zone resets + clat (usec): min=166, max=2283, avg=336.58, stdev=234.58 + lat (usec): min=169, max=2286, avg=339.79, stdev=234.58 + clat percentiles (usec): + | 1.00th=[ 169], 5.00th=[ 169], 10.00th=[ 172], 20.00th=[ 174], + | 30.00th=[ 178], 40.00th=[ 188], 50.00th=[ 188], 60.00th=[ 190], + | 70.00th=[ 619], 80.00th=[ 619], 90.00th=[ 627], 95.00th=[ 627], + | 99.00th=[ 644], 99.50th=[ 660], 99.90th=[ 2114], 99.95th=[ 2245], + | 99.99th=[ 2278] + bw ( MiB/s): min= 2858, max= 2992, per=100.00%, avg=2943.25, stdev=27.86, samples=59 + iops : min= 2858, max= 2992, avg=2943.25, stdev=27.86, samples=59 + lat (usec) : 250=66.17%, 500=0.01%, 750=33.33%, 1000=0.01% + lat (msec) : 2=0.32%, 4=0.16% + cpu : usr=2.57%, sys=13.38%, ctx=88256, majf=0, minf=6 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued rwts: total=0,88208,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=32 + +Run status group 0 (all jobs): + WRITE: bw=2940MiB/s (3083MB/s), 2940MiB/s-2940MiB/s (3083MB/s-3083MB/s), io=86.1GiB (92.5GB), run=30001-30001msec + +Disk stats (read/write): + dm-2: ios=0/87854, sectors=0/179902504, merge=0/0, ticks=0/19604, in_queue=19604, util=65.42%, aggrios=0/705804, aggsectors=0/180651424, aggrmerge=0/0, aggrticks=0/57168, aggrin_queue=57168, aggrutil=64.74% + md1: ios=0/705804, sectors=0/180651424, merge=0/0, ticks=0/57168, in_queue=57168, util=64.74%, aggrios=0/117619, aggsectors=0/30108570, aggrmerge=0/14, aggrticks=0/18083, aggrin_queue=18083, aggrutil=43.24% + nvme1n1: ios=0/117617, sectors=0/30109704, merge=0/4, ticks=0/12824, in_queue=12824, util=7.39% + nvme5n1: ios=0/117610, sectors=0/30105712, merge=0/1, ticks=0/44537, in_queue=44537, util=43.24% + nvme2n1: ios=0/117610, sectors=0/30106168, merge=0/61, ticks=0/14725, in_queue=14725, util=7.29% + nvme3n1: ios=0/117625, sectors=0/30109768, merge=0/4, ticks=0/13479, in_queue=13478, util=7.64% + nvme0n1: ios=0/117626, sectors=0/30110240, merge=0/17, ticks=0/10437, in_queue=10438, util=6.08% + nvme4n1: ios=0/117627, sectors=0/30109832, merge=0/2, ticks=0/12499, in_queue=12500, util=9.68% +``` diff --git a/Proxmox/README.md b/Proxmox/README.md index 25f12e5..761fe88 100644 --- a/Proxmox/README.md +++ b/Proxmox/README.md @@ -28,9 +28,20 @@ LV vg0 data /var/lib/vz xfs all # List images with ls /root/.oldroot/nfs/install/../images IMAGE /root/.oldroot/nfs/install/../images/Debian-1107-bullseye-amd64-base.tar.gz - ``` +# Конфигурация массива без LVM, что позволяет, в дальнейшем, тонок настроить конфигурацию файловой системы +```bash +SWRAID 1 +SWRAIDLEVEL 0 + +PART swap swap 24G +PART /boot ext3 1024M +PART / ext4 20G +PART /var/lib/vz xfs all +``` + + Настройка сети с NAT и мрашрутизацией для виртуалных машин. Взято тут https://adminwin.ru/nastroyka-nat-dlya-virtualynh-mashin-proxmox/ diff --git a/Proxmox/Test_NVMe/test2.md b/Proxmox/Test_NVMe/TEST_PCI.md similarity index 98% rename from Proxmox/Test_NVMe/test2.md rename to Proxmox/Test_NVMe/TEST_PCI.md index 10de764..263070b 100644 --- a/Proxmox/Test_NVMe/test2.md +++ b/Proxmox/Test_NVMe/TEST_PCI.md @@ -1,4 +1,12 @@ +```bash nano nvme_linkcheck.sh +``` +```bash +chmod +x nvme_linkcheck.sh +``` +```bash +./nvme_linkcheck.sh +``` ```bash #!/usr/bin/env bash # nvme_linkcheck.sh — сводка по PCIe-линкам NVMe (скорость, ширина, cap/sta) + авто-вердикт.