diff --git a/translated/tech/20140718 Linux Kernel Testing and Debugging 3.md b/published/20140718 Linux Kernel Testing and Debugging 3.md similarity index 72% rename from translated/tech/20140718 Linux Kernel Testing and Debugging 3.md rename to published/20140718 Linux Kernel Testing and Debugging 3.md index 0ba9c4a18c..ed93f5485e 100644 --- a/translated/tech/20140718 Linux Kernel Testing and Debugging 3.md +++ b/published/20140718 Linux Kernel Testing and Debugging 3.md @@ -1,4 +1,4 @@ -Linux 内核测试与调试 - 3 +Linux 内核测试与调试(3) ================================================================================ ### 基本测试 ### @@ -27,7 +27,7 @@ Linux 内核测试与调试 - 3 - dmesg -t -k - dmesg -t -下面的脚本运行了上面的命令,并且将输出保存起来,以便与老的内核的 dmesg 输出作比较(LCTT:老内核的 dmesg 输出在本系列的第一篇文章中有介绍)。然后运行 diff 命令,查看新老内核 dmesg 日志之间的不同。脚本需要输入老内核版本号,如果不输入参数,它只会生成新内核的 dmesg 日志文件后直接退出,不再作比较(LCTT:话是这么说没错,但点开脚本一看,没输参数的话,这货会直接退出,连新内核的 dmesg 日志也不会保存的)。如果 dmesg 日志有新的警告信息,表示新发布的内核有漏网之鱼(LCTT:嗯,漏网之 bug 会更好理解些么?),这些 bug 逃过了自测和系统测试。你要看看,那些警告信息后面有没有栈跟踪信息?也许这里有很多问题需要你进一步调查分析。 +下面的脚本运行了上面的命令,并且将输出保存起来,以便与老的内核的 dmesg 输出作比较(LCTT:老内核的 dmesg 输出在本系列的[第二篇文章][3]中有介绍)。然后运行 diff 命令,查看新老内核 dmesg 日志之间的不同。这个脚本需要输入老内核版本号,如果不输入参数,它只会生成新内核的 dmesg 日志文件后直接退出,不再作比较(LCTT:话是这么说没错,但点开脚本一看,没输参数的话,这货会直接退出,连新内核的 dmesg 日志也不会保存的)。如果 dmesg 日志有新的警告信息,表示新发布的内核有漏网之“虫”,这些 bug 逃过了自测和系统测试。你要看看,那些警告信息后面有没有栈跟踪信息?也许这里有很多问题需要你进一步调查分析。 - [**dmesg 测试脚本**][1] @@ -67,40 +67,40 @@ ktest 是一个自动测试套件,它可以提供编译安装启动内核一 failslab (默认选项) - 产生 slab 分配错误。作用于 kmalloc(), kmem_cache_alloc() 等函数(LCTT:产生的结果是调用这些函数就会返回失败,可以模拟程序分不到内存时是否还能稳定运行下去)。 +> 产生 slab 分配错误。作用于 kmalloc(), kmem_cache_alloc() 等函数(LCTT:产生的结果是调用这些函数就会返回失败,可以模拟程序分不到内存时是否还能稳定运行下去)。 -fail_page_alloc +fail\_page\_alloc - 产生内存页分配的错误。作用于 alloc_pages(), get_free_pages() 等函数(LCTT:同上,调用这些函数,返回错误)。 +> 产生内存页分配的错误。作用于 alloc_pages(), get_free_pages() 等函数(LCTT:同上,调用这些函数,返回错误)。 -fail_make_request +fail\_make\_request - 对满足条件(可以设置 /sys/block//make-it-fail 或 /sys/block///make-it-fail 文件)的磁盘产生 IO 错误,作用于 generic_make_request() 函数(LCTT:所有针对这块磁盘的读或写请求都会出错)。 +> 对满足条件(可以设置 /sys/block//make-it-fail 或 /sys/block///make-it-fail 文件)的磁盘产生 IO 错误,作用于 generic_make_request() 函数(LCTT:所有针对这块磁盘的读或写请求都会出错)。 -fail_mmc_request +fail\_mmc\_request - 对满足条件(可以设置 /sys/kernel/debug/mmc0/fail_mmc_request 这个 debugfs 属性)的磁盘产生 MMC 数据错误。 +> 对满足条件(可以设置 /sys/kernel/debug/mmc0/fail\_mmc\_request 这个 debugfs 属性)的磁盘产生 MMC 数据错误。 你可以自己配置 fault-injection 套件的功能。fault-inject-debugfs 内核模块在系统运行时会在 debugfs 文件系统下面提供一些属性文件。你可以指定出错的概率,指定两个错误之间的时间间隔,当然本套件还能提供更多其他功能,具体请查看 Documentation/fault-injection/fault-injection.txt。 Boot 选项可以让你的系统在 debugfs 文件系统起来之前就可以产生错误,下面列出几个 boot 选项: - failslab= -- fail_page_alloc= -- fail_make_request= -- mmc_core.fail_request=[interval],[probability],[space],[times] +- fail\_page_alloc= +- fail\_make\_request= +- mmc\_core.fail\_request=[interval],[probability],[space],[times] fault-injection 套件提供接口,以便增加新的功能。下面简单介绍下增加新功能的步骤,详细信息请参考上面提到过的文档: -使用 DECLARE_FAULT_INJECTION(name) 定义默认属性; +使用 DECLARE\_FAULT\_INJECTION(name) 定义默认属性; -> 详细信息可查看 fault-inject.h 中定义的 struct fault_attr 结构体。 +> 详细信息可查看 fault-inject.h 中定义的 struct fault\_attr 结构体。 配置 fault 属性,新建一个 boot 选项; -> 这步可以使用 setup_fault_attr(attr, str) 函数完成,为了能在系统启动的早期产生错误,添加一个 boot 选项这一步是必须要有的。 +> 这步可以使用 setup\_fault\_attr(attr, str) 函数完成,为了能在系统启动的早期产生错误,添加一个 boot 选项这一步是必须要有的。 添加 debugfs 属性; -> 使用 fault_create_debugfs_attr(name, parent, attr) 函数,为新功能添加新的 debugfs 属性。 +> 使用 fault\_create\_debugfs\_attr(name, parent, attr) 函数,为新功能添加新的 debugfs 属性。 为模块设置参数; @@ -108,7 +108,7 @@ fault-injection 套件提供接口,以便增加新的功能。下面简单介 添加一个钩子函数到错误测试的代码中。 -> should_fail(attr, size) —— 当这个钩子函数返回 true 时,用户的代码就应该产生一个错误。 +> should\_fail(attr, size) —— 当这个钩子函数返回 true 时,用户的代码就应该产生一个错误。 应用程序使用这个 fault-injection 套件可以指定某个具体的内核模块产生 slab 和内存页分配的错误,这样就可以缩小性能测试的范围。 @@ -116,9 +116,10 @@ fault-injection 套件提供接口,以便增加新的功能。下面简单介 via: http://www.linuxjournal.com/content/linux-kernel-testing-and-debugging?page=0,2 -译者:[bazz2](https://github.com/bazz2) 校对:[校对者ID](https://github.com/校对者ID) +译者:[bazz2](https://github.com/bazz2) 校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 [1]:http://linuxdriverproject.org/mediawiki/index.php/Dmesg_regression_check_script [2]:http://elinux.org/Ktest#Git_Bisect_type +[3]:http://linux.cn/article-3629-1.html \ No newline at end of file