/ 详情

[openEuler 20.03 LTS SP1/X86_64] baseos_proc_t测试用例file-max执行失败

Done
Task
Opened this issue  
2021-04-21 14:30

【标题描述】能够简要描述问题:说明什么场景下,做了什么操作,出现什么问题(尽量使用正向表达方式)
【环境信息】
硬件信息:
1) 裸机场景提供出问题的硬件信息;
2) 虚机场景提供虚机XML文件或者配置信息
[root@hulk-34 bin]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
Address sizes: 46 bits physical, 48 bits virtual
CPU(s): 40
On-line CPU(s) list: 0-39
Thread(s) per core: 2
Core(s) per socket: 10
Socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 85
Model name: Intel(R) Xeon(R) Silver 4114 CPU @ 2.20GHz
Stepping: 4
软件信息:
1) OS版本及分支
cat /etc/openEuler-release
openEuler release 20.03 (LTS-SP1)
2) 内核信息
4.19.90
3) 发现问题的组件版本信息
如果有特殊组网,请提供网络拓扑图
【问题复现步骤】
具体操作步骤
cd /home/install/kernel_test_bin/bin/baseos_proc_t/testcases/bin
./file-max.sh
出现概率(是否必现,概率性错误)
【预期结果】
pass
【实际结果】
[root@hulk-34 bin]# ./file-max.sh
before change : 9223372036854775807
after change : 10
current opened file : 2610 0 10
open(): Too many open files in system
Test case 1 passed !
open(): Too many open files in system
Test case 2 failed !
Test Failed

【附件信息】
比如系统message日志/组件日志、dump信息、图片等

Attachments

Comments (6)

汪可可 created任务
汪可可 set related repository to openEuler/kernel
展开全部操作日志

Hey wang_keke, Welcome to openEuler Community.
All of the projects in openEuler Community are maintained by @openeuler-ci-bot .
That means the developers can comment below every pull request or issue to trigger Bot Commands.
Please follow instructions at https://gitee.com/openeuler/community/blob/master/en/sig-infrastructure/command.md to find the details.

这个用例是通过用户 nobody 执行 fd=open("/bin/bash" , O_RDONLY); 在文件系统中新建一个文件,
以此来检查在文件系统最大文件数量变化时文件系统的反应。
在文件系统中,在文件表中对于文件数量的最大值定义如下

 struct files_stat_struct {
         unsigned long nr_files;         /* read only */
         unsigned long nr_free_files;    /* read only */
         unsigned long max_files;                /* tunable */
 };
 {
         .procname       = "file-max",
         .data           = &files_stat.max_files,
         .maxlen         = sizeof(files_stat.max_files),
         .mode           = 0644,
         .proc_handler   = proc_doulongvec_minmax,
         .extra1         = &zero_ul,
         .extra2         = &long_max,
 }

max_files 虽然设置的的参数类型数 unsigned long,
但是设置的最小值是 zero_ul 即0, 最大值是 long_max 即 9223372036854775807。
在将/proc/sys/fs/file-max初始值设置为 9223372036854775807 时,用例中先将其设置为10,运行失败,与预期相符
之后将其设置为 9223372036854775807 + 100,因为位数限制,符号位加一,
出现有符号数溢出,变为 -9223372036854775709,这个数作为无符号整数传入,超过了最大值,会返回 Invalid argument
因此会设置失败, 设置失败后file-max还是之前的值即 10,此时执行测试用例2就会失败,与预期不符,因此测试未通过。

失败的原因是 file-max 的默认值已经是最大值 9223372036854775807

输入图片说明

saved_value 再 + 100 必然溢出
输入图片说明

设置失败

将默认值设置小一点,可以通过

输入图片说明

用例设计有问题。
建议如果默认 saved_value 已经是最大值,则 -100 进行测试吧。
如果非要 + 100 测试,建议规避掉 saved_value 已经是最大值的问题。

@汪可可 建议修改用例。

谢谢

成坚 (CHENG Jian) changed issue state from 待办的 to 进行中
成坚 (CHENG Jian) changed issue state from 进行中 to 已拒绝
成坚 (CHENG Jian) changed issue state from 已拒绝 to 已完成

Sign in to comment

状态
Assignees
Projects
Milestones
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
Branches
Planed to start   -   Planed to end
-
Top level
Priority
Duration (hours)
确定
参与者(4)
5329419 openeuler ci bot 1578984659