Почему простое задание linux (Swapper), запущенное с preempt отключено? - PullRequest
0 голосов
/ 21 февраля 2020

Два свидетельства показывают, что задание linux (бездействующее), запущенное с отключенной преднамеренностью:

1: объект подсчета preempt, инициализированный INIT_PREEMPT_COUNT, значение которого равно «1», означает отключение preempt.

#define INIT_THREAD_INFO(tsk)                       \
{                                   \
   .task       = &tsk,                     \
   .flags      = 0,                        \
   .preempt_count  = INIT_PREEMPT_COUNT,               \
   .addr_limit = KERNEL_DS,                    \
}

2. из-за частоты irqsoff preempt-глубина установлена ​​в 1, что означает, что выгрузка отключена.

# tracer: irqsoff
#
# irqsoff latency trace v1.1.5 on 4.15.10+
# --------------------------------------------------------------------
# latency: 3464 us, #4/4, CPU#2 | (M:preempt VP:0, KP:0, SP:0 HP:0 #P:4)
#    -----------------
#    | task: swapper/2-0 (uid:0 nice:0 policy:0 rt_prio:0)
#    -----------------
#  => started at: rcu_idle_exit
#  => ended at:   rcu_idle_exit
#
#
#                  _------=> CPU#            
#                 / _-----=> irqs-off        
#                | / _----=> need-resched    
#                || / _---=> hardirq/softirq 
#                ||| / _--=> preempt-depth   
#                |||| /     delay            
#  cmd     pid   ||||| time  |   caller      
#     \   /      |||||  \    |   /         
  <idle>-0       2dn.1  927us#: rcu_idle_exit
  <idle>-0       2dn.1 3067us!: rcu_idle_exit
  <idle>-0       2dn.1 3645us#: trace_hardirqs_on <-rcu_idle_exit
  <idle>-0       2dn.1 5713us : <stack trace>

Итак, почему дизайн такой?

...