1. 吞吐量基础概念
吞吐量,说白了就是系统在单位时间内能干多少活。我刚开始做性能优化那会儿,总觉得这概念太简单了——不就是每秒处理多少请求嘛。但后来踩的坑多了,才发现事情没那么简单。
什么是吞吐量
吞吐量(Throughput)衡量的是系统处理能力。拿我们做内存拷贝来说,就是单位时间内能拷贝多少数据。
举个例子:
- 你有一个 1GB 的文件需要拷贝
- 系统花了 10 秒完成
- 那么吞吐量就是 100 MB/s
嗯,这里要注意。吞吐量不是越快越好,而是要看系统能不能稳定地维持这个速度。我在项目中遇到过,有些系统刚开始跑得飞快,但过一会儿就掉下来了。这种「虚高」的吞吐量,其实没啥用。
为什么内存拷贝是瓶颈
你想想看,现代 CPU 算力已经很强了,但内存速度却跟不上。这就好比一个超级工厂,工人(CPU)干活飞快,但原材料(数据)从仓库(内存)运过来却慢吞吞的。
我个人习惯把内存拷贝的瓶颈归结为三点:
| 瓶颈因素 | 具体表现 | 影响程度 |
|---|---|---|
| 内存带宽限制 | DDR4 理论带宽约 25 GB/s,实际能用 60-70% | 高 |
| 缓存命中率 | L1 缓存访问延迟 1ns,主存延迟 100ns | 极高 |
| CPU 指令开销 | memcpy 本身也有指令执行成本 | 中 |
我曾经在一个数据管道项目里,发现吞吐量死活上不去。查了半天,原来是内存拷贝占了 40% 的 CPU 时间。说白了,数据还没开始处理,光搬运就耗掉了小一半的资源。
核心观点:内存拷贝不是简单的数据移动,它涉及 CPU 缓存、内存控制器、总线带宽等多个硬件组件的协同。任何一个环节掉链子,吞吐量就上不去。
吞吐量的度量单位
度量单位这块,我建议你记住几个常用的:
- B/s(字节每秒):最基础的单位,比如 100 MB/s
- ops/s(操作每秒):适合衡量处理能力,比如 1000 次拷贝/秒
- Gbps(吉比特每秒):网络场景常用,1 GB/s = 8 Gbps
这里有个坑,我曾经犯过。有一次汇报性能数据,我说「吞吐量是 1000」,结果别人问「1000 什么?字节?比特?还是操作次数?」。嗯,从那以后我每次都会把单位写清楚。
小技巧:做性能测试时,建议同时记录两个指标——数据吞吐量(MB/s)和操作吞吐量(ops/s)。前者看带宽利用率,后者看处理效率。两个指标一起看,才能发现问题。
知识体系总览
下面这张图,是我梳理的吞吐量相关知识结构。你可以把它当作一个地图,后面我们会一步步深入每个细节。
注意:吞吐量优化不是一锤子买卖。我见过太多人上来就改代码,结果发现瓶颈在硬件层面。建议先做 profiling,找到真正的瓶颈点,再动手优化。
好了,这一节我们聊了吞吐量的基本概念。说白了就是三件事:它是什么、为什么内存拷贝会成为瓶颈、怎么度量它。下一节我们会深入内存拷贝的具体实现,看看 memcpy 到底是怎么工作的。
想要更多资料,联系可可