menu "MTK runqueue statistic calculation and CPU affinity" config MTK_SCHED_RQAVG_KS bool "Enable runqueue statistic calculation used in kernel space operation" depends on SMP help MTK ruqueue statistic kernel space CPUfreq governors, e.g., hotplug TLP estimation, heavy task detection and per CPU load for kernel space CPUfreq governors config MTK_SCHED_RQAVG_US bool "Enable runqueue staticsic calculation used in user space operation" depends on SMP && HIGH_RES_TIMERS help TLP estimation for user space CPUfreq governors config MT_CPU_AFFINITY bool "Enhance CPU affinity in hotplug" depends on HOTPLUG_CPU help The CPU affinity library for Hotplug enhancement is to achieve set CPU affinity without take care kernel behavior and to avoid affect the original Linux design. endmenu menu "MT load balance and schedule enhancement" config MT_LOAD_BALANCE_ENHANCEMENT bool "mt load balance enhancement" depends on SMP default n help Mediatek aggressive load balance, include 1. wake up load balance, 2. shorten the schedule migration cost and let the idle balance more aggregative, 3. force ignore the cache hot when current rq is idle and src cpu have more than 2 tasks, 4. migrate heavy load_weight task as long as RT tasks exist in busy cpu 5. when move tasks fil, force migration no matter cache-hot, use mt_ignore_cachehot_in_idle. config MT_RT_SCHED bool "mt RT scheduling enhancement for big.LITTLE" depends on SCHED_HMP default n help Mediatek big.LITTLE MP Scheduling for RT-class. Linux big.LITTLE MP Scheduling for RT-class don’t aware the different processor power (A15/A7). That would lead to priority inversion. We want to provide a solution to solve above problem and let the user experience, and system performance to achieve the best condition under the consideration with power-saving and following the policy of hotplug and DVFS (do not UP processor forcedly). config MTK_COMPAT bool "mt fast mode switching enhancement" depends on COMPAT default n help Current design will save/restore all registers in mode switching. However, when kernel layer is 64-bits and application layer is 32 bits, the 32-bits application use a part of registers. Save/restore all register will consume CPU cycles. To avoid the unnecessary save/restore registers behavior, we propose fast mode switching method to optimize the mode switching config MT_SCHED_INTEROP bool "mtk scheduling interopation enhancement" default n help Original Linux Design, RT & CFS do load balance seperatedly, and let would result in unload balance. that is, one CPU has more than 2 tasks, however, one CPU is IDLE We make RT & CFS to check each other and make load more balance. config MT_SCHED_TRACE bool "mt scheduling trace, output mtk schedule trace into FTRACE" default n help Provide RT info via ftrace, mt_sched_printf for scheduling module to output info and RT scheduling info to ftrace, including select_task_rq, check_preempt, find_lowest_rq. Say no if not sure. config MT_SCHED_DEBUG bool "mt scheduling log, also output the scheduling log into Kernel log" depends on MT_SCHED_TRACE default n help MTK scheduling log, add scheduling log into Kernel log. Including print scheduler debug information at KE and print load balance information at kernel log. Say no if not sure. config MT_DEBUG_PREEMPT bool "debug preempt, output the preempt enable/disable to FTRACE" default n help Provide preempt debug. Dump preempt disable/enable backtrace into ftrace. Dump preempt count in kernel log. Say no if not sure. endmenu menu "MTK Cluster MultiProcessor Scheduler" config MTK_CPU_TOPOLOGY bool "MTK cpu topology infrastructure" depends on (64BIT && OF && SMP) || (ARM_CPU_TOPOLOGY && OF) default n help Say N if you want to build up another wheel sched_init -> cmp_cputopo_domain_seutp() rest_init -> fork kernel_init -> kernel_init_freeable ... -> parse_dt_topology we focus to build up cpu topology and domain before scheduler runs. config MTK_SCHED_CMP bool "Enable CMP scheduler" depends on SMP && SCHED_MC && MTK_CPU_TOPOLOGY default n help CMP Scheduler Enhancement for MTK SoC. Attempts to introspectively select tasks to optimize energy and performance. say no if not sure. config MTK_SCHED_CMP_TGS bool "Enable thread group scheduling" depends on MTK_SCHED_CMP default n help CMP Scheduler Enhancement for MTK SoC. To utilize the nature of tasks in the same thread group, which eager to share data (pages) essentially. Balance the same parent’s tasks to the same CPU cluster Would get improvement with L2-cache Read-Hit/Miss and Write. config MTK_SCHED_CMP_TGS_WAKEUP bool "Enable thread group scheduling" depends on MTK_SCHED_CMP_TGS default n help CMP Scheduler Enhancement for MTK SoC. If the wakeup task is single thread, it will try to find idlest group and find idlest CPU. Else if the wakeup task has thread group, prefer the cluster which has idle CPU with most tasks in the same thread group. endmenu menu "MTK Heterogenous MultiProcessor Scheduler" config DISABLE_CPU_SCHED_DOMAIN_BALANCE bool "(EXPERIMENTAL) Disable CPU level scheduler load-balancing" help Disables scheduler load-balancing at CPU sched domain level. In hmp scheduler, use hmp global balance, a.k.a. force up/down migration, instead. If unsure say N here. config SCHED_HMP bool "(EXPERIMENTAL) Heterogenous multiprocessor scheduling" depends on SCHED_MC && FAIR_GROUP_SCHED && !SCHED_AUTOGROUP help Experimental scheduler optimizations for heterogeneous platforms. Attempts to introspectively select task affinity to optimize power and performance. Basic support for multiple (>2) cpu types is in place, but it has only been tested with two types of cpus. There is currently no support for migration of task groups, hence !SCHED_AUTOGROUP. config SCHED_HMP_PRIO_FILTER bool "(EXPERIMENTAL) Filter HMP migrations by task priority" help Enables task priority based HMP migration filter. Any task with a NICE value above the threshold will always be on low-power cpus with less compute capacity. If unsure say N here. config SCHED_HMP_PRIO_FILTER_VAL int "NICE priority threshold" default 5 depends on SCHED_HMP_PRIO_FILTER config HMP_FREQUENCY_INVARIANT_SCALE bool "(EXPERIMENTAL) Frequency-Invariant Tracked Load for HMP" depends on !ARCH_SCALE_INVARIANT_CPU_CAPACITY help Scales the current load contribution in line with the frequency of the CPU that the task was executed on. In this version, we use a simple linear scale derived from the maximum frequency reported by CPUFreq. Restricting tracked load to be scaled by the CPU's frequency represents the consumption of possible compute capacity (rather than consumption of actual instantaneous capacity as normal) and allows the HMP migration's simple threshold migration strategy to interact more predictably with CPUFreq's asynchronous compute capacity changes. config HMP_TRACER bool "(EXPERIMENTAL) Profile HMP scheduler" help Profile HMP scheduler Trace the update of cfs rq, load, and hmp_statisics to evaluate if the schedule decision is as expected. If unsure say N here. config HMP_PACK_SMALL_TASK bool "(EXPERIMENTAL) Packing Small Tasks" depends on SCHED_HMP help This option enables Packing Small Tasks Packing small task mechanism is try to limit small tasks to run on as little CPUs as possible and meke better power efficiency. If unsure say N here. config SCHED_HMP_PLUS bool "(EXPERIMENTAL) Corepilot enhancement" depends on SCHED_HMP default n help Corepilot hmp enhancement. 1. Do hmp_idle_pull at idle_balance 2. At global balance, consider the tasks in rq, move heaviest/lightest of first 5 tasks in rq. 3. Enhance down migration rule: Do not migrate task when big core is idle endmenu