Update Markdown string.
This commit is contained in:
parent
c5de6c85a7
commit
6cd798719d
|
|
@ -54,144 +54,75 @@ Ethtool命令显示的信息来源于网卡驱动层,即TCP/ip协议的链路
|
|||
网卡驱动负责实现(部分)这些函数,并将其封装入`ethtool_ops`结构体,为网络核心层提供统一的调用接口。因此,不同的网卡驱动会给应用层返回不同的信息。`Ethtool命令选项`、`struct ethtool_ops成员函数`、`Ethtool命令显示参数的来源`,三者间的对应关系如下表所示:
|
||||
|
||||
<table>
|
||||
|
||||
<tbody>
|
||||
|
||||
<tr>
|
||||
|
||||
<th style="width: 100px;">命令选项</th>
|
||||
|
||||
<th>struct ethtool_ops成员函数</th>
|
||||
|
||||
<th>Ethtool命令显示参数的来源(以网卡驱动BNX2为例)</th>
|
||||
|
||||
</tr>
|
||||
|
||||
<th>Ethtool命令显示参数的来源(以网卡驱动BNX2为例)</th></tr>
|
||||
<tr>
|
||||
|
||||
<td>无 -s</td>
|
||||
|
||||
<td>get_settingsget_wol get_msglevel get_link set_settings set_wol set_msglevel</td>
|
||||
|
||||
<td>从网卡寄存器中获得网卡速度等信息,可配置。</td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
||||
<td>-a -A</td>
|
||||
|
||||
<td>get_pauseparam set_pauseparam</td>
|
||||
|
||||
<td>从网卡寄存器中获得Autonegotiate/RX/TX模块的状态:on oroff,可配置。</td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
||||
<td>-c -C</td>
|
||||
|
||||
<td>get_coalesceset_coalesce</td>
|
||||
|
||||
<td>从网卡寄存器中获得coalescing参数:TX/RX一个数据包后,推迟发生TX/RX中断的时间(us)/数据包个数。—减小该值可以提高网卡的响应时间。 当rx-usecs&rx-frames同时被设为0时,RX中断停止。 当tx-usecs&tx-frames同时被设为0时,TX中断停止。</td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
||||
<td>-g -G</td>
|
||||
|
||||
<td>get_ringparam set_ringparam</td>
|
||||
|
||||
<td>除当前TX/RX ring的值(从网卡寄存器中读取得到,可配置)外,其它为网卡bnx2自己固定的信息。</td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
||||
<td>-k -K</td>
|
||||
|
||||
<td>get_rx_csumget_tx_csum get_sg get_tso set_rx_csum set_tx_csum set_sg set_tso</td>
|
||||
|
||||
<td>显示信息从保存该状态的变量中读取得到,没有对应的寄存器。因此,TX/RX校验等模块一直处于on状态,实际上是无法修改的。</td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
||||
<td>-i</td>
|
||||
|
||||
<td>get_drvinfo[self_test_count, get_stats_coun,t get_regs_len, get_eeprom_len]</td>
|
||||
|
||||
<td>网卡bnx2自己固定的信息,如:
|
||||
——————————————————–
|
||||
driver: bnx2 version: 1.4.30 firmware-version: 1.8.0.5 bus-info: 0000:09:00.0
|
||||
——————————————————–</td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
||||
<td>-d</td>
|
||||
|
||||
<td>get_drvinfoget_regs</td>
|
||||
|
||||
<td>不支持,即bnx2中没有实现函数get_regs。</td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
||||
<td>-e -E</td>
|
||||
|
||||
<td>get_eepromset_eeprom</td>
|
||||
|
||||
<td>不支持,即bnx2中没有实现函数get_eeprom。</td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
||||
<td>-r</td>
|
||||
|
||||
<td>nway_reset</td>
|
||||
|
||||
<td>配置网卡MII_BMCR寄存器,重启Auto negotiation模块。</td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
||||
<td>-p</td>
|
||||
|
||||
<td>phys_id</td>
|
||||
|
||||
<td>配置网卡BNX2_EMAC_LED寄存器,实现LED闪功能。</td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
||||
<td>-t</td>
|
||||
|
||||
<td>self_test</td>
|
||||
|
||||
<td>通过配置网卡寄存器,逐一测试网卡的硬件模块:registers,memory,loopback,Link stat,interrupt。</td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
||||
<td>-S</td>
|
||||
|
||||
<td>get_ethtool_stats</td>
|
||||
|
||||
<td>显示信息来源于网卡驱动中的结构体变量stats_blk。(网卡通过DMA方式,将寄存器BNX2_HC_STATISTICS _ADDR_L和BNX2_HC_STATISTICS_ADDR_H中的数据实时地读取到结构体变量struct statistics_block *stats_blk中。) —显示的数据都是从网卡寄存器中统计得到的,各项的含义需查询网卡(芯片)手册。</td>
|
||||
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
|
||||
由上可见,ethtool命令用于显示/配置网卡硬件(寄存器)。
|
||||
|
|
|
|||
|
|
@ -23,90 +23,20 @@ gdb(选项)(参数)
|
|||
-s:设置读取的符号表文件。
|
||||
```
|
||||
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>命令</th>
|
||||
<th>解释</th>
|
||||
<th>示例</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>file <文件名></td>
|
||||
<td>加载被调试的可执行程序文件。
|
||||
因为一般都在被调试程序所在目录下执行GDB,因而文本名不需要带路径。</td>
|
||||
<td>(gdb) file gdb-sample</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>r</td>
|
||||
<td>Run的简写,运行被调试的程序。
|
||||
如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处。</td>
|
||||
<td>(gdb) r</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>c</td>
|
||||
<td>Continue的简写,继续执行被调试程序,直至下一个断点或程序结束。</td>
|
||||
<td>(gdb) c</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>b <行号>
|
||||
b <函数名称>
|
||||
b *<函数名称>
|
||||
b *<代码地址> d [编号]</td>
|
||||
|
||||
<td>b: Breakpoint的简写,设置断点。两可以使用“行号”“函数名称”“执行地址”等方式指定断点位置。
|
||||
其中在函数名称前面加“*”符号表示将断点设置在“由编译器生成的prolog代码处”。如果不了解汇编,可以不予理会此用法。 d: Delete breakpoint的简写,删除指定编号的某个断点,或删除所有断点。断点编号从1开始递增。</td>
|
||||
<td>(gdb) b 8
|
||||
(gdb) b main
|
||||
(gdb) b *main
|
||||
(gdb) b *0x804835c (gdb) d</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>s, n</td>
|
||||
<td>s: 执行一行源程序代码,如果此行代码中有函数调用,则进入该函数;
|
||||
n: 执行一行源程序代码,此行代码中的函数调用也一并执行。 s 相当于其它调试器中的“Step Into (单步跟踪进入)”;
|
||||
n 相当于其它调试器中的“Step Over (单步跟踪)”。 这两个命令必须在有源代码调试信息的情况下才可以使用(GCC编译时使用“-g”参数)。</td>
|
||||
<td>(gdb) s
|
||||
(gdb) n</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>si, ni</td>
|
||||
<td>si命令类似于s命令,ni命令类似于n命令。所不同的是,这两个命令(si/ni)所针对的是汇编指令,而s/n针对的是源代码。</td>
|
||||
<td>(gdb) si
|
||||
(gdb) ni</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>p <变量名称></td>
|
||||
<td>Print的简写,显示指定变量(临时变量或全局变量)的值。</td>
|
||||
<td>(gdb) p i
|
||||
(gdb) p nGlobalVar</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>display ... undisplay <编号></td>
|
||||
<td>display,设置程序中断后欲显示的数据及其格式。
|
||||
例如,如果希望每次程序中断后可以看到即将被执行的下一条汇编指令,可以使用命令
|
||||
“display /i $pc”
|
||||
其中 $pc 代表当前汇编指令,/i 表示以十六进行显示。当需要关心汇编代码时,此命令相当有用。 undispaly,取消先前的display设置,编号从1开始递增。</td>
|
||||
<td>(gdb) display /i $pc (gdb) undisplay 1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>i</td>
|
||||
<td>info的简写,用于显示各类信息,详情请查阅“help i”。</td>
|
||||
<td>(gdb) i r</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>q</td>
|
||||
<td>Quit的简写,退出GDB调试环境。</td>
|
||||
<td>(gdb) q</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>help [命令名称]</td>
|
||||
<td>GDB帮助命令,提供对GDB名种命令的解释说明。
|
||||
如果指定了“命令名称”参数,则显示该命令的详细说明;如果没有指定参数,则分类显示所有GDB命令,供用户进一步浏览和查询。</td>
|
||||
<td>(gdb) help</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
命令 | 解释 | 示例
|
||||
--- | --- | ---
|
||||
file <文件名> | 加载被调试的可执行程序文件。<br /> 因为一般都在被调试程序所在目录下执行GDB,因而文本名不需要带路径。 | (gdb) file gdb-sample
|
||||
r | Run的简写,运行被调试的程序。<br /> 如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处。 | (gdb) r
|
||||
c | Continue的简写,继续执行被调试程序,直至下一个断点或程序结束。 | (gdb) c
|
||||
b <行号><br />b <函数名称><br />b *<函数名称><br />b *<代码地址> d [编号] | b: Breakpoint的简写,设置断点。两可以使用“行号”“函数名称”“执行地址”等方式指定断点位置。 <br /> 其中在函数名称前面加“*”符号表示将断点设置在“由编译器生成的prolog代码处”。如果不了解汇编,可以不予理会此用法。 d: Delete breakpoint的简写,删除指定编号的某个断点,或删除所有断点。断点编号从1开始递增。 | (gdb) b 8(gdb) b main <br /> (gdb) b *main <br /> (gdb) b *0x804835c (gdb) d
|
||||
s, n | s: 执行一行源程序代码,如果此行代码中有函数调用,则进入该函数;<br /> n: 执行一行源程序代码,此行代码中的函数调用也一并执行。 s 相当于其它调试器中的“Step Into (单步跟踪进入)”;<br /> n 相当于其它调试器中的“Step Over (单步跟踪)”。 这两个命令必须在有源代码调试信息的情况下才可以使用(GCC编译时使用“-g”参数)。 | (gdb) s <br /> (gdb) n
|
||||
si, ni | si命令类似于s命令,ni命令类似于n命令。所不同的是,这两个命令(si/ni)所针对的是汇编指令,而s/n针对的是源代码。 | (gdb) si <br />(gdb) ni
|
||||
p <变量名称> | Print的简写,显示指定变量(临时变量或全局变量)的值。 | (gdb) p i <br /> (gdb) p nGlobalVar
|
||||
display ... undisplay <编号> | display,设置程序中断后欲显示的数据及其格式。 <br /> 例如,如果希望每次程序中断后可以看到即将被执行的下一条汇编指令,可以使用命令 <br /> “display /i $pc” <br /> 其中 $pc 代表当前汇编指令,/i 表示以十六进行显示。当需要关心汇编代码时,此命令相当有用。 undispaly,取消先前的display设置,编号从1开始递增。 | (gdb) display /i $pc (gdb) undisplay 1
|
||||
i | info的简写,用于显示各类信息,详情请查阅“help i”。 | (gdb) i r
|
||||
q | Quit的简写,退出GDB调试环境。 | (gdb) q
|
||||
help [命令名称] | GDB帮助命令,提供对GDB名种命令的解释说明。<br /> 如果指定了“命令名称”参数,则显示该命令的详细说明;如果没有指定参数,则分类显示所有GDB命令,供用户进一步浏览和查询。 | (gdb) help
|
||||
|
||||
### 参数
|
||||
|
||||
|
|
|
|||
|
|
@ -106,48 +106,17 @@ path=$1
|
|||
* `--timefmt`是指定时间的输出格式。
|
||||
* `--format`指定文件变化的详细信息。
|
||||
|
||||
### # 可监听的事件
|
||||
|
||||
<table border="0" height="193" style="width: 100%;" width="74">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>事件</th>
|
||||
<th>描述</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>access</td>
|
||||
<td> **访问** ,读取文件。</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>modify</td>
|
||||
<td> **修改** ,文件内容被修改。</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>attrib</td>
|
||||
<td> **属性** ,文件元数据被修改。</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>move</td>
|
||||
<td> **移动** ,对文件进行移动操作。</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>create</td>
|
||||
<td> **创建** ,生成新文件</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>open</td>
|
||||
<td> **打开** ,对文件进行打开操作。</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>close</td>
|
||||
<td> **关闭** ,对文件进行关闭操作。</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>delete</td>
|
||||
<td> **删除** ,文件被删除。</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
### 可监听的事件
|
||||
|
||||
事件 | 描述
|
||||
--- | ---
|
||||
access | **访问** ,读取文件。
|
||||
modify | **修改** ,文件内容被修改。
|
||||
attrib | **属性** ,文件元数据被修改。
|
||||
move | **移动** ,对文件进行移动操作。
|
||||
create | **创建** ,生成新文件
|
||||
open | **打开** ,对文件进行打开操作。
|
||||
close | **关闭** ,对文件进行关闭操作。
|
||||
delete | **删除** ,文件被删除。
|
||||
|
||||
<!-- Linux命令行搜索引擎:https://jaywcjlove.github.io/linux-command/ -->
|
||||
|
|
@ -53,70 +53,23 @@ sda1 0.02 0.08
|
|||
|
||||
详细说明:第二行是系统信息和监测时间,第三行和第四行显示CPU使用情况(具体内容和mpstat命令相同)。这里主要关注后面I/O输出的信息,如下所示:
|
||||
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>标示</th>
|
||||
<th>说明</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Device</td>
|
||||
<td>监测设备名称</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>rrqm/s</td>
|
||||
<td>每秒需要读取需求的数量</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>wrqm/s</td>
|
||||
<td>每秒需要写入需求的数量</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>r/s </td>
|
||||
<td>每秒实际读取需求的数量</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>w/s</td>
|
||||
<td>每秒实际写入需求的数量</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>rsec/s</td>
|
||||
<td>每秒读取区段的数量</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>wsec/s</td>
|
||||
<td>每秒写入区段的数量</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>rkB/s</td>
|
||||
<td>每秒实际读取的大小,单位为KB</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>wkB/s</td>
|
||||
<td>每秒实际写入的大小,单位为KB</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>avgrq-sz</td>
|
||||
<td>需求的平均大小区段</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>avgqu-sz</td>
|
||||
<td>需求的平均队列长度</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>await</td>
|
||||
<td>等待I/O平均的时间(milliseconds)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>svctm</td>
|
||||
<td>I/O需求完成的平均时间</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>%util</td>
|
||||
<td>被I/O需求消耗的CPU百分比</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
标示 | 说明
|
||||
--- | ---
|
||||
Device | 监测设备名称
|
||||
rrqm/s | 每秒需要读取需求的数量
|
||||
wrqm/s | 每秒需要写入需求的数量
|
||||
r/s | 每秒实际读取需求的数量
|
||||
w/s | 每秒实际写入需求的数量
|
||||
rsec/s | 每秒读取区段的数量
|
||||
wsec/s | 每秒写入区段的数量
|
||||
rkB/s | 每秒实际读取的大小,单位为KB
|
||||
wkB/s | 每秒实际写入的大小,单位为KB
|
||||
avgrq-sz | 需求的平均大小区段
|
||||
avgqu-sz | 需求的平均队列长度
|
||||
await | 等待I/O平均的时间(milliseconds)
|
||||
svctm | I/O需求完成的平均时间
|
||||
%util | 被I/O需求消耗的CPU百分比
|
||||
|
||||
|
||||
<!-- Linux命令行搜索引擎:https://jaywcjlove.github.io/linux-command/ -->
|
||||
|
|
@ -239,32 +239,11 @@ exit_group(0) = ?
|
|||
|
||||
这是一个很有用的功能,strace会将每次系统调用的发生时间记录下来,只要使用-t/tt/ttt三个参数就可以看到效果了,具体的例子可以自己去尝试。
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>参数名</th>
|
||||
<th>输出样式</th>
|
||||
<th>说明</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>-t</td>
|
||||
<td>10:33:04 exit_group(0)</td>
|
||||
<td>输出结果精确到秒</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-tt</td>
|
||||
<td>10:33:48.159682 exit_group(0)</td>
|
||||
<td>输出结果精确到微妙</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-ttt</td>
|
||||
<td>1262169244.788478 exit_group(0)</td>
|
||||
<td>精确到微妙,而且时间表示为unix时间戳</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
参数名 | 输出样式 | 说明
|
||||
--- | --- | ---
|
||||
-t | 10:33:04 exit_group(0) | 输出结果精确到秒
|
||||
-tt | 10:33:48.159682 exit_group(0) | 输出结果精确到微妙
|
||||
-ttt | 1262169244.788478 exit_group(0) | 精确到微妙,而且时间表示为unix时间戳
|
||||
|
||||
**截断输出**
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue