Linux阅码场

其他

使用ftrace分析函数性能

buffer中抓取原始数据/sys/kernel/debug/tracing/per_cpu/cpu0/trace_pipe_raw,所以它的开销小并且支持长时间抓取。sudo
2022年2月28日
其他

一次解决Linux内核内存泄漏实战全过程

event被触发之后会打印kmalloc()和kfree()所申请和释放的内存地址,然后进一步只过滤申请4096字节的情况。
2021年2月11日
其他

Linux阅码场原创精华文章汇总

利用__attribute__((section()))构建初始化函数表与Linux内核init的实现
2020年6月25日
其他

宋宝华: Linux为什么一定要copy_from_user ?

len)是确保从buf开始的len长的区间,一定是位于用户空间的,应用程序不能传入一个内核空间的地址来传给系统调用,这样用户可以通过系统调用,让内核写坏内核本身,造成一系列内核安全漏洞。
2020年6月24日
其他

Linux TraceEvent - 我见过的史上最长宏定义

在上一节中,我们看到了内核通过编译链接的方法找到了traceeventcall,并且将其中的traceevent注册到了系统中,现在我们来看看traceevent_call是如何注册到系统中的。
2020年6月22日
其他

揭露内核黑科技 - 热补丁技术真容

内核热补丁是一种无需重启操作系统,动态为内核打补丁的技术。系统管理员基于该技术,可以在不重启系统的情况下,修复内核BUG或安全漏洞,可以在最大程度上减少系统宕机时间,增加系统的可用性。
2020年6月12日
其他

Linux pstore 实现自动“抓捕”内核崩溃日志

core文件中。在重启后,捕抓到的信息保存在特定的文件中。类似的还有netdump和diskdump。kdump的方案适用于服务器这种有大量资源的设备,功能也非常强大,但对嵌入式设备非常不友好。
2020年6月10日
其他

宋宝华: kvmalloc ——倚天剑屠龙刀两大神器合体?

ipc_rcu_alloc(sizeof(*msq))那么这个ipc_rc_alloc()是怎么回事呢?
2020年6月6日
其他

深入理解C11/C++11内存模型

可以使用mutex,semaphore,conditional等重量级方案对共享数据进行保护。但为了实现更高的并发,需要使用内存共享变量做通信(Message
2020年6月1日
其他

打通IO栈:一次编译服务器性能优化实战

在/sys/block/vda/queue中有两个可写的文件nr_requests和read_ahead_kb,前者是配置块层最大可以申请的request数量,后者是预读最大的数据量。默认情况下,
2020年5月8日
其他

理解Linux内核抢占模型(最透彻一篇)

这种情况下,系统会有更多的上下文切换,但是实时性更加好。对于要求软实时的嵌入式系统而言,这个选项是最佳的。但是对于服务器而言,通常第一个选项更好——更少的上下文切换,更多的CPU时间用作有用功。
2020年5月6日
其他

能感知功耗的Linux调度器(EAS)

,并允许动态分配时间),然后产生了O(1)调度(O(1)调度让开销最小化,且支持无限制的进程),最后产生了完全公平调度器(CFS)。CFS于2007年10月合并到Linux内核版本2.6.23中。
2020年4月21日
其他

Linux阅码场原创精华文章汇总

利用__attribute__((section()))构建初始化函数表与Linux内核init的实现
2020年4月10日
自由知乎 自由微博
其他

宋宝华:可以杀死的深度睡眠TASK_KILLABLE状态(最透彻一篇)

fault的时候从磁盘swap进来的,从而导致磁盘读的行为。在这个过程中,如果我们执行浅度睡眠并响应信号而跳过去执行应用程序代码段设置的信号处理函数,则此信号处理函数的执行可能再次因为swap
2020年4月8日
其他

定位并行应用程序中的可伸缩性问题(最透彻一篇)

这些检查完成后,我们可以进一步检查作为并行缩放不佳主要原因之一的内存延时。在x86系统体系结构中,CPU从其缓存子系统中检索数据。理想情况下,数据在指令需要时驻留在最靠近CPU的缓存中(L1
2020年4月6日
其他

内存泄漏(增长)火焰图

对比分配器函数malloc(),缺页中断是一个低频率行为。这意味着开销可以忽略不计,并且你可以用perf对每一个事件进行dump,可以先用perf在一个工业环境系统上检查一下缺页中断的频率:
2020年3月18日
其他

Cgroups 与 Systemd

/sys/fs/cgroup/memory/system.slice/cron.service/memory.limit_in_bytes
2020年3月16日
其他

Linux阅码场原创精华文章汇总

利用__attribute__((section()))构建初始化函数表与Linux内核init的实现
2020年3月15日
其他

宋宝华: 聊一聊进程深度睡眠的TASK_KILLABLE这个状态

c不掉那个进程,因为它就是个深度睡眠的场景。你徘徊,你迷茫,你问能不能直接都改为TASK_INTERRUPTIBLE,彻底删除TASK_UNINTERRUPTIBLE呢?
2020年3月11日
其他

Linux 系统性能评测基准系统配置及其原理

从调度器的调度算法中隔离出来。也就是说从用户进程的角度来说,调度器不会主动调度任何进程到目标cpu上来。但是仅仅靠这个参数仍然不能保证所有软/硬中断和一些其他的内核组件不会运行在目标的cpu上。
2020年3月3日
其他

精品译文系列:Linux多线程应用性能分析

例如,当工作负载使用了5个线程时,平均只有4个线程处于繁忙状态。也就是说,通常有一个线程一直处于睡眠状态,这阻碍了性能的线性伸缩(性能没有随着线程数量增大而线性提高),表明线程之间存在一些同步。
2020年2月26日
其他

一文读懂Linux进程、进程组、会话、僵尸

那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程,此即为僵尸进程的危害,应当避免。
2020年2月24日
其他

郝健:Linux下服务程序启动管理方式的分析与总结

通过自实现daemon,可以清楚的看出一个守护进程实现的原理,方便理清概念。但缺点是在实际工程中默认将输出重定向/dev/null,无法保存服务日志,排查服务问题,即使在程序中重定向到
2020年1月20日
其他

骆小刚:Linux后台服务启动方式systemd、daemon、nohup大比拼

骆小刚,现就职于深圳市普康电子有限公司,高级软件工程师。负责arm下u-boot、kernel开发,APP框架搭建,底层软件开发,算法开发,性能优化等。对开源软件有浓厚兴趣。
2020年1月19日
其他

宋宝华: 一图理解终端、会话、 进程组、进程关系

开一个terminal,运行三个a.out,得到3个进程组,6个a.out进程:
2020年1月12日
其他

宋宝华:让Linux的段错误(segmentation fault)不再是一个错误

在这么多信号里面,除了极少数信号类似SIGKILL、SIGSTOP这种不能捕获和忽略以外,其他的都是可以被我们拿来把玩的,当然也包括看起来牛逼轰轰的SEGV段错误(编号11)的信号。
2020年1月11日
其他

Linux中父进程为何要苦苦地知道子进程的死亡原因?

我们在systemd里面,如果要添加一个开机就启动的后台服务,可以在/lib/systemd/system/目录增加一个service文件。比如,这里我增加了一个非常简单地service文件:
2020年1月6日
其他

1月13日晚开课:《Linux系统编程两驾马车》之《多进程编程》

电脑浏览器访问yomocode.com(不支持手机访问),先点击网站右上角图标,微信扫码登录,然后在此链接报名:
2020年1月5日
其他

Linux阅码场原创精华文章汇总

利用__attribute__((section()))构建初始化函数表与Linux内核init的实现
2019年12月30日
其他

宋宝华:用eBPF/bcc分析系统性能的一个简单案例

bytecode和load进入kernel挂载kprobe、tracepoints等上面执行。之后,还可以从python取出来C函数里面导出的maps数据以及per-event数据并进行打印。
2019年12月25日
其他

用Linux内核的瑞士军刀-eBPF实现socket转发offload

我们的demo旨在演示基于eBPF的sockmap对proxy转发的offload过程,所以接下来,我们对上述代码进行一些改造,即加入对sockmap的支持。
2019年12月24日
其他

宋宝华: 用off-cpu火焰图进行Linux性能分析

do_nanosleep系统调用;一个发生在printf()的时候,进入sys_write系统调用后,tty_write的n_tty_write等待一个mutex的代码上面。
2019年12月22日
其他

Linux阅码场原创精华文章汇总

利用__attribute__((section()))构建初始化函数表与Linux内核init的实现
2019年12月11日
其他

宋宝华:世上最好的共享内存(Linux共享内存最透彻的一篇)

Socket甩锅fd又有什么关系呢?memfd_create()得到了fd,它在行为上类似规则的fd,所以也可以透过socket来进行甩锅,这样A进程相当于把一片与fd对应的内存,分享给了进程B。
2019年12月9日
其他

宋宝华:那些年你误会的Linux DMA(关于Linux DMA ZONE和API最透彻的一篇)

ZONE和dma_alloc_coherent、dma_map_single等的各种讲解,由于很多童鞋缺乏自身独立的思考,人云亦云,对这些概念形成了很多错误的理解。本文的目的在于彻底澄清这些误解。
2019年11月29日
其他

吴章金: 实例解析 Linux C 语言程序之变量类型

大学的课程蛮多都停留在语法层面的描述,需要透彻理解一些“概念”,还是需要结合实际操作,从终极使用的角度来看这些“概念”,看到的深度和细节会大有不同。
2019年11月26日
其他

解决Linux内核问题实用技巧之-dev/mem的新玩法

更加重要的是,每个人在亲自动手做这些实验时,会碰到各种各样新的问题,分析以及最终hack掉这些问题,正是快乐感觉的由来,分享这种快乐本身也是一件快乐的事情,这也是我写这两篇文章的动力。
2019年11月20日
其他

吴章金:通过操作 Section 为 Linux ELF 程序新增数据

程序格式的一种核心数据表达方式,用来存放一个一个的代码块、数据块(包括控制信息块),这样一种模块化的设计为程序开发提供了很大的灵活性。
2019年11月18日
其他

实现一个基于XDP_eBPF的学习型网桥

... 对了,如果你在使用VirtualBox搭建桥接环境遇到问题的时候,请参考这篇:https://blog.csdn.net/dog250/article/details/102972031
2019年11月13日
其他

吴章金: 深度剖析 Linux共享库的“位置无关”实现原理

GLOBALOFFSETTABLE+.LC0@GOTOFF+eip.LC0=0x1B33+(−1AF0)+eip.got.plt=GLOBAL_OFFSET_TABLE
2019年11月10日
其他

吴章金: 如何创建一个*可执行*的共享库

如果想与本文作者更深入地探讨共享库、程序执行、动态链接、内联汇编等本文涉及的内容以及它们背后的程序链接、装载和运行原理,欢迎订阅吴老师的
2019年11月6日
其他

Linux阅码场原创精华文章汇总

利用__attribute__((section()))构建初始化函数表与Linux内核init的实现
2019年11月5日
其他

宋宝华: 僵尸进程的成因以及僵尸可以被“杀死”吗?

4730"之前。刚才我们“看起来”能杀死僵尸的本质原因是,当主线程4730调用pthread_exit()退出后,主线程4730的状态确实是僵尸了,但是该进程里面的4731线程,却没有死:
2019年11月4日
其他

报名:《360° 剖析 Linux ELF》在线视频课程已经全面上线

ELF规范、体系结构和指令集到代码编译、静态链接、共享库、动态链接、系统调⽤、程序执⾏到程序装载、程序运⾏、内存分布及程序退出。全程⼜会根据各个章节需要对各类ELF分析、裁剪和编辑⼯具进⾏⽤法详解。
2019年11月3日
其他

解决Linux内核问题实用技巧之 - Crash工具结合/dev/mem任意修改内存

这种情况下,crash工具成了辅助,而真正起作用的是我们自己编写的内核模块,而这些背后,需要我们对操作系统整体的内存管理机制拥有清晰的认知。编写这种内核模块也是Linux内核程序员必备的技能。
2019年10月28日
其他

宋宝华:让天堂的归天堂,让尘土的归尘土——谈Linux的总线、设备、驱动模型

既然没有什么关系,那么这些板子级别的互连信息,又为什么要放在驱动的代码里面呢?基本上,我们可以认为,ABC不会因谁而变,所以它的代码应该是天然跨平台的。故此,我们认为“#defineABC_BASE
2019年10月23日
其他

Linux阅码场原创精华文章汇总

利用__attribute__((section()))构建初始化函数表与Linux内核init的实现
2019年10月21日
其他

宋宝华: 几个人一起抢spinlock,到底谁先抢到?

闹地不好就要出问题。这个问题就是公平的问题。这个社会,人人都要讲公平,是一个人人平等、人不吃人的社会。经过本人数年研究,得出一个结论:装逼必然被雷劈,除非自己就是雷。所以我要坚持装孙子,50年不变。
2019年10月17日
其他

宋宝华: Linux内核编程广泛使用的前向声明(Forward Declaration)

但是,真实的情况却让你大跌眼镜,regmap结构体的具体成员长什么样子,没有出现在任何一个外部级别的头文件里面,而是完全internal的(内部的、内部的、内部的,各位童鞋!!!):
2019年10月16日
其他

Linux内核如何私闯进程地址空间并修改进程内存

后来有了家庭的观念,家庭的资源被隔离,人们便不能私闯民宅了,人们无法以随意的方式进入别人的家用别人的东西,除非这是主人允许的。操作系统进入现代模式后,进程也有了类似家庭的概念。
2019年10月11日