EZIOTracer Unifying Kernel and User Space I/O Tracing for Data-Intensive Applications

EZIOTracer Unifying Kernel and User Space I/O Tracing for Data-Intensive Applications
复制标题

EZIOTracer 统一数据密集型应用程序的内核和用户空间 I/O 跟踪

DOI:
10.1145/3469379.3469391
复制
发表时间:
2021
期刊:
ACM SIGOPS Operating Systems Review
影响因子:
--
通讯作者:
Islam Naas M
Islam Naas M
中科院分区:
--
文献类型:
--
作者:
Islam Naas M

文献摘要

相似文献

跟踪是一种用于评估、调查和建模当今存储系统性能的流行方法。随着现代存储应用程序/系统复杂性的增加,跟踪变得至关重要,这些应用程序/系统正在处理不断增加的数据量并受到极端性能要求的影响。有许多跟踪工具专注于用户级或内核级,但我们观察到缺乏一个统一的跟踪器针对这两个级别:这妨碍了现代应用程序的存储性能配置文件的全面理解。在本文中,我们提出了EZIOTracer,一个统一的I/O跟踪(Linux)内核和用户空间,针对数据密集型应用程序。EZIOTracer由一个用户界面和一个内核空间跟踪器组成,并补充了一个跟踪分析框架,该框架能够合并两个跟踪器的输出,特别是将用户级事件与内核级事件相关联,反之亦然。在内核方面,EZIOTracer依赖eBPF来提供安全、低开销、低内存占用和灵活的跟踪功能。我们使用FIO基准测试证明了EZIOTracer通过在内核和用户级别记录相关事件来跟踪I/O性能问题的能力。我们表明,这可以实现一个相对较低的开销,范围从2%到26%,这取决于I/O强度。
Tracing is a popular method for evaluating, investigating, and modeling the performance of today's storage systems. Tracing has become crucial with the increase in complexity of modern storage applications/systems, that are manipulating an ever-increasing amount of data and are subject to extreme performance requirements. There exists many tracing tools focusing either on the user-level or the kernel-level, however we observe the lack of a unified tracer targeting both levels: this prevents a comprehensive understanding of modern applications' storage performance profiles. In this paper, we present EZIOTracer, a unified I/O tracer for both (Linux) kernel and user spaces, targeting data intensive applications. EZIOTracer is composed of a userland as well as a kernel space tracer, complemented with a trace analysis framework able to merge the output of the two tracers, and in particular to relate user-level events to kernel-level ones, and vice-versa. On the kernel side, EZIOTracer relies on eBPF to offer safe, low-overhead, low memory footprint, and flexible tracing capabilities. We demonstrate using FIO benchmark the ability of EZIOTracer to track down I/O performance issues by relating events recorded at both the kernel and user levels. We show that this can be achieved with a relatively low overhead that ranges from 2% to 26% depending on the I/O intensity.