
Linux 内核
gnnulzy
这个作者很懒,什么都没留下…
展开
-
系统级性能分析工具perf的介绍与使用
系统级性能优化通常包括两个阶段:性能剖析(performance profiling)和代码优化。性能剖析的目标是寻找性能瓶颈,查找引发性能问题的原因及热点代码。代码优化的目标是针对具体性能问题而优化代码或编译选项,以改善软件性能。在性能剖析阶段,需要借助于现有的profiling工具,如perf等。在代码优化阶段往往需要借助开发者的经验,编写简洁高效的代码,甚至在汇编级别合理使用各种指令,合理安排各种指令的执行顺序。perf是一款Linux性能分析工具。Linux性能计数器是一个新的基于内核的子系转载 2020-05-16 22:06:17 · 3283 阅读 · 0 评论 -
Linux内核同步 - spin_lock
一、前言在linux kernel的实现中,经常会遇到这样的场景:共享数据被中断上下文和进程上下文访问,该如何保护呢?如果只有进程上下文的访问,那在这里插入代码片么可以考虑使用semaphore或者mutex的锁机制,但是现在中断上下文也参和进来,那些可以导致睡眠的lock就不能使用了,这时候,可以考虑使用spin lock。本文主要介绍了linux kernel中的spin lock的原理以及...转载 2020-03-07 17:13:03 · 582 阅读 · 0 评论 -
内核页表和进程页表误区和使用
初学内核时,经常被“内核页表”和“进程页表”搞晕,不知道这到底是个啥东东,跟我们平时理解的页表有和关系。。内核页表:即书上说的主内核页表,在内核中其实就是一段内存,存放在主内核页全局目录init_mm.pgd(swapper_pg_dir)中,硬件并不直接使用。进程页表:每个进程自己的页表,放在进程自身的页目录task_struct.pgd中。在保护模式下,从硬件角度看,其运行的基本对象为“...转载 2020-03-01 22:20:15 · 1129 阅读 · 1 评论 -
Linux驱动基础:MSM平台IOMMU
IOMMU就是所谓的SMMU,它可以将不连续的物理内存组织成一个连续的虚拟内存(这对于很多驱动来说很有意义)。IOMMU把虚拟内存转换成物理内存的逻辑与CPU的MMU一样。通常,Linux很难分配好几MB大小的连续的物理内存(比如5MB或者10MB)。因为内存在使用当中都被会被碎片化,很难找到这么大且连续的物理内存大小。所以以前通常会在linux内核启动之前,把需要用到的几十MB或者上百MB的内...转载 2020-02-23 20:48:35 · 1648 阅读 · 0 评论 -
linux4.0内核堆栈
每一个进程(包括普通进程和内核进程)的地址空间都分为用户地址空间和内核地址空间两部分,在32位的x86机器上,用户地址空间的范围是0~3G,内核 地址空间的范围是3G~4G.对于不同的进程,其用户地址空间会随着进程不同而不同,但所有进程的内核地址空间则都是一样的。对于内核进程,由于其始终运 行在内核态,所以没有用户地址空间,其对应的tast_struct结构体中的mm域也就被赋值为NULL。而堆的...转载 2020-02-10 16:44:29 · 333 阅读 · 0 评论 -
linux内核中打印栈回溯信息 - dump_stack()函数分析
简介当内核出现比较严重的错误时,例如发生Oops错误或者内核认为系统运行状态异常,内核就会打印出当前进程的栈回溯信息,其中包含当前执行代码的位置以及相邻的指令、产生错误的原因、关键寄存器的值以及函数调用关系等信息,这些信息对于调试内核错误非常有用。打印函数调用关系的函数就是dump_stack(),该函数不仅可以用在系统出问题的时候,我们在调试内核的时候,可以通过dump_stack()函...转载 2019-01-03 18:45:11 · 942 阅读 · 0 评论 -
用mtrace检查内存泄漏
内存泄漏检查方法(for Linux) 如果你更想读原始文档, 请参考glibc info的"Allocation Debugging" 一章 (执行info libc);glibc提供了一个检查内存泄漏的方法, 前提是你的程序使用glibc的标准函数 分配内存(如malloc, alloc...): 1. 在需要内存泄漏检查的代码的开始调用void mtrace(void) (在mchec...转载 2019-01-04 09:52:38 · 645 阅读 · 0 评论 -
【实战】在Linux中如何利用backtrace信息解决问题
在Linux中如何利用backtrace信息解决问题一、导读在程序调试过程中如果遇到程序崩溃死机的情况下我们通常多是通过出问题时的栈信息来找到出错的地方,这一点我们在调试一些高级编程语言程序的时候会深有体会,它们通常在出问题时会主动把出问题时的调用栈信息打印出来,比如我们在eclipse中调试java程序时。当这些换到Linux上的C/C++环境时情况将变的稍微复杂一些,通常在这种情况下...转载 2019-01-10 11:31:27 · 377 阅读 · 0 评论