首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

linux源码epoll

简单的epoll例子 下面的例子,是笔者本人用c语言写的dbproxy中的一段代码。由于细节过多,所以做了一些删减。...那么,由accept获得的client_fd的结构如下图所示: (注:由于是tcp socket,所以这边sock->ops=inet_stream_ops,这个初始化的过程在我的另一篇博客>中,博客地址如下: https://my.oschina.net/alchemystar/blog/1791017) 既然知道了tfile->f_op->poll的实现...(soft_irq),再通过linux的软中断机制调用net_rx_action,如下图所示: 注:上图来自PLKA(>) step2: 紧接着跟踪next_rx_action...总结 epoll作为linux下非常优秀的事件触发机制得到了广泛的运用。其源码还是比较复杂的,本文只是阐述了epoll读写事件的触发机制,探究linux kernel源码的过程非常快乐_。

2.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

linux源码socket的close

linux源码socket的close 笔者一直觉得如果能知道应用到框架再到操作系统的每一处代码,是一件Exciting的事情。...上篇博客讲了socket的阻塞和非阻塞,这篇就开始谈一谈socket的close(以tcp为例且基于linux-2.6.24内核版本) TCP关闭状态转移图: 众所周知,TCP的close过程是四次挥手...但最终解决方案还是得应用程序着手。...总结 linux内核源代码博大精深,阅读其代码很费周折。之前读>的时候由于有先辈引导和梳理,所以看书中所使用的BSD源码并不觉得十分费劲。...直到现在自己带着问题独立linux源码的时候,尽管有之前的基础,仍旧被其中的各种细节所迷惑。希望笔者这篇文章能帮助到阅读linux网络协议栈代码的人。

5.3K80

Linux 内核事件 MySQL 性能瓶颈

---- 背景 之前做 MySQL 参数优化的时候,为了寻找瓶颈,我通常是观察 MySQL 的 status ,哪些计数器有问题,以便确认问题的大致范围和应该调整的参数。...---- 观察 Linux 的 IO 使用情况 对于 IO 的观察也有一个原则,那就是先看总量再看结构,最后精确到文件。 1....总量 mpstat 1 20 Linux 5.14.0-55.el9.x86_64 (git-sqlpy-com) 07/21/2022 _x86_64_ (2 CPU) 01:16:46...到这里就非常明确是哪里慢了。 ---- 针对性优化 由于我们已经知道是写 redo-log 和 binlog 日志慢了,所以我们可以针对性的做参数优化了。... 158 tps 提升到了 1673 tps 了你还不满足?关注我,这个还没有完。不信你看下面这些指标,IO 还有油水可以榨。

1.8K40

Linux源码Socket(TCP)的accept

前言 笔者一直觉得如果能知道应用到框架再到操作系统的每一处代码,是一件Exciting的事情。...关于epoll的原理可以看下笔者之前的博客《linux源码epoll》: https://www.cnblogs.com/alchemystar/p/13161781.html 在这里描述一下原因,...在accept_queue被填充后,由用户线程通过accept系统调用队列中获取对应的fd 值得注意的是,当用户线程来不及处理的时候,内核会drop掉三次握手成功的连接,导致一些诡异的现象,具体可以笔者的另一篇博客...: https://www.cnblogs.com/alchemystar/p/13473999.html 另外,对于accept_queue具体的填充机制以及源码,可以见笔者另一篇博客的详细分析 《Linux...源码Socket(TCP)的listen及连接队列》: https://www.cnblogs.com/alchemystar/p/13845081.html 总结 Linux内核源码博大精深,每次扎进去探索时候都会废寝忘食

1.8K00

linux5.9网络层的设计

再也不怕过时了,当然,现在内核的代码量级非常大,不可能看得完也不可能都,只是选取自己感兴趣的一些点看一下。...内核代码,总的来说是非常有趣的,不仅是因为知其然知其所以然,而且看到朴素的c语言,还有世界级大佬写代码的思路、思想,甚至注释,都是非常有意思的事情。...今天分析的内容是socket函数开始,看看linux网络层的设计。下面我们看一下我们平时写网络编程代码时的用法。...网络层的初始化 socket函数的定义中我们看到有family和type两个参数,这两个属性都会对应不同的实现。我们先看看family的实现。...rcu_assign_pointer(net_families[ops->family], ops); spin_unlock(&net_family_lock); return err;} 那么哪里会调用

78030

Redis源码哪里读起?

本文我们就集中讨论这样一个话题:如果你现在想阅读Redis源码,那么哪里入手?算是对之前系列文章的一个补充。...在本文的第二部分,我们将会一起来看一如何接收一个Redis命令的请求开始,一步步执行到来查阅这个命令表,从而找到该命令的执行入口。...注意,epoll是Linux系统所特有的,它不属于POSIX规范。 kqueue机制[13]。...要顺利读懂Redis源码,需要掌握一些在Linux下进行C语言编程的经验,也需要掌握一些Linux系统层面的知识。对于很多人来说,这些可能会是一种障碍。...因此,本文根据作者自己阅读代码的过程,以及在这个过程中对于碰到的重点疑难问题的调研,系统地记录下来,并提供了一些参考文献,希望对于那些想阅读Redis源代码,又不知道哪里入手的技术同学,会多少有些帮助

7.6K102

Linux源码Socket(TCP)Client端的Connect

前言 笔者一直觉得如果能知道应用到框架再到操作系统的每一处代码,是一件Exciting的事情。...今天笔者就来Linux源码的角度看下Client端的Socket在进行Connect的时候到底做了哪些事情。由于篇幅原因,关于Server端的Accept源码讲解留给下一篇博客。...(基于Linux 3.10内核) 一个最简单的Connect例子 int clientSocket; if((clientSocket = socket(AF_INET, SOCK_STREAM, 0)...我们先看一下搜索端口号的逻辑,如下图所示: 获取端口号范围 首先,我们内核中获取connect能够使用的端口号范围,在这里采用了Linux中的顺序锁(seqlock) void inet_get_local_port_range...重传的超时时间和 /proc/sys/net/ipv4/tcp_syn_retries 息息相关,Linux默认设置为5,建议设置成3,下面是不同设置的超时时间参照图。

70120

Linux源码Socket(TCP)Client端的Connect

前言 笔者一直觉得如果能知道应用到框架再到操作系统的每一处代码,是一件Exciting的事情。...今天笔者就来Linux源码的角度看下Client端的Socket在进行Connect的时候到底做了哪些事情。...获取端口号范围 首先,我们内核中获取connect能够使用的端口号范围,在这里采用了Linux中的顺序锁(seqlock) void inet_get_local_port_range(int *low...内核中修改的地方为: cat /proc/sys/net/ipv4/ip_local_port_range 32768 61000 通过hash决定端口号起始搜索范围 在Linux上进行connect...重传的超时时间和 /proc/sys/net/ipv4/tcp_syn_retries 息息相关,Linux默认设置为5,建议设置成3,下面是不同设置的超时时间参照图。 ?

1.4K41

linux0.11一个进程的诞生

这一篇大致说一下进程的创建,有兴趣的可以参考之前的一些文章或者直接上代码https://github.com/theanarkh/read-linux-0.11。 系统有一个GDT表。...NR_TASKS ; i++) if (task[i] && task[i]->pid == last_pid) goto repeat; // 再找一个可用的pcb项,1...时压入栈的ip,子进程创建完成会从这开始执行,即if (__res >= 0) p->tss.eip = eip; p->tss.eflags = eflags; // 子进程fork...tss信息中的ldt索引首先从gdt找到进程ldt 结构体数据的首地址,然后根据当前段的属性,比如代码段, 则从cs中取得选择子,系统ldt表中取得进程线性空间 的首地址、限长...ldt第二项中找出基地址和限长。基地址+ip得到线性地址的值。然后再根据页目录和页表就能得到物理值。

1.5K11
领券