2. 开发环境搭建:Ubuntu 22.04 LTS 系统安装与配置、低延迟内核参数调优、必备工具链

做高频交易,说白了就是跟时间赛跑。你的系统每慢一微秒,可能就错过一笔订单。所以环境搭建这一步,千万别马虎。我见过太多人一上来就急着写策略,结果系统延迟高得离谱,怎么优化都救不回来。

这一章,咱们把地基打牢。从操作系统安装开始,到内核参数调优,再到工具链配置,一步都不能省。

2.1 为什么选 Ubuntu 22.04 LTS?

你可能要问:为什么非要用 Ubuntu?CentOS 不行吗?

我个人习惯用 Ubuntu 22.04 LTS,原因有三:

  • 内核新:5.15 LTS 内核,对低延迟特性支持更好。比如 PREEMPT_RT 补丁,在这上面跑起来更顺。
  • 生态好:GCC、CMake、Python3 这些工具链,apt 一键安装,省心。
  • 社区活跃:遇到坑,Google 一下基本都有答案。我在项目中遇到过几次奇怪的驱动问题,都是靠社区帖子解决的。
我的建议:别用桌面版,装 Server 版。桌面环境会吃掉不少 CPU 资源,对高频交易来说,能省则省。

2.2 系统安装与分区策略

安装过程我就不一步步截图了,网上教程一大堆。我重点说说分区——这块很多人不在意,但实际影响很大。

我推荐这样分区:

挂载点 大小 文件系统 说明
/boot 1GB ext4 内核和引导文件,别太小
/ 50GB ext4 系统根目录,够用就行
/data 剩余全部 XFS 行情数据、日志文件放这里
swap 8GB swap 内存不够时兜底,但高频交易最好别用到

为什么 /data 用 XFS?因为 XFS 对大文件读写性能更好,行情数据动辄几十 GB,ext4 在这种场景下会吃力。我曾经吃过这个亏,后来全换成 XFS 了。

2.3 低延迟内核参数调优

系统装好了,接下来是关键——调内核参数。这部分做得好,延迟能降 30% 以上。

2.3.1 关闭不必要的服务

先停掉那些没用的服务:

# 关闭防火墙
systemctl stop ufw
systemctl disable ufw

# 关闭自动更新
systemctl stop unattended-upgrades
systemctl disable unattended-upgrades

# 关闭打印服务(如果你不用)
systemctl stop cups
systemctl disable cups

嗯,这里要注意:别一股脑全关了。先看看你的交易软件依赖哪些服务,关错了可能连不上网。

2.3.2 CPU 调优

高频交易对 CPU 的要求很苛刻。我建议做这几件事:

  • 关闭 CPU 频率缩放:让 CPU 一直跑在最高频率,避免频率切换带来的延迟抖动。
  • 隔离 CPU 核心:把交易进程绑定到特定核心上,避免被其他进程打断。
  • 关闭超线程:超线程虽然能提高吞吐,但会引入额外的延迟不确定性。
# 编辑 /etc/default/grub
GRUB_CMDLINE_LINUX="intel_pstate=disable processor.max_cstate=1 intel_idle.max_cstate=0 isolcpus=2,3 nohz_full=2,3 rcu_nocbs=2,3"

# 更新 grub
update-grub

这段配置的意思是:禁用 intel_pstate 驱动,限制 CPU 进入深度睡眠状态,隔离核心 2 和 3 给交易进程专用。

注意:isolcpus 参数会从 Linux 调度器中移除指定核心,这些核心上的中断处理也会受影响。你需要手动把网卡中断绑定到其他核心上。

2.3.3 网络调优

网络延迟是高频交易的大敌。我一般这样调:

# 调整网络缓冲区
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.core.rmem_default = 65536
net.core.wmem_default = 65536

# 启用 RPS(Receive Packet Steering)
# 把网卡中断分散到多个核心
echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus

# 关闭 TCP 慢启动
net.ipv4.tcp_slow_start_after_idle = 0

为什么调大缓冲区?因为行情数据爆发时,缓冲区太小会丢包。我遇到过一回,某次行情剧烈波动,系统直接丢了几百个 tick,策略完全没反应。从那以后,我再也不敢用默认值了。

2.3.4 内存与 I/O 调优

内存延迟同样关键:

# 关闭透明大页(THP)
echo never > /sys/kernel/mm/transparent_hugepage/enabled

# 调整 swappiness
vm.swappiness = 10

# 调整 I/O 调度器
echo none > /sys/block/nvme0n1/queue/scheduler

透明大页听起来很美,但实际会引入额外的内存分配延迟。对于高频交易来说,稳定的低延迟比偶尔的高吞吐更重要。

2.4 必备工具链安装

环境调好了,接下来装工具。这些是吃饭的家伙,一个都不能少。

2.4.1 GCC 与 CMake

GCC 是编译 C++ 策略代码的核心工具。CMake 用来管理项目构建。

apt update
apt install -y build-essential cmake

# 验证版本
gcc --version
cmake --version

我个人习惯用 GCC 11 或 12,对 C++20 支持比较好。如果你用更新的标准,可以考虑从源码编译 GCC 13。

2.4.2 Git

版本控制是基本功。高频交易策略迭代很快,没有 Git 你根本没法管理。

apt install -y git

# 配置用户信息
git config --global user.name "Your Name"
git config --global user.email "your@email.com"

我建议用 Git Flow 分支模型。master 分支只放稳定版本,develop 分支做日常开发,feature 分支做新功能。这样万一出问题,回滚也方便。

2.4.3 Python3

Python 用来做数据分析、回测、甚至写一些辅助脚本。Ubuntu 22.04 自带 Python 3.10,够用了。

# 安装 pip 和虚拟环境
apt install -y python3-pip python3-venv

# 创建虚拟环境
python3 -m venv trading_env
source trading_env/bin/activate

为什么要用虚拟环境?因为不同项目依赖的库版本可能冲突。我吃过这个亏,有一次升级了 numpy,结果回测脚本全崩了。从那以后,每个项目我都单独建一个虚拟环境。

2.5 本章知识体系

下面这张图,帮你理清本章的核心逻辑:

开发环境搭建知识体系 Ubuntu 22.04 LTS 安装 低延迟内核参数调优 必备工具链安装 分区策略 文件系统选择 CPU 调优 网络调优 内存 I/O 调优 GCC / CMake Git /boot 1GB ext4 /data XFS isolcpus 网络缓冲区 关闭 THP GCC 11/12 Git Flow 目标:构建稳定、低延迟的高频交易开发环境

2.6 避坑指南

最后,分享几个我踩过的坑:

  • 别用默认分区:默认分区会把所有东西塞到一个分区里,一旦 /var/log 写满,整个系统就挂了。我吃过这个亏,那次行情数据暴涨,日志把磁盘撑爆,交易进程直接崩溃。
  • 内核参数别照搬:网上很多教程的参数是针对特定硬件的。比如 isolcpus 的核心编号,你得先看看自己的 CPU 拓扑。
  • 工具链版本要匹配:GCC 版本太新可能不兼容旧代码,太旧又支持不了新特性。我建议用 Ubuntu 官方源里的版本,稳定第一。

核心要点:环境搭建不是一次性的工作。每次系统更新、硬件更换,都要重新检查一遍参数。高频交易的环境,永远没有「一劳永逸」这回事。


公众号:蓝海资料掘金营,微信deep3321