沧州最新动态:如何高效进行tp5网站开发?
摘要:tp5网站开发步骤,沧州最新消息今天,网站定制牛七科技,创建网页链接1、数据如何从网卡到网络协议栈 1.1内核收包的过程 1、数据帧从外部网络到达网卡 2、网卡把数据帧从自己的缓存DMA(拷贝到)和内核共有的RingBuffer上 3、网卡
tp5网站开发步骤,沧州最新消息今天,网站定制牛七科技,创建网页链接1、数据如何从网卡到网络协议栈
1.1内核收包的过程
1、数据帧从外部网络到达网卡 2、网卡把数据帧从自己的缓存DMA(拷贝到)和内核共有的RingBuffer上 3、网卡发出硬中断通知CPU 4、CPU响应硬中断#xff0c;简单处理后发出软中断 5、k’softirqd线程处理软中断#xff0c;调…1、数据如何从网卡到网络协议栈
1.1内核收包的过程
1、数据帧从外部网络到达网卡 2、网卡把数据帧从自己的缓存DMA(拷贝到)和内核共有的RingBuffer上 3、网卡发出硬中断通知CPU 4、CPU响应硬中断简单处理后发出软中断 5、k’softirqd线程处理软中断调用网卡驱动注册的poll函数开始收包 6、帧被从RingBuffer上摘下来被保存为一个skb 7、协议层开始处理网络帧处理玩后的数据data被放到socket的接收队列中 8、内核唤醒用户进程
1.2 ksoftirqd内核线程的创建
Linux的软中断都是在专门的内核线程(ksoftirqd)中进行的。 该线程的数量等于设备的核数。
系统初始化的时候在kernel/smpboot.c中调用smpboot_register_percpu_thread,该函数进一步会执行到spawn_ksoftirqd位于kernel/softirq.c来创建出softirqd线程。
相关代码如下
static struct smp_hotplug_thread softirq_threads {.store ksoftirqd,.thread_should_run ksoftirqd_should_run,.thread_fn run_ksoftirqd,.thread_comm ksoftirqd/%u,
};static __init int spawn_ksoftirqd(void)
{cpuhp_setup_state_nocalls(CPUHP_SOFTIRQ_DEAD, softirq:dead, NULL,takeover_tasklets);BUG_ON(smpboot_register_percpu_thread(softirq_threads));return 0;
}
early_initcall(spawn_ksoftirqd);
当ksoftirqd被创建出来以后就会进入线程循环函数ksoftirqd_should_run和run_ksoftirqd了。接下来判断有没有软中断需要处理。软中断不只有网络软中断还有其他类型。
