blktrace来测量IO性能

 手机用户2502917001 发布于 2023-01-30 13:10

这是blktrace的输出.我无法理解什么是"N 0(00 ..)[multipathd]".我正在测试FS的写IO性能.

我怀疑2,

    N - 是一个动作,但我没有在blktrace.pdf中找到它的用法.

    IOSTAT和BLKTRACE有什么区别.

blktrace o/p:

  8,128  7       11    85.638053443  4009  I   N 0 (00 ..) [multipathd]   
  8,128  7       12    85.638054275  4009  D   N 0 (00 ..) [multipathd]   
  8,128  2       88    89.861199377  5210  A   W 384 + 8 <- (253,0) 384   
  8,128  2       89    89.861199876  5210  Q   W 384 + 8 [i_worker_0]   
  8,128  2       90    89.861202645  5210  G   W 384 + 8 [i_worker_0]   
  8,128  2       91    89.861204604  5210  P   N [i_worker_0]   
  8,128  2       92    89.861205587  5210  I  WA 384 + 8 [i_worker_0]   
  8,128  2       93    89.861210869  5210  D  WA 384 + 8 [i_worker_0]   
  8,128  2       94    89.861499857     0  C  WA 384 + 8 [0]   
  8,128  2       95    99.845910681  5230  A   W 384 + 8 <- (253,0) 384   
  8,128  2       96    99.845911148  5230  Q   W 384 + 8 [i_worker_20]   
  8,128  2       97    99.845913846  5230  G   W 384 + 8 [i_worker_20]   
  8,128  2       98    99.845915910  5230  P   N [i_worker_20]   
  8,128  2       99    99.845917081  5230  I  WA 384 + 8 [i_worker_20]   
  8,128  2      100    99.845922597  5230  D  WA 384 + 8 [i_worker_20]

osgx.. 9

介绍了blktrace http://duch.mimuw.edu.pl/~lichota/09-10/Optymalizacja-open-source/Materialy/10%20-%20Dysk/gelato_ICE06apr_blktrace_brunelle_hp.pdf

IOSTAT和BLKTRACE之间的区别.

检查幻灯片5和6:

iostat实用程序确实提供了与特定设备相关的请求队列的信息

- 队列上的平均I/O时间,合并次数,读/写块数,......

- 但是,它不提供有关perI/O的详细信息

Blktrace.低开销,可配置的内核组件,它为在进入块I/O层的每个I/O上执行的特定操作发出事件

因此,iostat是输出统计数据的通用工具; 和blktrace是捕获和输出有关工具处于活动状态时所服务的所有I/O请求的更多信息的工具.

幻灯片11有一些解码介绍

 8,128  7       11    85.638053443  4009  I   N 0 (00 ..) [multipathd]   
 maj/min cpu  seq#   timestamp_s.ns  pid  ACT RWBS blocks    process

multipathd是内核守护进程,因为它的名称包含在[]大括号中.

blktrace.pdf中描述了默认格式(这里是pdf的来源:http://git.kernel.org/cgit/linux/kernel/git/axboe/blktrace.git/tree/doc/blktrace.tex)

"%D %2c %8s %5T.%9t %5p %2a %3d "

%D将事件的设备主要/次要显示为:\%3d,\% - 3d.%2c CPU ID(2个字符的字段).%8s时间戳的秒部分的序列号%5T.%9t 5-charcter字段和时间戳中纳秒的9字符字段.进程ID的%5p 5个字符的字段.%2a其中一个操作的2个字符字段.RWBS数据的%3d 3字符字段.

操作

C -- complete
D -- issued
I -- inserted
Q -- queued
B -- bounced
M -- back merge
F -- front merge
G -- get request
S -- sleep
P -- plug
U -- unplug
T -- unplug due to timer
X -- split
A -- remap
m -- message

RWBS

'R' - read,
'W' - write 
'D' - block discard operation
'B' for barrier operation or 
'S' for synchronous operation.

所以,对于multipathd,我们有"I"动作="插入"而N为RWBS,而N则很奇怪.在doc中甚至在源代码中都没有N:blkparse_fmt.c - fill_rwbs().为什么?因为它是旧文件和旧源.

在现代内核中,例如,3.12在fill_rwbs中有N:http://sources.debian.net/src/linux/3.12.6-2/kernel/trace/blktrace.c? hl = 1038#L1038

if (t->action == BLK_TN_MESSAGE) {
    rwbs[i++] = 'N';
    goto out;
}

并且blktrace_api.h将 BLK_TN_MESSAGE声明为

#define BLK_TN_MESSAGE        (__BLK_TN_MESSAGE | BLK_TC_ACT(BLK_TC_NOTIFY))

 * Trace categories
    BLK_TC_NOTIFY   = 1 << 10,  /* special message */

 * Notify events.
    __BLK_TN_MESSAGE,       /* Character string message */

因此,'N'是带字符串消息的通知操作.我认为可以看到消息而不是"块"字段.我能够找到添加了TN_MESSAGE的补丁,但没有更新文档(正如计划在bazaar -model中的linux一样)http://lkml.org/lkml/2009/3/27/31 "[ PATCH v2 6/7] blktrace:正确打印出BLK_TN_MESSAGE"2009

1 个回答
  • 介绍了blktrace http://duch.mimuw.edu.pl/~lichota/09-10/Optymalizacja-open-source/Materialy/10%20-%20Dysk/gelato_ICE06apr_blktrace_brunelle_hp.pdf

    IOSTAT和BLKTRACE之间的区别.

    检查幻灯片5和6:

    iostat实用程序确实提供了与特定设备相关的请求队列的信息

    - 队列上的平均I/O时间,合并次数,读/写块数,......

    - 但是,它不提供有关perI/O的详细信息

    Blktrace.低开销,可配置的内核组件,它为在进入块I/O层的每个I/O上执行的特定操作发出事件

    因此,iostat是输出统计数据的通用工具; 和blktrace是捕获和输出有关工具处于活动状态时所服务的所有I/O请求的更多信息的工具.

    幻灯片11有一些解码介绍

     8,128  7       11    85.638053443  4009  I   N 0 (00 ..) [multipathd]   
     maj/min cpu  seq#   timestamp_s.ns  pid  ACT RWBS blocks    process
    

    multipathd是内核守护进程,因为它的名称包含在[]大括号中.

    blktrace.pdf中描述了默认格式(这里是pdf的来源:http://git.kernel.org/cgit/linux/kernel/git/axboe/blktrace.git/tree/doc/blktrace.tex)

    "%D %2c %8s %5T.%9t %5p %2a %3d "
    

    %D将事件的设备主要/次要显示为:\%3d,\% - 3d.%2c CPU ID(2个字符的字段).%8s时间戳的秒部分的序列号%5T.%9t 5-charcter字段和时间戳中纳秒的9字符字段.进程ID的%5p 5个字符的字段.%2a其中一个操作的2个字符字段.RWBS数据的%3d 3字符字段.

    操作

    C -- complete
    D -- issued
    I -- inserted
    Q -- queued
    B -- bounced
    M -- back merge
    F -- front merge
    G -- get request
    S -- sleep
    P -- plug
    U -- unplug
    T -- unplug due to timer
    X -- split
    A -- remap
    m -- message
    

    RWBS

    'R' - read,
    'W' - write 
    'D' - block discard operation
    'B' for barrier operation or 
    'S' for synchronous operation.
    

    所以,对于multipathd,我们有"I"动作="插入"而N为RWBS,而N则很奇怪.在doc中甚至在源代码中都没有N:blkparse_fmt.c - fill_rwbs().为什么?因为它是旧文件和旧源.

    在现代内核中,例如,3.12在fill_rwbs中有N:http://sources.debian.net/src/linux/3.12.6-2/kernel/trace/blktrace.c? hl = 1038#L1038

    if (t->action == BLK_TN_MESSAGE) {
        rwbs[i++] = 'N';
        goto out;
    }
    

    并且blktrace_api.h将 BLK_TN_MESSAGE声明为

    #define BLK_TN_MESSAGE        (__BLK_TN_MESSAGE | BLK_TC_ACT(BLK_TC_NOTIFY))
    
     * Trace categories
        BLK_TC_NOTIFY   = 1 << 10,  /* special message */
    
     * Notify events.
        __BLK_TN_MESSAGE,       /* Character string message */
    

    因此,'N'是带字符串消息的通知操作.我认为可以看到消息而不是"块"字段.我能够找到添加了TN_MESSAGE的补丁,但没有更新文档(正如计划在bazaar -model中的linux一样)http://lkml.org/lkml/2009/3/27/31 "[ PATCH v2 6/7] blktrace:正确打印出BLK_TN_MESSAGE"2009

    2023-01-30 13:14 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有