欧意交易所资讯

uncategorized
首页 > 欧意交易所资讯 > 正文内容

Linux 内核追踪工具相关论文总结:LTTng 实现用户空间追踪并与内核空间关联分析

qer1234个月前 (07-21)欧意交易所资讯275

其实这篇文章更像是一篇论文总结博客,而不是纯粹的翻译!所以它并不严格遵循原文的标点符号。你只需要学习知识就可以了。

--------------------------------华丽的分割线---------------------------------------------------------

零、相关知识介绍(跟踪器时间线):

● 1999 年:LTT

● 2005 年:LTTng

● 2005年:

● 2008年:

2009 年:Perf

● 2012 年:LTTng 2.0

LTT:(Linux Trace)是Linux下追踪系统详细运行状态和进程的重要工具,可以追踪和记录系统中特定的事件,这些事件包括:

* 系统调用的进入和退出

* 陷阱/中断(Trap/Irq)的进入和退出

*进程调度事件

* 内核定时器

*进程管理相关事件:创建,唤醒,信号处理等。

* 文件系统相关事件:Open / Read / Write / Seek / Ioctl 等。

*内存管理相关事件:内存分配/释放等。

* 其他事件:IPC//网络等。

此外,Ltt还提供了函数接口用于自定义记录需要追踪的事件类型。

LTTng:(Linux Trace Next),它是一个用于跟踪 Linux 内核、应用程序和库的系统包。LTTng 主要由内核模块和动态链接库(用于跟踪应用程序和动态链接库)组成。它由一个会话守护进程控制,该守护进程接受来自命令行界面的命令。该项目允许将跟踪信息转换为用户可读的日志,并提供一个用于读取跟踪的库,即

LTTng 不仅使用 Linux 内核中的跟踪点 (),还使用各种其他信息源,例如和 Perf(Linux 中的性能监视工具)。这对于调试各种错误非常有用,否则这些错误将非常具有挑战性。例如,这包括并行和实时系统中的性能问题。此外,还可以添加用户定义的工具。LTTng 旨在最大限度地减少性能影响,在没有跟踪的情况下,对系统的影响应该几乎为零。

.0:使用简单的用户界面--lttng命令集成用户空间和内核空间跟踪。还有一些其他功能:

* 多架构和多架构

支持多种发行版和多种架构

* CTF(跟踪)()

有一种常见的跟踪格式

* ,(快速),,CPU单元(PMU)和,

支持探测点、详细的系统调用跟踪、函数跟踪器、CPU 性能监控以及

* 和

如上所述,它为用户空间和内核提供跟踪接口

* 在跟踪中将 添加到“” (例如任何 PMU、pid、ppid、tid、通信名称等)。所有额外的 都是 ,以每个为基础(对于 和 事件 ID,它们是 )。

可以将上下文信息附加到跟踪中的事件(例如 PMU 性能监控单元、pid、ppid、tid、通信名称等)。所有附加信息均收集并放置在跟踪组件中。

1.本文背景如今,多核、集群、嵌入式系统使得Linux系统变得越来越复杂,开发者面临的bug也越来越复杂。这些bug可能只在产品中出现,在调试过程中消失,或者很少出现,只会让系统变慢一点。这些特点使得传统的内核调试工具变得无效。因此需要调试工具来处理这些问题。这些工具必须对系统性能影响很小,这样才能在产品中使用。

内核跟踪就是这样一种工具,它提供了一种了解内核行为和调试用户空间程序和内核故障的有效方法。但是,在某些情况下,内核跟踪是不够的。例如,一个程序可能会发出大量请求,或者它可能有许多线程,这使得仅从内核空间角度进行跟踪非常困难。所以在这种情况下,应用程序空间程序也需要被跟踪。而且要跟踪的用户空间事件必须与内核事件相关。

本文介绍了一个名为 LTTng 的用户空间跟踪器,它可以实现上述功能——同时跟踪用户空间应用程序事件和内核事件。

什么是?跟踪是一种用于了解或监控系统运行情况的技术。跟踪器是用于跟踪的软件。跟踪可用于调试许多错误,包括复杂并行系统或实时系统中的性能问题。

跟踪与日志记录非常相似:它基本上记录系统中的事件。但是,与日志记录相比,它记录事件的级别较低且频率更高。因此,必须优化跟踪以处理大量数据而不会对系统产生重大影响。跟踪通常每秒生成数千个事件。它们通常处理数百万个事件和兆字节到数十千兆字节的数据。

跟踪可能包括操作系统内核的各种事件(例如中断请求处理函数的进入/退出、系统调用的进入/退出、调度情况、网络情况等),也可能包括应用程序的事件。

事件踪迹列表可以像日志文件一样手动读取,但是由于工作量太大,踪迹分析器或读取器需要根据这种大量的数据生成图形或统计数据。这些分析软件需要专门设计来快速处理这种大量的数据。

2. 相关研究*:提供原始用户空间跟踪的工具,可以跟踪系统调用和信号。但会造成较大的性能损耗。不过,它仅限于跟踪部分系统调用和信号,能够以较小的损耗获取跟踪信息。

*: 静态定义跟踪 (SDT) 可用于用户空间应用程序。它在运行时链接器中通过特殊支持实现。[6]

*:好像已经实施了SDT。【2】

* LTTng:多年来已经提供了几种不同的用户空间跟踪技术:

1)——该技术声明了两个新的系统调用,第一个用于注册事件类型并返回事件ID,第二个用于记录事件,它需要事件ID和有效载荷

2)——不需要内核支持,程序把事件写入自己的地址空间缓存中,跟踪器为每个共享缓存的线程创建一个伴随进程,伴随进程使用无锁算法来使用该缓存。

---- 这两种方法都被弃用了,并提出了一种新的替代方案,即一个简单的系统调用,以字符串作为参数。调用它将生成一个以字符串为参数的事件,... 此功能来自 (/debug/ltt/),向此文件写入一个字符将创建一个名为 user- 的事件,事件的参数是字符串。

* :具有类似的功能,称为 。

-----

引用:

【6】Frank. 适用于x86/x64的。

【2】

3.具体实现****重点这里主要介绍一下UST(LTTng,LTTng User Space )的结构,首先我们来看看UST的重要设计目标:

* 需要完全独立于内核空间跟踪器。分析时应关联用户空间跟踪和内核空间跟踪的结果。

* 需要可重入并支持多线程和信号处理事件的跟踪

* 快速路径中没有系统调用

* 追踪结果不可复制

* 需要能够跟踪共享库中的代码

* 检测点需要支持无限多个参数

* 不需要对链接器和编译器进行特殊支持

* 跟踪格式需要紧凑

3.1 跟踪库* - 跟踪库

* - 用于无锁操作数据结构的用户空间读取/复制/更新库 [4]

* - Linux内核提供用户空间API库(如码查看、连接表机制、kref类型机制等)[5]

-------

引用:

【4】与Paul E. Read-Copy- .

【5】—马克和简..

3.2 时间 LTTng 的用户空间跟踪器不依赖于内核,但为了合并内核跟踪和用户空间跟踪进行分析,所有跟踪器的时间戳必须一致(必须来自同一个时钟源)。

合适的时钟源必须具有较高的精度,以保证在核心之间保持一致;还必须保证从用户空间和内核空间访问它的开销很小(因为系统调用的代价很高)。

UST 中使用的时钟源由内核提供,使用 rdtsc 指令直接读取。内核跟踪器也使用此时钟源,读取速度非常快,并且可以在多个内核之间进行同步。

3.3 探测点探测点由内核LTTng使用的两个端口组成:和,它们的使用与内核中相同。

插入非常简单,只需在需要记录事件的地方插入一行代码即可。在下面的代码中我们可以看到 mark 的使用非常类似:

(主要,“%d%s”,v,st);

设计性比较好。从下面的代码可以看出,它基本不包含格式字符串,但是需要一些声明,这些声明一般分别放在C文件和头文件中。因此,它更适合放在永久代码中(需要时,只需修改头文件中的声明即可)。它更适合在调试过程中添加。(用于在调试过程中打印信息)

(v,st);

因此,所有包含探测点的库和可执行文件都需要向跟踪库注册自己的信息,并在可执行文件或动态对象中注册一个列出自身的特殊字段。这可以通过调用添加构造函数的宏来完成。

3.4 缓存机制 缓存机制是无锁 LTTng 算法的一个移植,其设计很大程度上受到 K42 操作系统和 Linux 内核中的 Relay 系统的启发 [8]。事件被写入一个循环的、每个进程的缓冲区,该缓冲区被分成多个子缓冲区。默认情况下,当某个子缓冲区已满时,刷新守护进程会刷新它。在另一种操作模式 () 下,循环缓冲区会被不断覆盖,直到被清除,这对于等待一些罕见的 bug 出现非常有帮助。

每个事件都与一个(通道?)相关联,并且每个进程都有一个显式缓冲区。每个缓冲区的子大小有多种选择。在模式下,它允许通过以较低的速率在缓冲区中放置一些时间来长时间保留这些事件的缓冲区。

缓冲区分配在 V 的共享内存字段中,因此 flush 守护进程可以将它们映射到自己的地址空间中。

写入缓冲区时采用经过形式化验证安全性的无锁算法,保证可重入、多线程、安全性。

-----

【8】Karim, R, R Moore, and M.: 数据从用户空间到用户空间的转换。在 Linux 中,,,,,2003 年。

3.5 跟踪控制用户空间跟踪器肯定需要一个控制方法,例如,我们需要启动/停止跟踪,启用/禁用/列出检测点,以及控制跟踪参数(例如子跟踪器的大小和数量)

一个名为 ust 的辅助应用程序专门用于完成这项工作。它通过 UNIX 与被跟踪程序进行通信,被跟踪进程中的特殊线程负责处理此通信。此线程不会在应用程序启动时启动,这使得 UST 看起来不那么具有侵入性。相反,当跟踪库构造函数为特定信号注册信号处理程序时,监听线程会在收到该信号时启动。此线程在预定义目录中创建,并以进程 ID 命名。

3.6 数据收集 有一个进程负责收集系统中所有被跟踪进程的跟踪数据。这个进程叫做 ustd。收集数据使用一个命令,该命令调用 ustd 并将其定位在被跟踪程序的同一目录中。通过这个命令,ustd 可以接受指令并收集与给定 PID 对应的缓存跟踪数据。

ustd收到命令后会创建一个线程去连接被跟踪的进程,首先如果还没准备好就会发送SIGIO信号,然后会申请共享内存去映射缓存。

在能够使用被跟踪的应用程序后,线程将发送获取下一个子许可的请求。当下一个子许可已满时,将发送回复。收到回复后,线程会将其数据写入跟踪文件(从共享内存段读取)。

3.7 跟踪过早和过晚 UST 使用一种特殊机制来确保跟踪在程序执行时启动:程序运行时带有两个环境变量,这两个环境变量由跟踪库构造函数解析。设置这些环境变量是为了确保在程序进入其 main() 函数时跟踪已启动。

但是,在程序结束时结束跟踪会更加困难:程序可能会崩溃,然后无法通知 ustd 获取最后的子信息,或者更糟的是,程序在跟踪映射其缓存之前就结束了。在前一种情况下,跟踪的最后一部分会丢失;在后一种情况下,整个跟踪都会丢失,因为当用户断开连接时,内核会释放共享内存段。

当程序崩溃时,内核会关闭连接,但 ustd 可以检测到断开连接并在缓存上运行崩溃恢复程序。这个程序会识别哪些子进程有未记录的数据以及可以恢复多少数据。这些数据会被恢复程序附加到跟踪文件中。对于如何识别子进程中的数据是否有效,会用到映射缓存和共享内存段的原子算法中使用的一些计数器。

当程序生命周期太短以至于 ustd 无法映射内存时,就会出现新的问题。(UST 目前不支持这种情况下跟踪)但计划使用析构函数来处理此问题。如果跟踪库的析构函数检测到已记录跟踪但其缓冲区尚未映射,它将延长程序生命周期,以便 ustd 有足够的时间进行映射。

4. 性能测试及其他

在一篇论文里,你通常要测试自己的东西,证明它是有价值的,而且性能还是很不错的!所以这里就不翻译了!这篇文章的主要价值在于看第三节,也就是主要的设计与实现思路。

扫描二维码推送至手机访问。

版权声明:本文由本站发布,如需转载请注明出处。

转载请注明出处https://web-based-papers.com/post/714.html

标签: ustd
分享给朋友:

相关文章

欧意交易所,抢购BTC价格

1.欧意交易所,一触即发! 欧意交易所近日迎来了一波惊人的涨势,让投资者们瞠目结舌。这里没有数字,只有惊喜!让我们一起揭开这场比特币价格的盛宴。 2.看涨还是看跌?别担心,欧意交易所给你答案! 在这个...

虚拟币热度持续高涨,欧意交易所数据披露

欧意交易所近日发布的最新数据显示,虚拟币市场呈现出火爆的行情。各种虚拟币项目如雨后春笋般涌现虚拟币热度持续高涨,欧意交易所数据披露,引起了广大投资者的关注和参与。下面就让我们一起来看看虚拟币行情的最新...

全球交易量最大的交易所 OKX 欧易注册流程详解

全球交易量最大的交易所 OKX 欧易注册流程详解

OKEx(OKX) 1、复制欧易官方链接,从浏览器打开注册,如果一个浏览器打不开,就换一个试试,肯定能打开(注意不能直接从微信打开); 官方链接: 2、开通之后务必点击手机屏幕右上角的“注册”(注意...

okpay 钱包 app 下载:视频播放、游戏介绍、其他软件一应俱全

OKPay钱包app下载游戏介绍 Okpay 钱包 app 下载其他软件 顺便说一句,伊藤优也带她去参加了和服学习班,学习如何穿传统和服。 也不会后悔一直持续到今天! 。 OKPay钱包app下载手机...

全球交易量最大的交易所 OKX 欧易注册教程

全球交易量最大的交易所 OKX 欧易注册教程

OKEx(OKX) 1、复制欧易官方链接,从浏览器打开注册,如果一个浏览器打不开,就换一个试试,肯定能打开(注意不能直接从微信打开); 官方链接: 2、开通之后,务必点击手机屏幕右上角的“注册”(注...

欧意交易所关闭传言引担忧,最新消息与分析在此

欧意交易所关闭传言引担忧,最新消息与分析在此

欧意最新版本 欧易APP最新版本是一个安全、稳定、可靠的数字货币交易平台。 APP下载官网地址 是全球领先的加密货币交易所之一,在业内享有良好的声誉。最近,有传言称 即将关闭,引起一些投资者的担...

加入欧意,探索元宇宙世界!

探索DeFi,DApps, NFTs 和GameFi的世界,和OKX一起创造未来!