我们在探索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. 全局变量必须在一个单元内的函数里面才可以修改, 而且必须是在内核上下文。
分享到:
- 2009-10-29 19:06
- 浏览 2047
- 评论(3)
- 论坛回复 / 浏览 (3 / 3031)
- 查看更多
相关推荐
9. **调试技术**:介绍GDB、SystemTap等工具在Linux内核调试中的应用,帮助读者定位和修复问题。 10. **性能优化**:分析了内核性能优化的策略和技巧,如减少上下文切换,优化内存访问等。 通过这本书,读者不仅...
《Linux内核精髓-精通Linux内核必会的75个绝技》是一本深入探讨Linux内核的专著,适合那些希望深入了解操作系统工作原理、提升Linux系统编程能力的读者。这本书涵盖了75个关键技能,旨在帮助读者掌握Linux内核的核心...
通过阅读“Linux内核编程教程”,读者可以掌握这些核心概念,并逐步具备设计、修改和优化Linux内核的能力。教程可能涵盖从基础知识到高级特性的全面讲解,对于有志于深入Linux世界的人来说,是一份宝贵的参考资料。
《深入分析Linux内核源代码》是一本专为对Linux操作系统内核感兴趣的读者精心编写的指南,它旨在帮助读者理解Linux内核的工作原理及其背后的源代码。Linux内核是开源软件界的瑰宝,其源代码提供了无尽的学习机会,...
SystemTap是一个强大的Linux内核调试工具,它允许开发者和管理员通过编写脚本来监控和分析Linux系统的行为。它是由Red Hat公司开发和支持的,被广泛用于Linux社区,用以简化内核和用户空间程序的调试过程。SystemTap...
SystemTap是一种用于Linux内核调试和性能分析的工具,它允许用户编写脚本来检查运行中的内核。SystemTap脚本使用一种专门的脚本语言,提供了丰富的功能用于内核数据的采集和分析。本文档详细介绍了SystemTap脚本编写...
8. **同步与并发**:在多线程环境下,内核使用锁、信号量、条件变量等同步机制保证数据一致性。同时,内核提供信号、管道、套接字等多种并发控制手段,让进程间能够安全协作。 9. **模块化设计**:Linux内核允许...
SystemTap脚本是一种专门编写的程序,它定义了当探针触发时应该执行的操作,从而实现在不修改源代码的情况下,对内核行为进行监控。 SystemTap脚本通常包括以下组件: - 事件(Event):事件是探针触发的条件,它...
1. **SystemTap Instrumenting the Linux Kernel for Analyzing Performance and Functional Problems.pdf**:这份文档深入探讨了如何使用systemTap来监控和分析Linux内核的性能和功能问题。它可能涵盖了内核调用...
3. **内存管理**:Linux内核使用分页机制管理内存,包括物理内存和虚拟内存。它实现了页表、伙伴系统、slab分配器等机制,用于高效地分配和回收内存。 4. **文件系统**:文件系统是操作系统中数据存储的关键部分。...
6. **同步与并发**:学习Linux内核中如何实现线程、信号量、互斥锁、条件变量等机制,确保多任务环境下数据的一致性和正确性。 7. **中断与异常处理**:了解中断处理机制,以及如何在内核中处理异常情况,如系统...
7. **并发与同步**:Linux内核中大量使用了锁、信号量、条件变量等同步原语,以保证多线程环境下的正确性。书中将介绍这些同步机制以及死锁和竞态条件的避免策略。 8. **模块化设计**:Linux内核支持模块化,允许...
需要注意的是,SystemTap的使用需要用户有一定的Linux内核和C语言的知识,因为脚本的编写和执行需要与内核直接交互,而其编译过程则依赖于C语言的编译器和链接器。在实际使用SystemTap进行问题诊断之前,用户应该...
《SystemTap Beginners Guide》通过对SystemTap脚本的构建和操作的深入讲解,帮助用户从零开始构建SystemTap监控环境,并逐步深入了解SystemTap的高级特性,最终能够熟练使用SystemTap进行Linux内核级别的调试和性能...
7. **tracepoints**:内核开发者在关键位置预定义的追踪点,供tracing子系统使用,无需修改内核代码即可跟踪。 8. **BPF(Berkeley Packet Filter)**:现代的BPF不仅可以用于网络过滤,还能作为通用的内核安全和...
SystemTap是一个开源的动态跟踪工具,它允许开发者无需重新编译内核或重启系统,就能对Linux内核和运行中的应用程序进行深入分析。SystemTap的基本工作原理是允许用户编写脚本,这些脚本由SystemTap工具编译和运行,...
GDB(GNU调试器)是Linux下最常用的C/C++程序调试工具,它能帮助开发者单步执行代码、设置断点、查看变量值等。通过GDB,你可以对运行中的进程进行附加调试,查看内存状态,甚至调试远程目标。熟悉GDB的基本命令和...