问题标签 [blktrace]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
169 浏览

aio - Linux io_submit 延迟大

我发现一个带有 io_submit 延迟的非常奇怪的问题。

如果我编写一个循环调用 io_submit 5 次,如下所示:

io_submit 的延迟都非常小,除了第一个

但是如果我在每次调用 io_submit 后睡觉,就像下面这样:

io_submit 的延迟都非常大:

块设备是 nvme ssd。我曾尝试使用 blktrace,但似乎 blktrace 与 nvme 有一些问题,仅捕获事件 'Q' 和 'A',这不足以弄清楚这个问题。我也尝试使用 systemtap 来跟踪 io_submit 代码中的某个点,但这使得 io_submit 的延迟变得太大,接近 50us,这使得上层情况之间的差异不明显。

有谁知道为什么会这样或给出一些建议来解决这个问题。

新进展:

使用 systemptap,我发现延迟的增加来自代码路径的许多地方,而不是一个地方。两件事情。首先,上下文切换带来的cpu cache miss,睡眠情况导致更多的上下文切换;其次,代码路径分配然后释放内存,如果不休眠运行,本轮释放的内存可以在下一轮重用。而在睡眠状态下,刚刚空闲的内存可能会被其他线程使用。

0 投票
1 回答
273 浏览

blktrace - blkparse 如何显示 IO 调度程序消息

blktrace 版本 v2.0.0

注意:在blkparse输出中,m第六列中的行表示调度程序信息。

  1. 在 Ubuntu 16.04ext4上,我可以看到 IO Scheduler 消息,blktrace -d /dev/sda -o - | blkparse -i -

    /li>
  2. 在 CentOS 7.4 上xfs,我看不到 IO 调度程序消息,blktrace -d /dev/sdb -o - | blkparse -i -

    /li>
0 投票
0 回答
745 浏览

kubernetes - 如何在 GKE 上为本地 SSD 磁盘获得更好的性能?

我正在 GKE 本地 SSD 磁盘上使用 TiDB 运行 sysbench OLTP 基准测试。但是与 GKE 持久 SSD 磁盘相比,我的性能很差。默认情况下,如何在 GKE 本地 SSD 磁盘上获得预期的 IOPS 性能?

我已经使用引擎运行了 TiDB OLTP 基准测试和 fio 基准测试,psync但结果都显示本地 SSD 磁盘上的 IOPS 比持久 SSD 磁盘上的要差。而且我还进行了彻底的 blktrace 分析。我运行的 fio 命令是:

本地 SSD 磁盘和永久性磁盘的 fio 基准测试结果为:

blktrace btt 结果是:

根据优化指南,我已经使用nobarrier选项手动重新安装了磁盘,blktrace btt 结果看起来很正常。

但是,根据RedHat 的文档nobarrier挂载选项对性能的负面影响应该很小(大约 3%),不建议在虚拟机上配置的存储上使用它。

在 Red Hat Enterprise Linux 6 中不再推荐使用 nobarrier,因为写屏障对性能的负面影响可以忽略不计(大约 3%)。写屏障的好处通常超过禁用它们的性能好处。此外,永远不应在虚拟机上配置的存储上使用 nobarrier 选项。

除了该nobarrier选项之外,本地 SSD 磁盘优化指南还建议安装Linux 访客环境,但指出它已安装在较新的 VM 映像上。但是,我发现它没有安装在 GKE 节点上。

于是我手动安装了Linux Guest Environment并再次测试,这次btt结果看起来和预期一样:

那么如何在不进行额外调优的情况下,在默认情况下在 GKE 本地 SSD 磁盘上获得预期的 IOPS 性能呢?

0 投票
1 回答
185 浏览

io - 从 fio 测试中理解 blktrace

我购买了具有 8 个 vCPU、16G 内存和 500G ssd 卷(由 ceph rbd 支持)的虚拟服务器。然后我用fio来测试服务器的IO性能。为了更好的理解fio结果,在测试的过程中,我也使用了blktrace来捕获block layer IO trace。

  1. 顺序写

    fio --filename=/dev/vdc --ioengine=libaio --bs=4k --rw=write --size=8G --iodepth=64 --numjobs=8 --direct=1 --runtime=960 - -name=seqwrite --group_reporting

seqwrite 的 fio 输出 seqwrite 的 解析 blktrace 输出

  1. 朗读

    fio --filename=/dev/vdc --ioengine=libaio --bs=4k --rw=randread --size=8G --iodepth=64 --numjobs=8 --direct=1 --runtime=960 - -name=randread --group_reporting

randread 的 fio 输出 randread 的 解析 blktrace 输出

我想了解的是 seqwrite 和 randread 在块层的区别。

  1. 为什么 randread 有很大一部分 I2D 而 seqwrite 没有?
  2. 为什么randread没有Q2M?
0 投票
1 回答
99 浏览

android - 如何以编程方式在android中使用blktrace命令执行shell脚本?

我有一个安装了 blktrace 的 root android 设备。我想从我的应用程序中执行一个 shell 脚本来测试 blktrace。我尝试了一些在互联网上的一些资源中找到的解决方案。我已经尝试过这两种方法来执行 shell 脚本

方法一

方法二

这些方法适用于如下 shell 命令并显示预期输出

我想执行一些命令,blktrace -d /dev/block/sda -w 30 -D /sdcard/blktrace_app_runs但它不通过我的应用程序执行。但是我可以通过具有 su root 权限的 adb shell 完美地执行这个命令。

如何执行blktrace -d /dev/block/sda -w 30 -D /sdcard/blktrace_app_runs我的应用程序中的命令?

0 投票
0 回答
22 浏览

android - 为什么 blktrace 只收集 Android 设备上的 Q 和 C 事件

我尝试在 Android 设备上调整 AndroBench 性能。所以我在 Android 设备上使用 blktrace 和下面的 shell 命令:

blktrace -d /dev/block/dm-10 -o - | blkparse -i -

但我只能得到QC事件作为下面的输出。我希望输出显示不同的事件。为什么没有捕获其他事件?例如,DIM