399 Star 1.4K Fork 1.3K

GVPopenEuler / kernel

 / 详情

[OLK-5.10] syscall __NR_sched_getaffinity 返回CPU范围有误。

已完成
缺陷 成员
创建于  
2023-11-30 15:06

一、缺陷信息
**内核信息:OLK 5.10
**缺陷归属组件:kernel
缺陷归属的版本: 2203-SP2
缺陷简述:
libnuma库通过 syscall __NR_sched_getaffinity 获取cpumask,同时获得cpu number。
当前此syscall返回值有误,返回的是CONFIG_NR_CPUS的值而不是实际的cpu数量,导致libnuma库性能差。

【环境信息】
NA

评论 (4)

Yang Shen 创建了缺陷

Hi youngersun, welcome to the openEuler Community.
I'm the Bot here serving you. You can find the instructions on how to interact with me at Here.
If you have any questions, please contact the SIG: Kernel, and any of the maintainers.

openeuler-ci-bot 添加了
 
sig/Kernel
标签

1、内核用CONFIG_CPUMASK_OFFSTACK宏来确定nr_cpumask_bits是采用nr_cpu_ids还是NR_CPUS值,nr_cpu_ids表示系统实际存在的cpu个数,NR_CPUS表示OS镜像支持的最大cpu个数
2、sched_getaffinity函数返回值是取用户传进去len和根据cpumask_size(会调用nr_cpumask_bits进行计算)算出来长度的最小值。cpumask_size以unsigned long为单位,用bit mask表示cpu的个数,所以存在返回值比实际核数大的情况,根据glibc的语义规定,是需要上层结合CPU_COUNT去做判断遍历的范围。
3、虽然内核可以一定程度规避这个问题,但不是内核问题,本质上是上层使用不合理导致。
4、打开CONFIG_CPUMASK_OFFSTACK宏可以规避,打开宏后会导致cpumask_var_t从数组变成指针,导致kabi发生变更
5、可以回合高版本一组补丁规避这个问题,但是建议用户使用的时候需要结合CPU_COUNT去做限制
https://lore.kernel.org/lkml/20220905230820.3295223-1-yury.norov@gmail.com/T/)

缺陷数据未收集完成,重新打开issue

内核信息 解析失败

缺陷归属组件 解析失败

归属版本 2203-SP2 错误

详情参考链接 解析失败

分析指导链接 解析失败

zhangjialin 添加了
 
help-wanted
标签
zhangjialin 关联分支设置为openEuler-22.03-LTS-SP2
zhangjialin 通过src-openeuler/kernel Pull Request !1361任务状态待办的 修改为已完成

登录 后才可以发表评论

状态
负责人
项目
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
预计工期 (小时)
参与者(3)
5329419 openeuler ci bot 1632792936 8909060 oskernel0719 1670549376 10370188 youngersun 1668840253
C
1
https://gitee.com/openeuler/kernel.git
git@gitee.com:openeuler/kernel.git
openeuler
kernel
kernel

搜索帮助

53164aa7 5694891 3bd8fe86 5694891