4. 操作系统
从本文开始我们将进入Linux性能优化的第二阶段,操作系统部分。操作系统原理是复杂的,不可能也没有能力把操作系统都将清楚。我们会列出每个部分相关的关键术语,并就其中与性能优化相关的关键部分进行讲解。本文是一个关于操作系统和内核知识的概览,为后面做一点准备。
从本文开始我们将进入Linux性能优化的第二阶段,操作系统部分。操作系统原理是复杂的,不可能也没有能力把操作系统都将清楚。我们会列出每个部分相关的关键术语,并就其中与性能优化相关的关键部分进行讲解。本文是一个关于操作系统和内核知识的概览,为后面做一点准备。
《性能之巅》内对 Dtrace 和 Systemtap 的语法做了一个对比,对于学习二者是一个不错的资源,现整理如下。
下面是一份 DTrace 转换成 Systemtap 的简易指南,包括如下几个部分
本节我们来看看如何使用 Systemtap 来追踪 Python 程序的执行。
从 Python 3.6 开始,CPython 可以使用嵌入式“标记”,也称为“探测器”,使得可以通过 DTrace 或 SystemTap 来追踪 Cpython。
本节我们继续来学习 Systemtap 的使用 – 用户空间的动态追踪
SystemTap从0.6版本开始也支持探测用户空间的进程。SystemTap可以探测用户空间进程内函数的调用和退出,可以探测用户代码中预定义的标记,可以探测用户进程的事件。
本节我们继续来学习 Systemtap 的使用 – 内核的动态追踪

本节我们来看如何获取内核空间中的变量,包括:
跟内核代码相关的事件,如kernel.function(“function”)和kernel.statement(“statement”),允许使用目标变量获取这部分代码中可访问到的变量的值。stap -L 可以列出特定探测点下可用的目标变量。
本节我们来看看 stap 脚本的基本语法。
SystemTap脚本运行时,会启动一个对应的SystemTap会话。整个会话大致流程如下:
tapsets是一些包含常用的探针和函数的内置脚本,你可以在SystemTap脚本中复用它们。当用户运行一个SystemTap脚本时,SystemTap会检测脚本中的事件和处理程序,并在翻译脚本成C代码之前,加载用到的tapset。