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 一下基本都有答案。我在项目中遇到过几次奇怪的驱动问题,都是靠社区帖子解决的。
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 给交易进程专用。
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 本章知识体系
下面这张图,帮你理清本章的核心逻辑:
2.6 避坑指南
最后,分享几个我踩过的坑:
- 别用默认分区:默认分区会把所有东西塞到一个分区里,一旦 /var/log 写满,整个系统就挂了。我吃过这个亏,那次行情数据暴涨,日志把磁盘撑爆,交易进程直接崩溃。
- 内核参数别照搬:网上很多教程的参数是针对特定硬件的。比如 isolcpus 的核心编号,你得先看看自己的 CPU 拓扑。
- 工具链版本要匹配:GCC 版本太新可能不兼容旧代码,太旧又支持不了新特性。我建议用 Ubuntu 官方源里的版本,稳定第一。
核心要点:环境搭建不是一次性的工作。每次系统更新、硬件更换,都要重新检查一遍参数。高频交易的环境,永远没有「一劳永逸」这回事。
公众号:蓝海资料掘金营,微信deep3321