Linux内核之旅

其他

MMU如何通过虚拟地址找到物理地址[2/2]

PUD索引:100001111,需要左移12bit,得到100001111000,即0x878
2023年10月13日
其他

使用 eBPF 实现 OFF CPU Time 记录并生成火焰图 —— 内核部分

mean?:https://stackoverflow.com/questions/13963150/what-does-the-gcc-function-suffix-isra-meanBCC
2023年9月7日
其他

eBPF Talk: 实战经验之 bpf FD 泄漏分析

fd.ReadLink(fmt.Sprintf("/proc/self/fd/%d",
2023年3月13日
其他

一文搞懂 mmap 涉及的所有内容

概述内存映射的应用mmap()用于共享内存的两种方式示例驱动+应用进程间共享内存匿名映射实现父子进程通信mmap进行内存映射的原理内存映射,简而言之就是将内核空间的一段内存区域映射到用户空间。映射成功后,用户对这段内存区域的修改可以直接反映到内核空间,相反,内核空间对这段区域的修改也直接反映用户空间。那么对于内核空间与用户空间两者之间需要大量数据传输等操作的话效率是非常高的。当然,也可以将内核空间的一段内存区域同时映射到多个进程,这样还可以实现进程间的共享内存通信。系统调用mmap()就是用来实现上面说的内存映射。最长见的操作就是文件(在Linux下设备也被看做文件)的操作,可以将某文件映射至内存(进程空间),如此可以把对文件的操作转为对内存的操作,以此避免更多的lseek()与read()、write()操作,这点对于大文件或者频繁访问的文件而言尤其受益。概述mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。munmap执行相反的操作,删除特定地址区域的对象映射。当使用mmap映射文件到进程后,就可以直接操作这段虚拟地址进行文件的读写等操作,不必再调用read,write等系统调用。但需注意,直接对该段内存写时不会写入超过当前文件大小的内容。采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据:一次从输入文件到共享内存区,另一次从共享内存区到输出文件。实际上,进程之间在共享内存时,并不总是读写少量数据后就解除映射,有新的通信时,再重新建立共享内存区域。而是保持共享区域,直到通信完毕为止,这样,数据内容一直保存在共享内存中,并没有写回文件。共享内存中的内容往往是在解除映射时才写回文件的。因此,采用共享内存的通信方式效率是非常高的。通常使用mmap()的三种情况:提高I/O效率、匿名内存映射、共享内存进程通信。用户空间
2023年1月25日
其他

eBPF实用技巧 | 函数参数超过5个怎么办?

本文作者为团队小伙伴阿松,在Linux文件监控领域实战经验丰富。本次引入eBPF在文件监控上应用,提升文件变更的关联进程信息等。在实现过程中,分享了eBPF
2022年12月26日
其他

通过性能指标学习Linux Kernel - (下)

的时间戳,原理上相信大家已经比较清晰,但是有一行并不起眼的代码就是滴23行还是到26行,这里只是区分了一下不同的时间单位,但是实质上是进行了数据处理,包括27行也是在处理数据,因此
2022年7月24日
其他

通过性能指标学习Linux Kernel - (上)

展开的,因此也是在尝试解释这件事情。调度延迟本次圈定的性能指标是调度延迟,那首要的目标就是看看到底什么是调度延迟,调度延迟是保证每一个可运行进程都至少运行一次的时间间隔,翻译一下,是指一个
2022年7月19日
其他

面向物联网的微内核SynestiaOS

目前的系统界面截图(QEMU虚拟环境下),这是系统启动动画:每一个线程开启一个窗口,也支持按钮,另外测试了2D图形库。系统启动后,成功加载并读取Ext2文件系统:更多信息,欢迎大家访问
2020年11月25日
其他

初识 Linux 网络栈及常用优化方法

inet_sendpage()、tcp_splice_read())中识别并记录不同报文流的处理程序运行在哪个CPU。RPS
2020年9月24日
其他

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

共享单车、共享充电宝、共享雨伞,世间的共享有千万种,而我独爱共享内存。早期的共享内存,着重于强调把同一片内存,map到多个进程的虚拟地址空间(在相应进程找到一个VMA区域),以便于CPU可以在各个进程访问到这片内存。现阶段广泛应用于多媒体、Graphics领域的共享内存方式,某种意义上不再强调映射到进程虚拟地址空间的概念(那无非是为了让CPU访问),而更强调以某种“句柄”的形式,让大家知道某一片视频、图形图像数据的存在并可以借助此“句柄”来跨进程引用这片内存,让视频encoder、decoder、GPU等可以跨进程访问内存。所以不同进程用的加速硬件其实是不同的,他们更在乎的是可以通过一个handle拿到这片内存,而不再特别在乎CPU访问它的虚拟地址(当然仍然可以映射到进程的虚拟地址空间供CPU访问)。只要内存的拷贝(memcpy)仍然是一个占据内存带宽、CPU利用率的消耗大户存在,共享内存作为Linux进程间通信、计算机系统里各个不同硬件组件通信的最高效方法,都将持续繁荣。关于内存拷贝会大多程度地占据CPU利用率,这个可以最简单地尝试拷贝1080P,帧率每秒60的电影画面,我保证你的系统的CPU,蛋会疼地不行。我早就想系统地写一篇综述Linux里面各种共享内存方式的文章了,但是一直被带娃这个事业牵绊,今日我决定顶着娃娃们的山呼海啸,也要写一篇文章不吐不快。共享内存的方式有很多种,目前主流的方式仍然有:共享内存的方式1.基于传统SYS
2019年12月9日
其他

聊聊Linux IO(上)

Data)到达磁盘(Disk)的流程如图所示[3]。图中描述了Linux下文件操作函数的层级关系和内存缓存层的存在位置。中间的黑色实线是用户态和内核态的分界线。
2018年8月29日
其他

台湾開源人年会之Linux内核之旅(附演讲PPT及讲解)

这是一个很难参透的问题,回答什么似乎都不完全对,于是,转换思路,回答一下“我从哪里来”,自己的家乡法门寺和学校所在地大雁塔具有标志性,想必大家知道的。当这一想法出来后,整个演讲的大思路就理清楚了,
2018年8月15日
自由知乎 自由微博
其他

平凡:Docker底层的内核知识——cgroups

Linux内核之旅快来点击关注作者简介平凡,西安邮电大学在读研二学生,积极乐观,在做好自己专业的同时也喜欢了解各方面的知识,包括会使用hadoop与tensorflow。也深入学习linux,
2018年5月10日
其他

Docker底层的内核知识——namespace

概述用过Docker的开发者都知道,Docker容器在本质上是宿主机上的一个进程。也就是常说的容器是操作系统级的虚拟化。容器与容器之间做了资源的隔离,所以在一个容器内部的各种操作会给人一种仿佛在独立的系统环境中的感觉。外部应用对容器进行访问时,也会有这种感觉。而做这种容器资源隔离的Linux内核机制就是namespace。感受一下namespace的存在在具体了解namespace之前,我们先感受一下namespace的存在。
2018年4月16日
其他

KPTI补丁分析

1(启用PCID),并且源操作数的第63位=0,源操作数的0-11位为指定的PCID。那么CPU会使所有与指定PCID关联的TLB缓存项失效。TLB中与其他PCID关联的TLB缓存项并不会失效。
2018年3月8日
其他

bash 网络接口

发现重定向时它会先查看重定向的文件是不是特殊文件,如果是截获它,自行解释之,否则就打开这个文件。当然了,真正解释
2016年8月18日