vip视频解析网站建设,网站建设报告书范文,宿迁盐城网站建设企业,wordpress新浪微博接前一篇文章#xff1a;中移#xff08;苏州#xff09;软件技术有限公司面试问题与解答#xff08;0#xff09;—— 面试感悟与问题记录 本文对于中移#xff08;苏州#xff09;软件技术有限公司面试问题中的“#xff08;11#xff09;Linux进程调度参数调优是如…接前一篇文章中移苏州软件技术有限公司面试问题与解答0—— 面试感悟与问题记录 本文对于中移苏州软件技术有限公司面试问题中的“11Linux进程调度参数调优是如何通过代码实际完成的”进行解答与解析。
本文中的进程调度调优参数主要指的是以下参数 它们可以在不重新启动机器的情况下使用Linux提供的命令sysctl进行更改。每个参数的含义如下
sched_latency_ns
CFS完全公平调度器是从内核2.6.23版本开始采用的进程调度器。基本原理设定一个调度周期sched_latency_ns目标是让每个进程在这个周期内至少有机会运行一次换一种说法也就是每个进程等待CPU的时间最长不超过这个调度周期然后根据进程的数量平分这个调度周期内的 CPU 使用权由于进程的优先级即 nice 值不同分割调度周期的时候要加权。
参数对应路径为/proc/sys/kernel/sched_latency_ns。
对应内核代码中的变量为sysctl_sched_latencykernel/sched/fair.c中。
sched_migration_cost_ns
这是在上次执行之后任务在迁移决策中被视为热缓存的时间量。热任务更少可能迁移到另一个CPU因此增加此变量会减少任务迁移。当存在可运行进程时如果CPU空闲时间高于预期则建议降低此值如果任务在CPU或结点之间频繁切换最好增加它。
参数对应路径为/proc/sys/kernel/sched_migration_cost_ns。
对应内核代码中的变量为sysctl_sched_migration_costkernel/sched/fair.c中。
sched_min_granularity_ns
CFS设定了进程占用CPU的最小时间值正在CPU上运行的进程如果不足这个时间是不可以被调离CPU的。如果进程数量太多的话就会造成CPU时间片太小如果小于 sched_min_granularity_ns 的话就以sched_min_granularity_ns为准而调度周期也随之不再遵守 sched_latency_ns而是以sched_min_granularity_ns * 进程数量的乘积为准。
参数对应路径为/proc/sys/kernel/sched_min_granularity_ns。
对应内核代码中的变量为sysctl_sched_min_granularitykernel/sched/fair.c中。
sched_nr_migrate
此参数控制了出于负载平衡目的可以跨处理器迁移的任务数量。当负载平衡使用禁用的中断softirq迭代运行队列时它可能会导致实时任务的irq延迟损失。因此增加此值可能会以增加实时任务的irq延迟为代价提高大型SCHED_OTHER线程的性能。即在多CPU情况下进行负载均衡时一次最多移动多少个进程到另一个CPU上。
参数对应路径为/proc/sys/kernel/sched_nr_migrate。
对应内核代码中的变量为sysctl_sched_nr_migratekernel/sched/core.c。
sched_rr_timeslice_ms
此参数可以调整SCHED_RR策略中的量程时间片。
参数对应路径为/proc/sys/kernel/sched_rr_timeslice_ms。
对应内核代码中的变量为sysctl_sched_rt_runtimekernel/sched/rt.c中。
sysctl_sched_rt_period/sysctl_sched_rt_runtime
参数对应路径分别为/proc/sys/kernel/sched_rt_period_us和/proc/sys/kernel/sched_rt_runtime_us 。
对应内核代码中的变量分别为sysctl_sched_rt_period和sysctl_sched_rt_runtime均在kernel/sched/rt.c中。
sysctl_sched_rt_period和sysctl_sched_rt_runtime两个参数一起决定了实时进程在以sysctl_sched_rt_period为周期的时间内实时进程最多能够运行的总的时间不能超过sysctl_sched_rt_runtime。
sched_cfs_bandwidth_slice_us
当使用CFS带宽控制时此参数控制从任务的控制组带宽池传输到运行队列的运行时带宽量。较小的值允许在任务之间以细粒度的方式共享全局带宽而较大的值则减少了传输开销。
参数对应路径为/proc/sys/kernel/sched_cfs_bandwidth_slice_us。
对应内核代码中的变量为sysctl_sched_cfs_bandwidth_slicekernel/sched/fair.c中。
sched_wakeup_granularity_ns wakeup
该变量表示进程被唤醒后至少应该运行的时间的基数它只是用来判断某个进程是否应该抢占当前进程并不代表它能够执行的最小时间sysctl_sched_min_granularity如果这个数值越小那么发生抢占的概率也就越高。
参数对应路径为/proc/sys/kernel/sched_wakeup_granularity_ns。
对应内核代码中的变量为sysctl_sched_wakeup_granularity。 下一篇开始将结合实际Linux内核代码看看这些参数是如何在内核中通过代码起作用的。