从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


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是方的,水冷头是圆的,可能会影响散热,用cpuburn
和gpuburn
测试温度问题不大。另外我保留了两块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