1、包传输和接收
在调优系统时,网络是比较复杂和关键的元素之一。大多数网络堆栈都是自组织的,但是有一些网络元素会影响性能。要确定哪些网络元素正在影响系统性能并正确地对它们进行调优,你需要知道当一个包被系统传输或接收时所遵循的流中涉及哪些网络元素,并了解对于那些可能成为瓶颈的流有哪些调优选项可用。
1. 包传输
下面概述了网络传输的步骤。
- 数据被写入套接字socket(类似文件的对象),然后放入传输缓冲区。
- 内核将数据封装到协议数据单元(PDU)中。
- pdu移动到每个设备传输队列中。
- 网络设备驱动程序将PDU从传输队列的头部复制到网卡。
- NIC发送数据并在传输时引发中断。
2. 包接收
下面显示了网络接收的步骤。
- 网卡接收帧并使用DMA(Direct Memory Access,直接存储器访问) 将帧复制到接收缓冲区。
- NIC抛出一个硬中断。
- 内核处理硬中断,并调度软中断来处理数据包。
- 软中断被处理,并将数据包移动到IP层。
- 如果报文的目的地是本地,则PDU被解封装并放入套接字接收缓冲区。如果一个进程正在等待这个套接字,它将处理来自接收缓冲区的数据。
由NIC引发的硬中断的内核管理防止了被称为livelock的现象。Livelock的基础是硬中断会抢占一切