Linux 内核引导的若干选项
在低延迟等场景中,看到了一些引导参数,对提升响应速度,降低延迟有一定效果,记录说明如下。以下均来自网络,描述不一定非常准确,仅供了解。
-
isolcpus=CPU编号列表 将列表中的CPU从内核SMP平衡和调度算法中剔除。 可以将特定的CPU隔离出来只给指定进程使用。 nohz_full=CPU列表 在内核"CONFIG_NO_HZ_FULL=y"的前提下,指定哪些CPU核心可以进入完全无滴答状态。 如果你有一个100Hz的滴答,那么每秒100次,操作系统会唤醒,检查是否有任何定时器已经过期,如果有则执行他们的操作,然后再次进入睡眠状态。在无滴答系统上,操作系统会查看下一个计时器何时到期,然后再睡到那个时间,而不是每秒唤醒100次以查看是否有任何可以处理的内容。 当cpu上只有一个任务在跑的时候,不发送调度时钟中断到此cpu也就是减少调度时钟中断,不中断空闲CPU,从而可以减少耗电量和减少系统抖动。 注意 “boot CPU”(通常都是"0"号CPU)会无条件的从列表中剔除。 这里列出的CPU编号必须也要同时列进"rcu_nocbs=…"选项中。 rcu_nocbs=CPU列表 当cpu有RCU callbacks pending的时候,nohzfull设置可能不会生效,使用rcu_nocbs来指定cpu进行卸载RCU callback processing intel_pstate=disable 禁用 Intel CPU 的 P-state 驱动(CONFIG_X86_INTEL_PSTATE),也就是Intel CPU专用的频率调节器驱动 idle=poll 对CPU进入休眠状态的额外设置。 {“poll” | “halt” | “nomwait”} poll 从根本上禁用休眠功能(也就是禁止进入C-states状态),可以略微提升一些CPU性能,但是却需要多消耗许多电力,得不偿失。不推荐使用。 halt 表示直接使用HALT指令让CPU进入C1/C1E休眠状态,但是不再继续进入C2/C3以及更深的休眠状态。此选项兼容性最好,唤醒速度也最快。但是电力消耗并不最低。 nomwait 表示进入休眠状态时禁止使用CPU的MWAIT指令。MWAIT是专用于Intel超线程技术的线程同步指令,有助于提升CPU的超线程效能,但对于不具备超线程技术的CPU没有意义。 [提示]可以同时使用halt和nomwait,也就是"idle=halt idle=nomwait"(但不是:idle=halt,nomwait) elevator=deadline 指定默认的IO调度器{“bfq”|“cfq”|“deadline”|“noop”},可以dmesg | grep -i scheduler查看支持的调度器。 CFQ(完全公平排队I/O调度程序) 在最新的内核版本和发行版中,都选择CFQ做为默认的I/O调度器,对于通用的服务器也是最好的选择. CFQ试图均匀地分布对I/O带宽的访问,避免进程被饿死并实现较低的延迟,是deadline和as调度器的折中. CFQ对于多媒体应用(video,audio)和桌面系统是最好的选择. CFQ赋予I/O请求一个优先级,而I/O优先级请求独立于进程优先级,高优先级的进程的读写不能自动地继承高的I/O优先级. NOOP(电梯式调度程序) NOOP实现了一个简单的FIFO队列,它像电梯的工作主法一样对I/O请求进行组织,当有一个新的请求到来时,它将请求合并到最近的请求之后,以此来保证请求同一介质. NOOP倾向饿死读而利于写. NOOP对于SSD等闪存设备,RAM,嵌入式系统是最好的选择. Deadline(截止时间调度程序) 通过时间以及硬盘区域进行分类,这个分类和合并要求类似于noop的调度程序. Deadline确保了在一个截止时间内服务请求,这个截止时间是可调整的,而默认读期限短于写期限.这样就防止了写操作因为不能被读取而饿死的现象. Deadline对数据库环境(ORACLE RAC,MYSQL等)是最好的选择.
参考
http://www.jinbuguo.com/kernel/boot_parameters.html https://www.sohu.com/a/158417513_610730 https://blog..net/shipeng1022/article/details/78604910
