行星T
码龄5年
关注
提问 私信
  • 博客:23,465
    社区:1
    23,466
    总访问量
  • 25
    原创
  • 160,451
    排名
  • 152
    粉丝
  • 0
    铁粉
  • 学习成就

个人简介:linux c/c++基础软件相关开发

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:湖南省
  • 加入CSDN时间: 2020-05-29
博客简介:

xxt99的博客

查看详细资料
  • 原力等级
    成就
    当前等级
    3
    当前总分
    240
    当月
    3
个人成就
  • 获得269次点赞
  • 内容获得3次评论
  • 获得253次收藏
创作历程
  • 11篇
    2024年
  • 14篇
    2022年
成就勋章
TA的专栏
  • linux源码分析
    9篇
  • 其他
    4篇
  • c/c++语言学习
    4篇
  • redis源码分析
    3篇
兴趣领域 设置
  • 网络与通信
    网络协议tcp/ip
  • 操作系统
    linux
  • 服务器
    linux
创作活动更多

如何做好一份技术文档?

无论你是技术大神还是初涉此领域的新手,都欢迎分享你的宝贵经验、独到见解与创新方法,为技术传播之路点亮明灯!

180人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

文件系统和磁盘的关系

在blkdev_get_by_path->lookup_bdev->bd_acquire->bdget函数中如果/dev/sda1分区对应的dev_t dev设备号没有对应的struct block_device块设备描述符则会通过bdget->iget5_locked函数创建该描述符并在bdev_set函数中将BDEV_I(inode)->bdev.bd_dev设置为/dev/sda1分区对应的dev_t dev设备号。例如,“/dev/sdb1” 表示要挂载的设备是 /dev/sdb1。
原创
发布博客 2024.04.29 ·
644 阅读 ·
27 点赞 ·
1 评论 ·
23 收藏

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 ·
1399 阅读 ·
29 点赞 ·
0 评论 ·
12 收藏

drop cache原理分析

1.drop slab cache会遍历所有所有注册到shrinker_list的链表并调用其回调函数scan_objects释放slab cache。2.drop page cache 会释放所有struct super_block下的所有inode节点地址空间inode->i_mapping的所有非锁定非脏页非回写页非映射页进行page cache释放。3.通过/proc/sys/vm/drop_caches 写入特定的值时释放cache缓存。写入值1表示释放page页cache。
原创
发布博客 2024.04.09 ·
1483 阅读 ·
22 点赞 ·
0 评论 ·
19 收藏

/dev/目录下字符设备文件创建流程

1.字符设备文件(/dev/)是Linux系统中用于管理字符设备的特殊目录,应用程序可以通过打开和读写该目录下的文件节点与字符设备进行通信。2.device_add函数是Linux内核中用于向系统添加设备的函数,它将设备添加到设备层次结构中,并进行资源分配和数据结构初始化,以便内核和驱动程序管理设备。3.devtmpfs是一个临时文件系统,用于在系统启动时自动创建和管理设备节点。它为字符设备和块设备分配设备号,并与驱动程序建立连接,使得设备能够被应用程序访问和操作。
原创
发布博客 2024.03.26 ·
1425 阅读 ·
31 点赞 ·
0 评论 ·
32 收藏

linux内核报文接收流程

1.当网络设备接收到数据包时,硬件会将数据包存储在设备驱动的接收环(receive ring)中。接着,硬件会触发中断,通知操作系统有数据包可用。2.在接收到数据包后,驱动程序会调用netif_rx()函数来处理数据包。netif_rx()函数会将数据包放入软中断队列中,并触发软中断处理函数来处理数据包。3.软中断处理函数net_rx_action通过poll回调函数process_backlog获取到接收到的数据包。并转交给__netif_receive_skb函数处理。
原创
发布博客 2024.03.18 ·
968 阅读 ·
23 点赞 ·
0 评论 ·
25 收藏

prp协议原理解析

PRP协议通过使用两个冗余的并行路径和冗余检查机制,提供了实时以太网网络的高可靠性和容错性。它可以在链路故障发生时快速切换到冗余路径,确保数据的可靠传输。PRP协议的独立性使其能够与各种上层协议兼容,并广泛应用于工业控制系统、电力系统、交通系统等对通信可靠性要求较高的领域。使用:1.PRP协议主要应用于实时工业以太网领域,用于提供高可靠性的通信。2.PRP协议通过在物理层上提供两个冗余的并行网络路径来实现冗余性。每个路径都有独立的链路、交换机和设备。
原创
发布博客 2024.03.14 ·
2199 阅读 ·
26 点赞 ·
0 评论 ·
24 收藏

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 ·
998 阅读 ·
24 点赞 ·
0 评论 ·
14 收藏

tcp协议之报文发送流程

1.若开启了tcp pacing功能则每次的报文发送实际是由高精度定时器pacing_timer的回调函数中进入tcp_write_xmit->tcp_transmit_skb将报文发送到ip层。若没有开启tcp pacing功能则每次tcp_write_xmit函数再判断是否使用Nagle机制进行报文的合并发送。
原创
发布博客 2024.02.26 ·
1489 阅读 ·
18 点赞 ·
0 评论 ·
23 收藏

watchdog看门狗soft lockup软死锁和Hard LOCKUP硬死锁原理分析

软死锁表示产生死锁的cpu上运行的任务超过了一定的时间限度导致无法进行内核线程调度。典型场景为某个cpu上一直在while死循环,导致该cpu无法调度运行他任务。硬死锁表示产生死锁的cpu上在一定的时间限度上一直无法响应中断。典型场景为在同一个cpu上调用关中断的自选锁spin_lock_irqsave产生了死锁。
原创
发布博客 2024.02.19 ·
1734 阅读 ·
21 点赞 ·
0 评论 ·
22 收藏

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 ·
854 阅读 ·
21 点赞 ·
0 评论 ·
18 收藏

低精度定时器timer_list

低精度和高精度定时器。低精度定时器基于硬件的周期性中断实现,其定时周期的粒度为1/HZms,例如,内核HZ为1000,那么低精度的定时器最小定时时间为1ms;高精度定时器可以实现ns级的定时,不过,实际的定时周期粒度与CPU的主频有关,比如,桌面级的CPU一般都是GHZ级别,那么,其定时粒度可以达到ns级别,而对于嵌入式CPU,其主频一般在百兆级别,那么定时粒度就只能达到us级别了。api函数:timer_setup():初始化定时器和回调函数mod_timer():修改定时器延迟时间。
原创
发布博客 2024.02.18 ·
955 阅读 ·
27 点赞 ·
0 评论 ·
28 收藏

dpdk-22.07.0-testpmd测试进程响应icmp请求

dpdk-22.07.0-testpmd测试进程响应icmp请求
原创
发布博客 2022.07.18 ·
857 阅读 ·
0 点赞 ·
1 评论 ·
2 收藏

dpdk-22.07.0-多线程机制简析

dpdk-22.07.0-多线程机制简析
原创
发布博客 2022.07.13 ·
741 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

dpdk-22.07.0-trace机制简析

dpdk-22.07.0-trace机制简析
原创
发布博客 2022.07.12 ·
569 阅读 ·
0 点赞 ·
1 评论 ·
1 收藏

meson使用

meson使用
原创
发布博客 2022.07.07 ·
663 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

linux-5.14.2-内核文件读取page缓存

linux-5.14.2-内核文件读取page缓存
原创
发布博客 2022.07.03 ·
594 阅读 ·
0 点赞 ·
0 评论 ·
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 ·
330 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

redis-6.0.8-均衡哈希函数

static int clusterManagerCommandRebalance(int argc, char **argv) { //均匀分配哈希槽 int port = 0; char *ip = NULL; clusterManagerNode **weightedNodes = NULL; list *involved = NULL; if (!getClusterHostFromCmdArgs(argc, argv, &ip, &port
原创
发布博客 2022.05.22 ·
172 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

c++学习

类构造函数初始化列表c++#include <iostream> // std::coutusing namespace std;class CMyClassaa { public: CMyClassaa(int x, int y); int m_x; int m_y=5;};CMyClassaa::CMyClassaa(int x, int y) : m_y(y), m_x(m_y){}int main(){ CMyCl
原创
发布博客 2022.05.12 ·
222 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

内存管理maclloc,jemalloc

内存分配malloc一、c库函数Malloc()和free()Gun下默认会链接 libc库,路径为/lib64/libc.so.6。Malloc()类函数调用时相应的会调用libc中的maloc函数。定义如图所示,其中用了一些gun的c关键字,大概意思为malloc的是__libc_malloc的别名,__malloc也是__libc_malloc的别名。二、内存分配的具体实现在调用__libc_malloc函数时首先会判断全局钩子函数malloc_hook_ini是否被定义,在libc库
原创
发布博客 2022.05.11 ·
1897 阅读 ·
0 点赞 ·
0 评论 ·
5 收藏
加载更多