侯朋朋 张 珩 武延军 于佳耕 邰 阳 苗玉霞
1(智能软件研究中心(中国科学院软件研究所) 北京 100190) 2(中国科学院大学 北京 100049)
(pengpeng@iscas.ac.cn)
Linux作为开源软件基石其应用场景广泛,从资源匮乏的边缘计算到云计算中心、超算中心均有广泛应用,不同应用场景需求各异,如边缘计算场景更关注内核大小,超算中心场景更关注系统性能.为适应复杂的应用场景,Linux提供了数量巨大的内核配置项便于灵活设置个性化内核.内核配置项覆盖广泛,涉及体系架构、文件系统、内存管理、安全加密、驱动设置等.内核配置项可使能或禁用内核模块或机制,如CONFIG_USB设置为Y(yes)M(model)则表示将USB模块直接编译或以可加载模块的方式进入内核,设置为N(no)则在内核编译时禁用该模块.除Y(yes)M(model)N(no)外,内核配置项值也可设置为其他值,如设置默认IO调度策略时可将CONFIG_DEFAULT_IOSCHED设置为“cfq”或“deadline”.
Linux内核灵活的配置项机制在内核裁剪、内核安全增强、内核性能优化等应用场景中均有广泛应用.以内核性能优化为例,Ren等人[1]基于Ubuntu的v3.0至v4.20内核版本的研究发现,造成Linux内核性能下降的原因有11项,其中涉及到内核配置项有8项,且涉及内核配置项带来的性能损失大于其他因素,通过调整内核配置项值等操作可将Redis,Apache,Nginx工作负载提高56%,33%,34%.
虽然Linux内核提供了灵活、全面的内核配置项,但正确使用这些配置项门槛高,难度大.配置项的数量巨大且增长快速,配置项的默认值在不同内核版本中经常改变,即使专业的内核团队要能够正确设置配置项也面临很……