linux下的 c 和 c++ 开发工具及linux内核开发工具 2

  • ftrace ftrace 除了 trace-cmd 这个命令行前端工具之外,还有一个图形化显示前端工具叫 kernelshark,非常好用,有时间片显示和过滤功能。kernelshark 和 trace-cmd 都可以使用apt安装。使用方法是先用trace-cmd产生trace.dat文件,然后用kernelshark打开。一般情况下,trace-cmd 需要在板子上运行,因此需要交叉编译,它依赖libtraceevent 和 libtracefs这两个库,各自的下载地址为:
    https://git.kernel.org/pub/scm/libs/libtrace/libtraceevent.git
    https://git.kernel.org/pub/scm/libs/libtrace/libtracefs.git
    git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/trace-cmd.git
    链接 trace-cmd 的时候最好使用 libtraceevent 和 libtracefs 的静态库。

ftrace 的配置一般在调试文件系统:/sys/kernel/debug/tracing 或 /sys/kernel/tracing。该文件夹中的 buffer_size_kb限定了对单个cpu进行trace的最大存储buffer,而 buffer_total_size_kb则一般是 buffer_size_kb * cpu个数
trace-cmd真的好用,下面是使用方法:

  1. 常用命令:
 record    - record a trace into a trace.dat file
 set      - set a ftrace configuration parameter
 start       - start tracing without recording into a file
 extract     - extract a trace from the kernel
 stop     - stop the kernel from recording trace data
 restart     - restart the kernel trace data recording
 show     - show the contents of the kernel tracing buffer
 reset     - disable all kernel tracing and clear the trace buffers
 clear     - clear the trace buffers
 report     - read out the trace stored in a trace.dat file

在每一个抓取动作之前,必须先清掉trace buffers,因为ftrace使用的是ringbuffer,因此有可能还需要设置该buffer的大小,不然可能存在覆盖的情况。record下的-m参数就是这个作用(如果要永久修改该参数,直接echo 8192 到 buffer_size_kb)。清掉buffer的动作命令为 trace-cmd clear。 record 命令是一个复合命令,一般用来跟踪进程或者可执行程序的, 它会在当前目录下生成trace.dat文件,使用如下:
trace-cmd record -m 8192 -p function_graph ls ,但这种方式会记录所有层级的函数调用图,哪怕是一个小程序,都非常多的调用,以至于打印都打印不完。
trace-cmd record -m 8192 -p function_graph --max-graph-depth 3 ls,限定调用层级,可以先层级1,再层级2,层级太深很难分析。
trace-cmd record -m 8192 -e ext4 ls,这个是抓取ext4的所有event。
查看报告:
trace-cmd report。它会读取当前目录下的trace.dat文件进行报告。因此他是record命令的附庸。

除了上面的 record 复合命令外,还可以使用独立命令,独立命令必须成套出现,比如start后必须调用stop来停止trace,不然会一直trace。注意,reset并不会停止trace,这个命令没什么用,最好别用,以免造成自己误解。当然,start之前调用clear是必须的。start 不会创建trace.dat文件,所以需要自己去把trace导出来。

有关ftrace的资料:

  1. https://blogs.vmware.com/opensource/2019/11/12/ftrace-linux-kernel/
  2. https://alex.dzyoba.com/blog/ftrace/
  3. https://andreasch.com/2017/12/06/ftrace/
  4. https://jvns.ca/blog/2017/03/19/getting-started-with-ftrace/
  5. https://www.brendangregg.com/blog/2014-08-30/ftrace-the-hidden-light-switch.html
  6. https://lwn.net/Articles/365835/
  7. https://lwn.net/Articles/366796/
  8. https://lwn.net/Articles/370423/
  9. https://lwn.net/Articles/410200/
  10. https://www.kernel.org/doc/Documentation/trace/ftrace.txt
  11. https://jvns.ca/blog/2017/03/19/getting-started-with-ftrace/

Original: https://www.cnblogs.com/welhzh/p/15573573.html
Author: 微信公众号–共鸣圈
Title: linux下的 c 和 c++ 开发工具及linux内核开发工具 2

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/8612/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • linux下oracle调试小知识

    1、oracle 安装下的/u01/diag/rdbms/orcl/HOF/incident目录下是什么文件?答:每当一个错误发生的时候,oracle会创建一个incident,并…

    Linux 2022年8月26日
    0300
  • MIT6.828——Lab1 partB(麻省理工操作系统课程实验)

    Lab1 历时2天,完成了LAB1,完整代码仓库可点击:https://github.com/Elio-yang/MIT6.828 partA 练习 *exercise3 gdb指…

    Linux 2022年9月10日
    0180
  • linux命令之wget下载

    wget wget 是一个下载文件的工具。 格式 wget [参数] [URL地址] 常用参…

    Linux 2022年9月10日
    0400
  • springboot整合redis-sentinel支持Cache注解

    一、前提 已经存在一个redis-sentinel集群,两个哨兵分别如下: /home/redis-sentinel-cluster/sentinel-1.conf port 26…

    Linux 2022年9月14日
    0200
  • 使用 gitlint 让 commit message 服从 conventional 规范

    看了阮一峰的文章 Commit message 和 Change log 编写指南,认同 git commit message 应该规范化的观点;但用来检查是否符合规范的工具,阮提…

    Linux 2022年8月30日
    0260
  • 转: 关于 linux free的命令的说明

    前段时间有个项目的用C写的,性能测试时发现内存泄露问题。关于怎么观察内存使用问题,free是很好用的一个命令。 Mem:表示物理内存统计 -/+ buffers/cache:表示物…

    Linux 2022年8月24日
    0310
  • Redisson 分布式锁实战与 watch dog 机制解读

    源地址:https://www.cnblogs.com/keeya/p/14332131.html Original: https://www.cnblogs.com/SimonH…

    Linux 2022年9月14日
    0390
  • Linux设备管理——sysfs、udev

    What is the use of Sysfs sysfs is a pseudo file system provided by the Linux kernel that e…

    Linux 2022年8月24日
    0360
  • [20220304]使用gdb完成各种进制转换.txt

    [20220304]使用gdb完成各种进制转换.txt –//一般使用gdb调试跟踪程序,centos 7以上版本gdb支持管道,可以使用gdb p命令实现10,16进…

    Linux 2022年9月10日
    0240
  • linux下启动和关闭tomcat服务的方式

    Linux下tomcat服务的启动、关闭与错误跟踪,通常通过以下几种方式启动关闭tomcat服务: 切换到tomcat主目录下的bin目录 生产模式:方式一:直接启动 ./star…

    Linux 2022年8月20日
    0490
  • ubuntu代理设置

    在许多情况下,服务器不具备连接外部互联网的条件,需要使用代理服务器访问外部网络资源来升级软件包: [En] In many cases, the server does not h…

    Linux 2022年8月26日
    0440
  • git常用命令

    命令别名设置:  gitk   git clean命令用&#x6765…

    Linux 2022年8月30日
    0250
  • Linux 段页式内存管理

    分段机制 分段(Segmentation):这种方法是人们最开始使用的一种方法,基本思路是将程序所需要的内存地址空间大小的虚拟空间映射到某个物理地址空间。 每个程序都有其独立的虚拟…

    Linux 2022年8月26日
    0220
  • 30分钟使用Docsify+Github Pages搭建个人博客

    前言 现如今网上有许多完善的博客平台,如博客园、掘金、思否、知乎等。有人会说为什么现在网上有这么多成熟的博客平台,你还要浪费时间搭建一个自己的博客平台呢?首先我相信每一个程序员都会…

    Linux 2022年8月30日
    0460
  • 为什么要使用git pull –rebase?

    1.git pull 2.merge 和 rebase 现在我们有这样的两个分支,test和master,提交如下: 在master执行git merge test,然后会得到如下…

    Linux 2022年8月30日
    0260
  • Linux下用OTL操作MySql(包含自己封装的类库及演示样例代码下载)

    (4.2)以下的演示样例更加简单,因为没有封装otl,仅仅是使用了全局的otl_connect来实现的,方便入门 创建VS项目: 包括头文件:otl4.h 包括源文件: #incl…

    Linux 2022年8月24日
    0270
  • mysql-linux定时备份mysql数据库

    sh脚本 #!/bin/bash db_user="数据库用户名" db_passwd="数据库密码" db_name="数据库名…

    Linux 2022年8月11日
    0660
  • 《HelloGitHub》第 74 期

    兴趣是最好的老师, HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 https://github.com/…

    Linux 2022年8月30日
    0310
  • redis中save和bgsave区别

    SAVE 和 BGSAVE 两个命令都会调用 rdbSave 函数,但它们调用的方式各有不同: SAVE 直接调用 rdbSave ,阻塞 Redis 主进程,直到保存完成为止。在…

    Linux 2022年9月14日
    0210
  • Linux 常用命令总结(三)

    一、实用命令 1、crontab(定时任务) (1)基本概念crontab 是用来管理定时任务的命令。系统启动后,将会自动调用 crontab,如果存在任务,则根据相关定义去执行。…

    Linux 2022年9月10日
    0390
  • redis如何设置密码

    密码设置这里简单介绍一下redis如何设置密码redis密码设置有两种方式,一种需要重启redis服务,一种不需要重启redis服务。 首先,介绍一下需要重启redis服务的设置方…

    Linux 2022年9月14日
    0230
  • 灵感来袭,基于Redis的分布式延迟队列

    延迟队列 延迟队列,也就是一定时间之后将消息体放入队列,然后消费者才能正常消费。比如1分钟之后发送短信,发送邮件,检测数据状态等。 [En] Delay queue, that i…

    Linux 2022年9月14日
    0270
  • ssh remote forward 监听 0.0.0.0 端口;How to make SSH remote port forward that listens 0.0.0.0

    今天使用ssh转发内网服务的时候,发现remote forward 转发到远程,监听的端口都是localhost。 之前还没发现这种情况,因为都是在所转发的目的主机使用服务。今天,…

    Linux 2022年9月10日
    0220
  • Docker开启Remote API

    docker默认是没有开启Remote API的,需要我们手动开启。 编辑/lib/systemd/system/docker.service文件: 注释掉图中第第二行,并在其上方…

    2022年8月11日
    0610
  • 【Linux】解决Linux服务器内存不足问题

    在Linux服务器上使用Jmeter进行压测的时候,遇到了一个错误: 根据这里的提示: Java HotSpot(TM) 64-Bit Server VM warning: INF…

    Linux 2022年8月24日
    0230
  • Linux systemd & init.d

    在Linux进程中,普通程序会随着自己所属的Shell关闭而终止,如果需要实现像windows服务程序一样的效果,第一步就需要将普通进程变成守护进程。 守护进程特征: 它的生命周期…

    Linux 2022年8月26日
    0280

发表回复

登录后才能评论
免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部