[开源软件] fuzztest
Linux: 测试: 稳定性测试
Linux的这个功能是用来做测试,来测试系统里的fault分支的处理是否正确。旨在通过模拟特定的故障条件来测试内核的健壮性。其实这种思路,在每个产品中都可以使用,一般化出来一个固定的测试:故障注入机制测试。
文档:
Documentation/fault-injection/fault-injection.rst
https://www.nongnu.org/failmalloc/
故障注入机制允许开发人员有意地向内核中引入错误,以观察系统如何行为和恢复。通用的格式允许对这些故障何时以及多久注入进行精细控制。
下面是失败注入的一些类型/模块:
failslab: 这种机制用于向内核的slab分配器注入故障。其目的是模拟 slab 缓存的内存分配失败的场景,帮助测试内核如何处理内存不足条件或特定内核对象的分配失败。
static inline struct kmem_cache *slab_pre_alloc_hook(struct kmem_cache *s, struct list_lru *lru, struct obj_cgroup **objcgp, size_t size, gfp_t flags){ flags &= gfp_allowed_mask;might_alloc(flags);if (should_failslab(s, flags))return NULL;
fail_usercopy: 这种机制向用户空间到内核空间(反之亦然)的内存复制操作注入故障。它旨在测试当用户应用程序和内核之间的数据传输失败时内核的弹性,这可以暴露系统调用或其他用户-内核交互中错误处理的问题。
fail_page_alloc: 这种机制向内核的页面分配例程注入故障。其目的是模拟内核无法分配物理内存页的场景,允许测试系统如何响应严重的内存压力或在基本层面的分配失败。
fail_make_request: 这种机制向make_request操作注入故障,这是块层的一个关键部分,负责向块设备提交I/O请求。它有助于测试内核对磁盘I/O操作的错误处理,模拟设备故障或I/O提交错误等场景。
相关的编译配置:
CONFIG_FAILSLAB
CONFIG_FAULT_INJECTION_DEBUG_FS