从2017年 组装了一台TITAN Xp四卡工作站 已使用超过4年,最近进行了一些升级:

  • GPU:AORUS GeForce RTX 4090 Xtreme Waterforce 24G

  • CPU:AMD Ryzen Threadripper PRO 5975WX

  • 主板:ASUS Pro WS WRX80E-SAGE SE WIFI II

  • 电源:ROG Thor 1600W Titanium

  • 散热:从风冷升级到KRAKEN Z73 RGB水冷

  • 机箱:ROG 创世神 GR701 E-ATX机箱

  • 存储:WD BLACK SN850 4TB、Samsung 990 PRO 2TB、雷克沙ARES 4TB、海康威视C4000 4TB

升级的主板、4090和AMD CPU
升级的主板、4090和AMD CPU
升级的电源
升级的电源

RTX 4090

RTX 4090是NVIDIA最新的消费级旗舰,基于Ada Lovelace架构4nm工艺制造,搭载AD102核心和16384个CUDA核心、512个张量核心和128个RT核心、24GB GDDR6X显存(384位位宽,21Gbps频率)。FP32和FP16性能为82.6 TFLOPS,可惜不支持NVLink,INT8推理性能达到661 TOPS。虽然标准功耗达到450W,AORUS Waterforce水冷版散热好且噪音低。

装机细节

安装过程中遇到几个技术细节:机箱虽然很大,但WRX80E主板尺寸更大,移除了一个固定铜柱才把主板固定好。CPU是方的,水冷头是圆的,可能会影响散热,用cpuburngpuburn测试温度问题不大。另外我保留了两块TITAN Xp作为显示输出。

安装好的机箱内部
安装好的机箱内部
安装好的机箱外观
安装好的机箱外观

安装完成后的整体效果很不错,RGB灯光搭配水冷系统看上去很炫酷。由于机箱空间有限,每条线材的走向都需要提前规划,确保不会影响其他组件的安装。最后安装了Ubuntu 22.04 LTS.

Hyper M.2 x16扩展卡

AMD CPU的一大优势是PCIe通道很多,Ryzen Threadripper PRO 5975WX处理器有128个PCIe通道(其中120个供用户使用)。即使同时使用4块RTX 4090显卡,也还有56个剩余。

华硕WRX80E主板提供了一张Hyper M.2 x16扩展卡,扩展卡自带一块大型散热片和主动散热风扇。通过组建RAID 0,可以得到最大32GB/s的磁盘访问速度。我的4块M.2硬盘:

lsblk -d -o NAME,SIZE,MODEL | grep nvme

# nvme0n1   3.7T HS-SSD-C4000 4096G
# nvme1n1   3.6T WD_BLACK SN850X 4000GB
# nvme2n1   1.8T Samsung SSD 990 PRO 2TB
# nvme3n1   3.7T Lexar SSD ARES 4TB
# nvme4n1 476.9G Samsung SSD 960 PRO 512GB

将扩展卡插到主板之后,需要通过BIOS的Onboard Devices Configuration设置,将对应的PCIe接口设置为PCIe RAID mode。

btrfs RAID 0

下一步是组建RAID 0,我先尝试了BIOS的RAIDXpert2 Configuration Utility,对于不同尺寸的磁盘,组建RAID 0最大只有8TB,且该工具的评价不好。后来我选择btrfs的RAID支持:

# 安装btrfs工具
sudo apt update
sudo apt install btrfs-progs

# 直接使用btrfs创建RAID 0
sudo mkfs.btrfs -d raid0 -m raid1 -L HOME \
  /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1

# 参数说明:
# -d raid0: 数据使用RAID 0
# -m raid1: 元数据使用RAID 1(更安全)

# 挂载(只需挂载一个设备,btrfs会自动识别其他成员)
sudo mkdir -p /home
sudo mount -o noatime,nodiratime,compress=zstd:1,space_cache=v2,\
ssd,discard=async,commit=120 /dev/nvme0n1 /home

# 挂载选项说明:
# compress=zstd:1 - 快速压缩,提升有效带宽
# space_cache=v2 - 改进的空间缓存
# ssd - SSD优化
# discard=async - 异步TRIM
# commit=120 - 延长提交间隔到120秒

Btrfs的动态条带分配机制,自动在可用设备间分配条带,可以使用全部14TB空间,前8TB四盘速度,后6TB三盘速度。

# 查看设备使用情况
sudo btrfs filesystem show /home

# Label: HOME  uuid: 561ca42e-0811-47f7-900c-d594b5b22033
#         Total devices 4 FS bytes used 144.00KiB
#         devid    1 size 3.73TiB used 1.00GiB path /dev/nvme0n1
#         devid    2 size 3.64TiB used 1.00GiB path /dev/nvme1n1
#         devid    3 size 1.82TiB used 2.01GiB path /dev/nvme2n1
#         devid    4 size 3.73TiB used 2.01GiB path /dev/nvme3n1

sudo btrfs device stats /home

# 查看详细空间分配
sudo btrfs filesystem df /home

/etc/fstab中添加一行,自动挂载RAID盘:

UUID=$(sudo blkid -s UUID -o value /dev/nvme0n1)
MOUNT_OPTIONS="noatime,nodiratime,compress=zstd:1,space_cache=v2,ssd,discard=async,commit=120"
echo "UUID=$UUID /home btrfs $MOUNT_OPTIONS 0 0" | sudo tee -a /etc/fstab

使用fio测试btrfs RAID 0性能,CoW对读写性能影响大,通过sudo chattr +C关闭CoW之后:顺序读28.6 GB/s,顺序写16.5 GB/s,随机读567K IOPS,随机写61K IOPS。

sudo apt install fio

sudo mkdir -p /home/test/
sudo chattr +C /home/test/

sudo fio --name=test --filename=/home/test/file \
  --size=50G --direct=1 --rw=read --bs=1M \
  --iodepth=256 --numjobs=4  --runtime=60 --time_based \
  --group_reporting --ioengine=libaio

sudo fio --name=test --filename=/home/test/file \
  --size=50G --direct=1 --rw=write --bs=1M \
  --iodepth=256 --numjobs=4 --runtime=60 --time_based \
  --group_reporting --ioengine=libaio

sudo fio --name=test --filename=/home/test/file \
  --size=5G --direct=1 --rw=randread --bs=4K \
  --iodepth=256 --numjobs=4  --runtime=60 --time_based \
  --group_reporting --ioengine=libaio

sudo fio --name=test --filename=/home/test/file \
  --size=5G --direct=1 --rw=randwrite --bs=4K \
  --iodepth=256 --numjobs=4  --runtime=60 --time_based \
  --group_reporting --ioengine=libaio