History

psi: eliminate kthread_worker from psi trigger scheduling mechanism

Each psi group requires a dedicated kthread_delayed_work and kthread_worker. Since no other work can be performed using psi_group's kthread_worker, the same result can be obtained using a task_struct and a timer directly. This makes psi triggering simpler by removing lists and locks involved with kthread_worker usage and eliminates the need for poll_scheduled atomic use in the hot path.

Suren Baghdasaryan committed 6 years ago

Commit 461daba1 parent f4291df2 files · +68 −52Browse files

Showing the changes to include/linux (1 of 2 files). Show all

Unified · Split

include/linux/psi_types.h+4−3
@@ -153,9 +153,10 @@ struct psi_group { · 152 unmodified lines
153 unsigned long avg[NR_PSI_STATES - 1][3];153 unsigned long avg[NR_PSI_STATES - 1][3];
154 154
155 /* Monitor work control */155 /* Monitor work control */
156 atomic_t poll_scheduled;156 struct task_struct __rcu *poll_task;
157 struct kthread_worker __rcu *poll_kworker;157 struct timer_list poll_timer;
158 struct kthread_delayed_work poll_work;158 wait_queue_head_t poll_wait;
159 atomic_t poll_wakeup;
159 160
160 /* Protects data used by the monitor */161 /* Protects data used by the monitor */
161 struct mutex trigger_lock;162 struct mutex trigger_lock;