1. 数据包处理流程
- 数据包到达网卡
- 中断进行DMA
- 驱动写缓冲区
- 写到内核
- 内核到用户态
2. 优化处理
NAPI: 中断唤醒后,轮询处理多个包
Netmap: 共享数据包池,减少内核到用户的包复制
3. NUMA
传统的计算机架构是多个CPU共享同一内存,所以是统一内存架构(UMA: Uniform Memory Architecture)。
为了缓解不同设备对内存访问的拥塞的问题,于是有了NUMA。
4. cache
为了解决CPU处理速度和内存读取速度之间不匹配问题而引入的中间层。
CPU把最近经常使用的数据和指令,都放到cache中来,而不用每次都要
去内存中读。
cache
分为
- L1 cache (3~5 指令周期)
- L2 cache (10几个指令周期)
- L3 cache (几十个指令周期)
L3 cache 又叫做LLC(Last Level Cache)。
5. 计算机读取数据流程
- 在cache中查找
- cache miss,需要在内存中找
- 查快表(TLB: Translation Look-aside Buffer),看需要查找的数据的地址在TLB中有没有。
- 找到了就在内存中读取
- 如果没有找到,则MMU中断请求多级页表请求内存
6. cache与内存映射
cache与内存间的交换是分块的,一般是cpu在一个指令周期能读取的数据。
大小为64KB,也就是一个cache line。
cache与内存之间的映射分为三种
- 全相联: 任意内存可以映射任意cache块
- 直接关联: 主存中一块内存只能映射到cache中一个特定块中
- 组关联:折中上面的两种方案, 内存分组,但在组内的位置可以任意
7. 大页
一般情况下,操作系统按照4K进行分页。而程序需要的内存可能比这大得多,程序需要的页表多了,TLB 就会miss。
为了防止这种情况,我们干脆把内存页面给改大,这样需要的页表项一定在一个页表中。