
linux源码分析
文章平均质量分 82
阅读linux内核源码,分享自己的见解
行星T
linux c/c++基础软件相关开发
展开
-
bonding原理分析和问题排查
即可进行tcp通信。dev_queue_xmit_nit即为发送报文的抓包点,netdev_start_xmit最开始为bond3的发送报文是会被抓包回调函数即bond_start_xmit然后再通过两个物理网卡发送出去,即实际物理网卡发送报文时会再次被tcpdump抓包。在bond_xmit_broadcast函数中通过bond_for_each_slave_rcu(bond, slave, iter)遍历所有bond的网卡并调用bond_dev_queue_xmit通过该网卡进行报文发送。原创 2024-04-18 11:54:53 · 1765 阅读 · 0 评论 -
linux内核报文接收流程
1.当网络设备接收到数据包时,硬件会将数据包存储在设备驱动的接收环(receive ring)中。接着,硬件会触发中断,通知操作系统有数据包可用。2.在接收到数据包后,驱动程序会调用netif_rx()函数来处理数据包。netif_rx()函数会将数据包放入软中断队列中,并触发软中断处理函数来处理数据包。3.软中断处理函数net_rx_action通过poll回调函数process_backlog获取到接收到的数据包。并转交给__netif_receive_skb函数处理。原创 2024-03-18 14:21:51 · 1142 阅读 · 0 评论 -
prp协议原理解析
PRP协议通过使用两个冗余的并行路径和冗余检查机制,提供了实时以太网网络的高可靠性和容错性。它可以在链路故障发生时快速切换到冗余路径,确保数据的可靠传输。PRP协议的独立性使其能够与各种上层协议兼容,并广泛应用于工业控制系统、电力系统、交通系统等对通信可靠性要求较高的领域。使用:1.PRP协议主要应用于实时工业以太网领域,用于提供高可靠性的通信。2.PRP协议通过在物理层上提供两个冗余的并行网络路径来实现冗余性。每个路径都有独立的链路、交换机和设备。原创 2024-03-14 18:07:29 · 2815 阅读 · 0 评论 -
ip协议之报文发送流程
1.__ip_queue_xmit函数将报文从ip层发送给首先判断sk->sk_dst_cache缓存的路由项是否可用。不可用的情况一般有路由项被释放,网络命名空间发生改变如添加/删除路由或up/down网卡。如果sk->sk_dst_cache缓存的路由项不可用则根据目的地址查找路由项并设置到sk->sk_dst_cache。2.应用层通过netlink通信进行路由表的添加/删除操作,且路由表的"修改"是通过先删除再添加的方式完成的。原创 2024-02-28 18:56:13 · 1076 阅读 · 0 评论 -
watchdog看门狗soft lockup软死锁和Hard LOCKUP硬死锁原理分析
软死锁表示产生死锁的cpu上运行的任务超过了一定的时间限度导致无法进行内核线程调度。典型场景为某个cpu上一直在while死循环,导致该cpu无法调度运行他任务。硬死锁表示产生死锁的cpu上在一定的时间限度上一直无法响应中断。典型场景为在同一个cpu上调用关中断的自选锁spin_lock_irqsave产生了死锁。原创 2024-02-19 18:12:12 · 2154 阅读 · 0 评论 -
softirq软中断线程和tasklet工作队列原理分析
如果ht->thread_should_run(td->cpu)返回0即ksoftirqd_should_run()函数返回0表示不存在软中断进行schedule()切换,如果存在软中断需要执行则调用ht->thread_fn(td->cpu);进而在软中断被调度运行时能执行软中断的回调函数tasklet_action。在softirq_init初始化函数中首先会调用open_softirq设置低优先级TASKLET_SOFTIRQ和高优先级HI_SOFTIRQ的tasklet工作队列的回调函数。原创 2024-02-19 11:53:49 · 902 阅读 · 0 评论 -
低精度定时器timer_list
低精度和高精度定时器。低精度定时器基于硬件的周期性中断实现,其定时周期的粒度为1/HZms,例如,内核HZ为1000,那么低精度的定时器最小定时时间为1ms;高精度定时器可以实现ns级的定时,不过,实际的定时周期粒度与CPU的主频有关,比如,桌面级的CPU一般都是GHZ级别,那么,其定时粒度可以达到ns级别,而对于嵌入式CPU,其主频一般在百兆级别,那么定时粒度就只能达到us级别了。api函数:timer_setup():初始化定时器和回调函数mod_timer():修改定时器延迟时间。原创 2024-02-18 17:58:31 · 980 阅读 · 0 评论 -
linux-5.14.2-内核文件读取page缓存
linux-5.14.2-内核文件读取page缓存原创 2022-07-03 23:37:33 · 662 阅读 · 0 评论 -
linux-5.10.38-epoll源码分析
路径:fs\eventpoll.cepoll_create创建epoll描述符static int do_epoll_create(int flags){ int error, fd; struct eventpoll *ep = NULL; struct file *file; /* Check the EPOLL_* constant for consistency. */ BUILD_BUG_ON(EPOLL_CLOEXEC != O_CLOEXEC); if (flags &原创 2022-05-23 19:19:39 · 359 阅读 · 0 评论