Memo

共 9 条灌水 · 4

修正 ZFS 主机的 Node Exporter 内存告警

Node Exporter 只导出 /proc/meminfo,不计算内存使用率。Grafana 和 Prometheus 通常使用:

100 * (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)

Linux 计算 MemAvailable 时不会把 ZFS ARC 计入可回收页缓存。AMD GTT 使用系统内存,但进程 RSS 和 Pod working set 不会完整反映这部分分配。因此,topkubectl top 不能直接核对上述结果。

现场数据:ZFS ARC 43.2 GiB,AMD GTT 27.9 GiB,kubectl top node 42.3 GiB;原公式得到 94.2%。

检查相关数据:

free -h
grep -E '^(size|c_min) ' /proc/spl/kstat/zfs/arcstats
grep -H . /sys/class/drm/card*/device/mem_info_gtt_used
grep -H . /proc/pressure/memory

告警将高于 c_min 的 ARC 计为可回收内存。没有 ZFS 指标时,or ... * 0 回退到原公式:

(
  node_memory_MemAvailable_bytes
  + (
    clamp_min(node_zfs_arc_size - node_zfs_arc_c_min, 0)
    or node_memory_MemTotal_bytes * 0
  )
) / node_memory_MemTotal_bytes < 0.10

面板分别展示 effective used、ZFS ARC、Linux page cache、GPU GTT 和 swap used。amd_gpu_used_gtt 的单位是 MiB,与 Node Exporter 的字节指标合并时需乘 1024 * 1024

该口径用于减少 ARC 引起的误报。实际内存压力仍需检查 swap-out 和 memory PSI。

两块 Gen3 x4 NVMe,速度差了一倍

不是 endpoint 协商成 x1/x2 或 Gen1/2。两块盘都是 8.0 GT/s ×4,也就是 PCIe Gen3 x4。

差别在路径。新盘经过共享的 ASMedia/芯片组三级桥,旧盘直连 CPU。128K 读,新盘只有 1.28 GB/s,旧盘 2.73 GB/s。这个槽位的有效性能确实不够。

通过 SSH 迁移 btrfs volumes

配置 SSH 免密:

ssh-copy-id -i ~/.ssh/id_ed25519.pub <user>@<host>

在目标端配置 sudo 免密:

https://serverfault.com/questions/160581/how-to-setup-passwordless-sudo-on-linux

%wheel ALL=(ALL:ALL) NOPASSWD: ALL

The key is to add it after the last line which says

#includedir /etc/sudoers.d

创建快照:

# sudo btrfs subvolume snapshot -r <fs-path> <snapshot-path>
sudo btrfs subvolume snapshot -r / /sysfs_ro

发送:

sudo pacman -S pv
# sudo btrfs send <snapshot-path> | pv | ssh <target-machine> "sudo btrfs receive <target-fs-path>"
sudo btrfs send /sysfs_ro | pv | ssh target-host "sudo btrfs receive /mnt/arc"

# 发送完成后,路径是 /mnt/arc/sysfs_ro

ESXi 7.0 安装时移除 VMFSL

在 ESXi 7.0 之后,安装的时候会自动创建一个很大的 VMFSL 分区:

vmfsl-example.png

安装 ESXi 时,在引导后按 Shift+O,并输入

autoPartitionOSDataSize=8192

然后回车,正常安装即可。

Seagate TurboBoost and Advanced Write Caching

传统的 HDD 以较慢的响应时间来应对较高的工作负载

  • 在 200 IOPS 时,硬盘阵列可能提供 5 毫秒的响应
  • 在 600 IOPS 时,延迟可能飙升至 40 毫秒甚至更高。

TurboBoost

TurboBoost 是在传统硬盘中加入 NAND 闪存,集成了

  • 传统的多段式缓存
  • 少量的 eMLC NAND,其特点是比消费级 MLC 的耐用性要强得多

适量的 NAND 能够满足价值需求,以足够低的成本提供最大的性能优势

76d4e14c25b23afca9840d8ce905fbd3.png

NVC:non-volatile cache

Back electromotive force(back EMF)指与电机线圈在磁场中运动产生的电流方向相反的电压。HDD 可以在断电后立即利用反电动势,将 DRAM 中的数据写入 NVC Flash 中。有了 NVC 保护的写缓存,在享受到性能好处的同时,仍然可以与关闭 write cache 同等的保护。

内置的 NOR Flash 大小:2M

5b267ab31853330f53d9e3be9dab501f.png

dm-delay 模拟慢速磁盘

速查

# 创建一个 10G 大小的 ram disk
sudo modprobe brd rd_nr=1 rd_size=1048576
sudo blockdev --getsize /dev/ram0

# 创建 delayed dm,延迟为 500ms
export RAM_SIZE=$(blockdev --getsize /dev/ram0)
echo "0 $RAM_SIZE delay /dev/ram0 0 500" | sudo dmsetup create delayed

# 重新加载参数
echo "0 $RAM_SIZE delay /dev/ram0 0 500" | sudo dmsetup reload delayed

delayed 参数

<device> <offset> <delay> [<write_device> <write_offset> <write_delay> [<flush_device> <flush_offset> <flush_delay>]]

暂停 I/O

sudo dmsetup suspend /dev/dm-0
sudo dmsetup resume  /dev/dm-0

检查 delayed 设备的 I/O 延迟

fio --name a --filename=/dev/dm-0 --bs=4k --rw=randread --ioengine=libaio --direct=1 --iodepth=1 --numjobs=1 --time_based=1 --runtime=10
fio --name a --filename=/dev/dm-0 --bs=4k --rw=randread --ioengine=sync --direct=1 --iodepth=1 --numjobs=1 --time_based=1 --runtime=10

Kopia 配置文件位置

  • Windows: %APPDATA%\kopia\repository.config
  • macOS: $HOME/Library/Application Support/kopia/repository.config
  • Linux: $HOME/.config/kopia/repository.config

迁移 Kopia 快照

kopia snapshot migrate --source-config ./repository.config --all

系统编程资料