`
mryufeng
  • 浏览: 981960 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

用systemtap来修改下linux内核变量的值

阅读更多
我们在探索linux内核的时候,经常需要调整下变量的值,看它对系统的影响。如果这个值没有透过/proc来修改的话,那只能编译内核。这个步骤是非常繁琐的。现在我们有systemtap这个利器来帮忙了。

演示如下:
我们通过修改过
extern int sysctl_tcp_fin_timeout;的值来达到目的。是因为这个值是proc导出的 我们好验证是否成功。

root@localhost ~]# cat /proc/sys/net/ipv4/tcp_fin_timeout
15000
[root@localhost ~]# cat test.stp
probe begin
{
        printf("ready go\n");
}

probe kernel.function("do_tcp_setsockopt")
{
        $sysctl_tcp_fin_timeout = $1
        printf("sysctl_tcp_fin_timeout = %d\n", $sysctl_tcp_fin_timeout);
        exit()
}

[root@localhost ~]# stap -g test.stp 18000
ready go

这个时候 stap在运行, 只是还没有触发do_tcp_setsockopt.
现在我们来触发
[root@localhost ~]# erl
Erlang R13B02 (erts-5.7.3) [source] [64-bit] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.7.3  (abort with ^G)
1> {ok, LSock} = gen_tcp:listen(0, []).
{ok,#Port<0.437>}
2>
2> inet:setopts(LSock, [{nodelay,true}]).
ok
3>


Ok,这时候回头可以看到stap打出来以下:
sysctl_tcp_fin_timeout = 18000

我们来验证下:
root@localhost ~]# cat /proc/sys/net/ipv4/tcp_fin_timeout
18000
OK,成功。

Tips:
1. stap对全局变量的写需要-g guru模式。
2. 全局变量必须在一个单元内的函数里面才可以修改, 而且必须是在内核上下文。
分享到:
评论
3 楼 mryufeng 2009-10-29  
这个是秘密武器 无敌的
2 楼 litaocheng 2009-10-29  
呵呵,真方便
1 楼 mryufeng 2009-10-29  
跑这个例子前提是你的stap配置好了,标准就是可以跑 stap topsys.stp

相关推荐

    Linux内核源代码情景分析(完整版-带书签目录超清文字版).pdf

    9. **调试技术**:介绍GDB、SystemTap等工具在Linux内核调试中的应用,帮助读者定位和修复问题。 10. **性能优化**:分析了内核性能优化的策略和技巧,如减少上下文切换,优化内存访问等。 通过这本书,读者不仅...

    LInux内核精髓-精通Linux内核必会的75个绝技.pdf

    《Linux内核精髓-精通Linux内核必会的75个绝技》是一本深入探讨Linux内核的专著,适合那些希望深入了解操作系统工作原理、提升Linux系统编程能力的读者。这本书涵盖了75个关键技能,旨在帮助读者掌握Linux内核的核心...

    linux 内核编程教程chm

    通过阅读“Linux内核编程教程”,读者可以掌握这些核心概念,并逐步具备设计、修改和优化Linux内核的能力。教程可能涵盖从基础知识到高级特性的全面讲解,对于有志于深入Linux世界的人来说,是一份宝贵的参考资料。

    深入分析Linux内核源代码

    《深入分析Linux内核源代码》是一本专为对Linux操作系统内核感兴趣的读者精心编写的指南,它旨在帮助读者理解Linux内核的工作原理及其背后的源代码。Linux内核是开源软件界的瑰宝,其源代码提供了无尽的学习机会,...

    systemtap beginner

    SystemTap是一个强大的Linux内核调试工具,它允许开发者和管理员通过编写脚本来监控和分析Linux系统的行为。它是由Red Hat公司开发和支持的,被广泛用于Linux社区,用以简化内核和用户空间程序的调试过程。SystemTap...

    systemtap脚本编写基础很详细

    SystemTap是一种用于Linux内核调试和性能分析的工具,它允许用户编写脚本来检查运行中的内核。SystemTap脚本使用一种专门的脚本语言,提供了丰富的功能用于内核数据的采集和分析。本文档详细介绍了SystemTap脚本编写...

    LINUX内核源代码情景分析

    8. **同步与并发**:在多线程环境下,内核使用锁、信号量、条件变量等同步机制保证数据一致性。同时,内核提供信号、管道、套接字等多种并发控制手段,让进程间能够安全协作。 9. **模块化设计**:Linux内核允许...

    SystemTap_Beginners_Guide.pdf

    SystemTap脚本是一种专门编写的程序,它定义了当探针触发时应该执行的操作,从而实现在不修改源代码的情况下,对内核行为进行监控。 SystemTap脚本通常包括以下组件: - 事件(Event):事件是探针触发的条件,它...

    systemTap英文文档集合.7z

    1. **SystemTap Instrumenting the Linux Kernel for Analyzing Performance and Functional Problems.pdf**:这份文档深入探讨了如何使用systemTap来监控和分析Linux内核的性能和功能问题。它可能涵盖了内核调用...

    Linux内核源代码分析叛逆者..rar

    3. **内存管理**:Linux内核使用分页机制管理内存,包括物理内存和虚拟内存。它实现了页表、伙伴系统、slab分配器等机制,用于高效地分配和回收内存。 4. **文件系统**:文件系统是操作系统中数据存储的关键部分。...

    深入理解Linux内核(扫描版)

    6. **同步与并发**:学习Linux内核中如何实现线程、信号量、互斥锁、条件变量等机制,确保多任务环境下数据的一致性和正确性。 7. **中断与异常处理**:了解中断处理机制,以及如何在内核中处理异常情况,如系统...

    深入理解linux内核(第三版中文)

    7. **并发与同步**:Linux内核中大量使用了锁、信号量、条件变量等同步原语,以保证多线程环境下的正确性。书中将介绍这些同步机制以及死锁和竞态条件的避免策略。 8. **模块化设计**:Linux内核支持模块化,允许...

    systemtap tutorial

    需要注意的是,SystemTap的使用需要用户有一定的Linux内核和C语言的知识,因为脚本的编写和执行需要与内核直接交互,而其编译过程则依赖于C语言的编译器和链接器。在实际使用SystemTap进行问题诊断之前,用户应该...

    SystemTap_Beginners_Guide

    《SystemTap Beginners Guide》通过对SystemTap脚本的构建和操作的深入讲解,帮助用户从零开始构建SystemTap监控环境,并逐步深入了解SystemTap的高级特性,最终能够熟练使用SystemTap进行Linux内核级别的调试和性能...

    行业文档-设计装置-一种linux内核启动时数据跟踪的方法.zip

    7. **tracepoints**:内核开发者在关键位置预定义的追踪点,供tracing子系统使用,无需修改内核代码即可跟踪。 8. **BPF(Berkeley Packet Filter)**:现代的BPF不仅可以用于网络过滤,还能作为通用的内核安全和...

    systemtap beginner guide

    SystemTap是一个开源的动态跟踪工具,它允许开发者无需重新编译内核或重启系统,就能对Linux内核和运行中的应用程序进行深入分析。SystemTap的基本工作原理是允许用户编写脚本,这些脚本由SystemTap工具编译和运行,...

    Linux调试技术

    GDB(GNU调试器)是Linux下最常用的C/C++程序调试工具,它能帮助开发者单步执行代码、设置断点、查看变量值等。通过GDB,你可以对运行中的进程进行附加调试,查看内存状态,甚至调试远程目标。熟悉GDB的基本命令和...

Global site tag (gtag.js) - Google Analytics