void kthread_bind(struct task_struct *p, unsigned int cpu); (2).set_cpus_allowed_ptr用来设置内核线程的处理器亲和性掩码: int set_cpus_allowed_ptr(struct task_struct *p, const struct cpumask *new_mask); 2.使用cpuset配置 管理员可以使用cpuset设置进程的处理器亲和性。cpuset用来控制进程在哪些处理...
(1). kthread_bind用来把一个刚刚创建的内核线程绑定到一个处理器: (2).set_cpus_allowed_ptr用来设置内核线程的处理器亲和性掩码: 2.使用cpuset配置管理员可以使用cpuset设置进程的处理器亲和性。cpuset用来控制进程在哪些处理器上执行,以及从哪些内存节点分配内存。cpuset可以单独使用,也可以作为cgroup的一个资源控...
int preferred_nid) { preferred_nid -> 对应nid 如果是UMA 则 nid只能是0 return __alloc_pages_nodemask(gfp_mask, order, preferred_nid, NULL); } /* * gfp_allowed_mask is set to GFP_BOOT_MASK during early boot to restrict what * GFP flags are used before interrupts are enabled. Once...
set_cpus_allowed_ptr() will fail with -EINVAL if the requested affinity mask is not a subset of the task_cpu_possible_mask() for the task being updated. Consequently, on a heterogeneous system with cpusets spanning the different CPU types, updates to the cgroup hierarchy can silently fail...
set_cpus_allowed_ptr(tsk, cpu_all_mask); set_mems_allowed(node_states[N_MEMORY]); current->flags |=PF_NOFREEZE;for(;;) { set_current_state(TASK_INTERRUPTIBLE);if(list_empty(&kthread_create_list)) schedule();---如果kthread_create_list为空,让出CPU,进入休眠状态。在kthread_create_on_...
set_cpus_allowed_ptr(task, cpu_all_mask); } kfree(create);---释放kthread_create_info。 return task; } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27...
set_task_comm(tsk, "kthreadd"); ignore_signals(tsk); set_cpus_allowed_ptr(tsk, cpu_all_mask); set_mems_allowed(node_states[N_HIGH_MEMORY]); current->flags |= PF_NOFREEZE | PF_FREEZER_NOSIG; for (;;) { set_current_state(TASK_INTERRUPTIBLE); ...
set_cpus_allowed_ptr(tsk, cpu_all_mask); set_mems_allowed(node_states[N_HIGH_MEMORY]); current->flags |= PF_NOFREEZE |PF_FREEZER_NOSIG;for(;;) { set_current_state(TASK_INTERRUPTIBLE);if(list_empty(&kthread_create_list)) schedule(); ...
set_cpus_allowed_ptr(tsk, &((cgroup_cs(scan->cg))->cpus_allowed)); } 该函数很简单,就是设置进程的cpus_allowed域,在下次进程被调度回来的时候,就会切换到允许的cpu上面运行。 3.3.1.3:update_tasks_nodemask() 该函数用来更新cpuset下的task的memory node信息。代码如下: ...
设置进程的 cpu 亲和力 set_cpus_allowed_ptr()。缺点是进程绑定的 cpu 如果被 down 掉,进程会迁移到其他 cpu 继续执行。 为了克服上述方案的缺点,适配 per_cpu 进程的 cpu hotplug 操作,设计了 kthread_park()/kthread_unpark() 机制。 2.1 smpboot_register_percpu_thread() per_cpu 进程从代码上看,实际...