
内核
文章平均质量分 63
fantasy_arch
这个作者很懒,什么都没留下…
展开
-
惊群问题如何解决?
一.惊群效应简介 当你往一群鸽子中间扔一块食物,虽然最终只有一个鸽子抢到食物,但所有鸽子都会被惊动来争夺,没有抢到食物的鸽子只好回去继续睡觉, 等待下一块食物到来。这样,每扔一块食物,都会惊动所有的鸽子,即为惊群。 简单地说:就是扔一块食物,所有鸽子来抢,但最终只一个鸽子抢到了食物。 二. 操作系统的惊群 在多进程/多线程等待同一资源时,也会出现惊群。即当某一资源可用时,多个进程/线程会惊醒,竞争资源。这就是操作系统中的惊群。 三. 看一下nginx中解决惊群的方法。 上面是nginx多进程工作原创 2022-05-31 11:18:24 · 817 阅读 · 0 评论 -
linux内核接收网络数据流程(二)
以DM9000网卡为例,剖析从网卡硬件中断开始,直到tcp、udp应用层读取到数据的过程一 DM9000网卡驱动(这里我们仅仅分析最主要的流程,具体驱动程序可以自行阅读)static struct platform_driver dm9000_driver = {.driver = {.name = "dm9000",.pm = &dm9000_drv_pm_ops,....原创 2017-10-30 19:51:48 · 654 阅读 · 0 评论 -
linux内核接收网络数据流程(三)
一 前面一节我们讲了skb通过事件通知到了软中断处理,最终调用deliver_skb分发出去skb,注意deliver_skb调用这里是一个循环,list_for_each_entry_rcu ,netfilter模块就是这里调用的,因此可以知道,抓包工具等对socket读写是没有影响的,这里浅拷贝了一份skb到netfilter模块当实参传递的。而读写socket是更上层的调用,不属于同一个模块...原创 2017-10-31 10:16:58 · 1342 阅读 · 0 评论 -
linux内核接收网络数据流程(一)
一 要实现一个高效的流媒体服务器,离不开一个高效的网络协议栈,目前流媒体服务器大多是基于tcp/udp的,我们可以从tcp/udp入手,逐渐深入,甚至开发自己的流媒体协议栈。二 tcp 的三个接收队列 1 prequeue在linux内核中,每一个网络数据包,都被切分为一个个的skb,这些skb先被内核接收,然后投递到对应的进程处理,进程把skb拷贝到本tcp连接的sk_receive_queu...原创 2017-10-26 11:09:29 · 1031 阅读 · 0 评论 -
linux内核接收网络数据流程(四)
已经进行到这里,接下来需要讲的就是tcp的recv如何读取到内核的数据的了。一 先看看struct sock的缓存队列sk_receive_queue,这个队列就是内核的软中断上下文和进程空间的tcp_recvmsg(应用层调用tcp_recv)之间通信的队列。因此,我们只需要找到哪里写队列,哪里读队列的就好了。二 继续上一节的软中断上下文处理tcp_v4_rcv()//主要流程{//如果失败,直...原创 2017-10-31 19:34:59 · 687 阅读 · 0 评论 -
网卡内核参数调优
一.所有的TCP/IP调优参数都位于/proc/sys/net/目录. 例如, 下面是最重要的一些调优参数, 后面是它们的含义: 1. /proc/sys/net/core/rmem_max — 最大的TCP数据接收缓冲 2. /proc/sys/net/core/wmem_max — 最大的TCP数据发送缓冲 3. /proc/sys/net/ipv4/tcp_timestamps — 时间戳在...转载 2017-12-10 08:53:57 · 2926 阅读 · 0 评论