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

eBPF技术风靡当下,eBPF字节码正以星火燎原之势被HOOK在Linux内核中越来越多的位置,在这些HOOK点上,我们可以像编写普通应用程序一样编写内核的HOOK程序,与以往为了实现一个功能动辄patch一整套逻辑框架代码(比如Netfilter)相比,eBPF的工作方式非常灵活。我们先来看一下目前eBPF的一些重要HOOK点:将来这个is_XXX序列肯定...
📅 2023-06-04 阅读全文 →

宋宝华: Linux死锁的成因和常规调试方法(预告片)

有一次给一群码农演讲,我喷口水喷了快一个小时,说spinlock等的正确使用以及死锁的原因。下面有个人突然问,“老师,请问什么叫死锁?”。我心里想,把这个人拉出去枪毙一万次 :-) ,你这样是怎么做了几年码农的?这样民族自强的机会在哪里?但是我还是耐心地跟他解答了。我跟他说:“死锁就是我们两约好一起去跳楼,然后我们都跑到了顶层88楼的天台,然后我...
📅 2023-06-04 阅读全文 →

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

license: "cc-by-nc-nd-4.0"《360度剖析Linux ELF系列》相关文章:吴章金:如何创建一个*可执行*的共享库吴章金: 深度剖析 Linux共享库的“位置无关”实现原理背景介绍Section 是 Linux ELF 程序格式的一种核心数据表达方式,用来存放一个一个的代码块、数据块(包括控制信息块),这样一种模块化的设计为程序开发提...
📅 2023-06-04 阅读全文 →

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

接着上一篇文章《解决Linux内核问题实用技巧之 - Crash工具结合/dev/mem任意修改内存》继续,本文中,我们来领略几种关于/dev/mem的玩法。/dev/mem里有什么简单来讲,/dev/mem是系统物理内存的映像文件,这里的 “物理内存” 需要进一步解释。物理内存是指我们插在内存槽上的内存条吗?当然是,但物理内存不单单指内存条。物理内存严格来...
📅 2023-06-04 阅读全文 →

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

license: "cc-by-nc-nd-4.0"  "本文从编译、二进制程序文件和运行角度逐级解析了 Linux C 语言程序中几种变量类型" 吴章金老师《360度剖析Linux ELF系列文章》:吴章金:如何创建一个*可执行*的共享库吴章金: 深度剖析 Linux共享库的“位置无关”实现原理吴章金:通过操作 Section...
📅 2023-06-04 阅读全文 →

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

创作目的互联网、Linux内核书籍上充满了各种关于Linux DMA ZONE和dma_alloc_coherent、dma_map_single等的各种讲解,由于很多童鞋缺乏自身独立的思考,人云亦云,对这些概念形成了很多错误的理解。本文的目的在于彻底澄清这些误解。当你发现本文内容与baidu到的内容不一致的时候,以本文内容为准。本文目录 1.D...
📅 2023-06-04 阅读全文 →

吴章金: 《360度剖析Linux ELF》 新增 15 份实验材料,累计已达 70 份

本文简要介绍了新增的 15 种执行代码的方式,另外详细介绍了该课程提供的所有实验材料。"程序执行 tags:360 elf视频课程实验材料背景简介作为一门特别重视实践的课程,《360° 剖析 Linux ELF》视频课程自 1 个月前上线以来,一直在持续迭代和更新实验材料。今日新增了 15 种代码执行的方式,包括 exec, shlib, dlopen, ...
📅 2023-06-04 阅读全文 →

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

共享单车、共享充电宝、共享雨伞,世间的共享有千万种,而我独爱共享内存。早期的共享内存,着重于强调把同一片内存,map到多个进程的虚拟地址空间(在相应进程找到一个VMA区域),以便于CPU可以在各个进程访问到这片内存。现阶段广泛应用于多媒体、Graphics领域的共享内存方式,某种意义上不再强调映射到进程虚拟地址空间的概念(那无非是为了让CPU访问),而更强...
📅 2023-06-04 阅读全文 →

(好文重发)朴英敏:用crash工具分析Linux内核死锁的一次实战

本文简介:内核死锁问题一般是读写锁(rw_semaphore)和互斥锁(mutex)引起的,本文主要讲如何通过ramdump+crash工具来分析这类死锁问题。作者简介:朴英敏,现就职于国内一家手机研发公司,任职资深系统工程师,主要负责安卓系统方面的调试工作。0、背景知识点ramdump是内存转存机制,我们可以在某个时刻把系统的内存转存到一个文件中,然后与符...
📅 2023-06-04 阅读全文 →

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

在《宋宝华:火焰图:全局视野的Linux性能剖析》一文中,我们主要看了on-cpu火焰图,理解了系统的CPU的走向的分析。但是,很多时候,单纯地看on-cpu的情况(什么代码在耗费CPU),并不能解决性能问题,因为有时候性能差的原因瓶颈不一定在CPU上面,而是在off-cpu的时间,比如:进程进入系统调用执行io动作,io动作的延迟进程等待mutex锁的时...
📅 2023-06-04 阅读全文 →

宋宝华:Linux文件读写(BIO)波澜壮阔的一生

点击上方“公众号” 可以订阅哦!前言网上关于BIO和块设备读写流程的文章何止千万,但是能够让你彻底读懂读明白的文章实在难找,可以说是越读越糊涂!我曾经跨过山和大海 也穿过人山人海我曾经问遍整个世界 从来没得到答案本文用一个最简单的read(fd, buf, 4096)的代码,分析它从开始读到读结束,在整个Linux系统里面波澜壮阔的一生。本文涉及到的代码如...
📅 2023-06-04 阅读全文 →

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

我们已经对eBPF将网络转发offload到XDP(eXpress Data Path)耳熟能详,作为Linux内核的一把 “瑞士军刀” ,eBPF能做的事情可不止一件,它是一个多面手。继实现一个基于XDP_eBPF的学习型网桥之后,我们来看看如何基于eBPF实现socket转发的offload。socket数据offload问题通过代理服务器在两个TCP接...
📅 2023-06-04 阅读全文 →

(好文重发)阿里杨勇:浅谈 Linux 高负载的系统化分析

本文简介:        讲解 Linux Load 高如何排查的话题属于老生常谈了,但多数文章只是聚焦了几个点,缺少整体排查思路的介绍。所谓 “授人以鱼不如授人以渔"。本文试图建立一个方法和套路,来帮助读者对 Load 高问题排查有一个更全面的认识。作者简介&nbs...
📅 2023-06-04 阅读全文 →

Linux内核在中国大发展的黄金十年-写于中国Linux存储、内存管理和文件系统峰会十周年之际

Linux阅码场:       国内首屈一指的专注Linux核心技术开发的公众号,扫描下方二维码关注CLSF:        CLSF是中国Linux存储、内存管理和文件系统峰会的简称, 至今已举办十年, 参会成员由组委会根据Linux内核社区代码贡献邀请。CLSF会...
📅 2023-06-04 阅读全文 →

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

白发人送黑发人一个普遍的常识是,在Linux里面总是“白发人送黑发人”,子进程死亡,父进程透过wait()等待子进程死亡,并清理子进程僵尸,当然父进程也可以因此而获得子进程的死亡原因。子曾经曰过:“Talk is cheap. Show me the code”,我们来看看实际的代码:上述代码中,子进程在第18行通过pause()等待信号,父进程在代码的第...
📅 2023-06-04 阅读全文 →

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

今天周末,娃儿们配合不闹事,写一篇短小精悍的文章吧,反正文章长了大家也没时间看。今天文章的目标是,如何在进程访问空指针等情况下,产生段错误后,不再退出而是继续运行。这件事情,对于熔断(meltdown)漏洞的利用是比较关键的,我们都知道,利用meltdown漏洞,在用户空间是可以偷窥到内核空间数据的,下面的应用程序访问内核地址k:meltdown漏洞攻击c...
📅 2023-06-04 阅读全文 →

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

药不能停,直接进入正题,本文3分钟读完。文中涉及到的缩写如下:PID: 进程(process) IDPPID:父进程(parent process) IDPGID:进程组(process group) IDSID:会话(session )ID文中a.out对应的代码如下:a.out代码 main(){    fork...
📅 2023-06-04 阅读全文 →

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

作者简介 骆小刚,现就职于深圳市普康电子有限公司,高级软件工程师。负责arm下u-boot、kernel开发,APP框架搭建,底层软件开发,算法开发,性能优化等。对开源软件有浓厚兴趣。本文主要用实例剖析systemd、daemon()、nohup启动服务的差异。环境:ubuntu 1804 x86_64, linux 5.0,  gcc 8.3....
📅 2023-06-04 阅读全文 →

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

作者:郝健目前就职于瑞星咖啡,负责4层负载均衡的研究与开发。曾就职于天融信,赛尔网络,云杉网络几家公司。主要感兴趣的方向:linux内核网络子系统,dpdk。目前,Linux平台下主流的服务程序启动管理方式有以下几种: daemon sysvinitsystemdnohup1. daemon 守护进程是在后台运行不受控端控制的...
📅 2023-06-04 阅读全文 →

时间是最好的解药,等待是最好的修行

人生最大的焦虑莫过于等待,而等待最大的痛苦,莫过于没有进度条。这一生我们经历了无数的等待,高三毕业的学生等待高考成绩的放榜、失业数月的大龄程序员等待面试结果和新的offer、久婚未育的夫妻等待自己的第一个个宝宝、移居海外的人们等待移民局的审批。而从来没有一次等待,如同现在这般抑郁。17年前的那个春夏之交,那个时候我正在武汉华中科技大学读研一。受SARS的影...
📅 2023-06-04 阅读全文 →

宋宝华:武汉肺炎启示录—墨菲定律与防御性编程

墨菲定律开始的故事1949年,美国空军一位名叫爱德华·墨菲的空军上尉工程师,对他的某位运气不太好的同事随口开了句玩笑:“如果一件事有可能被做坏,让他去做就一定会更坏。”由此衍生出墨菲定律(Murphy's Law),指“凡是可能出错的事就一定会出错”。“墨菲定律”告诉我们:如果坏事情有可能发生,不管这种可能性有多小,它总会发生,并引起最大可能的损失。“墨菲...
📅 2023-06-04 阅读全文 →

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

作者简介 herongwei,北交硕士毕业,现就职于搜狗公司,后端开发工程师。从事 C++,Golang ,Linux 后端开发。追求技术,热爱编程与分享,希望能和大家多多交流学习~座右铭:    认真的人,自带光芒!GitHub:     https://github.com/rongweihe个人博客:&...
📅 2023-06-04 阅读全文 →

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

简介 本文由西邮陈莉君教授研一学生梁金荣、戴君毅、马明慧等翻译,陈莉君、宋宝华老师指导和审核。译者梁金荣、戴君毅、马明慧等同学热爱开源,践行开放、自由和分享。原文地址:https://easyperf.net/blog/2019/10/05/Performance-Analysis-Of-MT-apps精品英文Linux系列文章翻译工作,由Linux阅码场公...
📅 2023-06-04 阅读全文 →

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

概要开发人员在高性能系统的性能调优过程中,经常会碰到各种背景的噪声干扰, 从而使得收集的数据不够精确。本文主要从CPU 以及Linux操作系统的角度来分析各种噪声的来源以及消除方法。最终的目标是搭建基准平台,在特定的cpu上实现”0”干扰。Cpu 运行中存在的几种背景噪声干扰来源1. 调度器:进程调度器对于系统的影响几乎无处不在, Linux 内核一般来说...
📅 2023-06-04 阅读全文 →

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

bcc是eBPF的一种前端,当然这个前端特别地简单好用。可以直接在python里面嵌入通过C语言写的BPF程序,并帮忙产生BPF bytecode和load进入kernel挂载kprobe、tracepoints等上面执行。之后,还可以从python取出来C函数里面导出的maps数据以及per-event数据并进行打印。详细的原理参见:http://www...
📅 2023-06-04 阅读全文 →

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

众所周知,Linux的进程睡眠有两种常规状态:TASK_INTERRUPTIBLE(浅度睡眠):可以被等待的资源唤醒,也能被signal唤醒;TASK_UNINTERRUPTIBLE(深度睡眠):可以被等待的资源唤醒,但是不能被signal唤醒。简单来说,深度睡眠的进程必须等待资源来了才能醒,在此之前,甚至你给它发任何的信号,它都不可能醒来。浅度睡眠的进程...
📅 2023-06-04 阅读全文 →

ARM(中国)高薪诚聘GPU软件驱动工程师

公司介绍 安谋科技(中国)有限公司(Arm China)依托 Arm世界领先的生态系统资源与技术优势,立足本土创新并与中国合作伙伴共同成长, 致力于成为中国领先的集成电路相关产品的核心知识产权(IP)开发与服务平台,支持并推动中国电子信息产业的高速发展。作为Arm在中国IP业务的唯一授权运营平台,安谋科技(中国)有限公司向中国的合作伙伴开展集成电路知识产权...
📅 2023-06-04 阅读全文 →

内存泄漏(增长)火焰图

本文由西邮陈莉君教授研一学生戴君毅、梁金荣、马明慧等翻译,宋宝华老师指导和审核。译者戴君毅、梁金荣、马明慧等同学热爱开源,践行开放、自由和分享。原文地址:http://www.brendangregg.com/FlameGraphs/memoryflamegraphs.html正文当你的应用程序占用的内存不断地提升时,你不得不立即修复它。造成这种情况的原因可...
📅 2023-06-04 阅读全文 →

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

作者简介 本文由西邮陈莉君教授研一学生梁金荣、戴君毅、马明慧翻译,宋宝华老师指导和审核。译者梁金荣、戴君毅、马明慧同学热爱开源,践行开放、自由和分享。点击左下角阅读原文可直达英文版原文。现代计算机系统的计算核心的数量不断增加,我们希望高度并行化软件的性能可以随着系统核心数量的增加而线性提高。但是,有些因素限制了多核系统上的并行性和可伸缩性。本文将不会介绍所有...
📅 2023-06-04 阅读全文 →

从big.LITTE到DynamIQ

作者简介 兰新宇,坐标成都的一名软件工程师,从事底层开发多年,对嵌入式,RTOS,Linux和虚拟化技术有一定的了解,有知乎专栏“术道经纬”进行相关技术文章的分享,欢迎大家共同探讨,一起进步。一般我们说到多核,大都是指SMP(Symmetric multi-processing),而ARM的big.LITTLE的CPU组合方案则属于HMP(Heteroge...
📅 2023-06-04 阅读全文 →