WorkQueue中包含FIFO队列、限速队列、延迟队列,在自定义控制器的编写过程中使用的是限速队列,FIFO队列和延迟队列的实现非常有用,可以去源码路径k8s.io/client-go/util/workqueue/queue.go和k8s.io/client-go/util/workqueue/delaying_queue.go进行阅读。 限速队列的实现原理是利用延迟队列的特性延迟数据的插入时间从而限速。
void *hcpu) { int cpu = (unsigned long)hcpu; struct worker_pool *pool; struct workqueue_struct *wq; int pi; switch (action & ~CPU_TASKS_FROZEN) { case CPU_UP_PREPARE: for_each_cpu_worker_pool(pool, cpu) { if (pool->nr_workers) continue; if (!create_worker(pool)) return NOTI...
Hi, Can anyone explain the below message: kernel:BUG: workqueue lockup - pool cpus=4 node=0 flags=0x0 nice=0 stuck for 55s! Red Hat Enterprise 9.2 BR Davoud
lockup_detector_init(); smp_init(); sched_init_smp();---将剩余CPU1~3进行up操作。 do_basic_setup();---执行__initcall_0start之后的initcall函数... } 在初始化pool的时候,是按照possible的CPU来进行初始化的。而在创建工作线程的时候是按照online的CPU来创建的。 在init_workqueues()的时刻,CPU1~...
case CPU_UP_PREPARE: for_each_cpu_worker_pool(pool, cpu) { if (pool->nr_workers) continue; if (!create_worker(pool)) return NOTIFY_BAD; } break; case CPU_DOWN_FAILED: case CPU_ONLINE: mutex_lock(&wq_pool_mutex); for_each_pool(pool, pi) { ...
g_MTKPP_proc->proc_fops = &g_MTKPP_proc_ops;#endif#ifdefined(ENABLE_AEE_WHEN_LOCKUP)g_MTKPP_workqueue.psWorkQueue =alloc_ordered_workqueue("mwp", WQ_FREEZABLE | WQ_MEM_RECLAIM); INIT_WORK(&g_MTKPP_worker.sWork, MTKPP_WORKR_Handle);#endifg_init_done =1; ...
woke_up: spin_lock_irq(&pool->lock); /* am I supposed to die? */ if (unlikely(worker->flags & WORKER_DIE)) {---WORKER_DIE表示此工作线程将要被销毁。 spin_unlock_irq(&pool->lock); WARN_ON_ONCE(!list_empty(&worker->entry)); worker->task->flags &= ~PF_WQ_WORKER; set_task_...
case CPU_UP_PREPARE: for_each_cpu_worker_pool(pool, cpu) { if (pool->nr_workers) continue; if (!create_worker(pool)) return NOTIFY_BAD; } break; case CPU_DOWN_FAILED: case CPU_ONLINE: mutex_lock(&wq_pool_mutex); for_each_pool(pool, pi) { ...