Linux的线程本质上是进程,称为“轻量级进程(LWP, Light Weight Process)”,线程的行为继承关系和进程非常相似。
本文以CPU SET验证进程的cgroup继承关系。
[yz@yz219 yz]$ pwd /sys/fs/cgroup/cpuset/yz [yz@yz219 yz]$ ll drwxrwxr-x 2 yz yz 0 5月 28 18:15 1 drwxrwxr-x 2 yz yz 0 5月 28 18:15 2 -rw-rw-r-- 1 yz yz 0 5月 28 17:24 cgroup.clone_children --w--w---- 1 yz yz 0 5月 28 17:24 cgroup.event_control -rw-rw-r-- 1 yz yz 0 5月 28 17:24 cgroup.procs -rw-rw-r-- 1 yz yz 0 5月 28 17:24 cpuset.cpu_exclusive -rw-rw-r-- 1 yz yz 0 5月 28 18:47 cpuset.cpus -r--r--r-- 1 yz yz 0 5月 28 17:24 cpuset.effective_cpus -r--r--r-- 1 yz yz 0 5月 28 17:24 cpuset.effective_mems -rw-rw-r-- 1 yz yz 0 5月 28 17:24 cpuset.mem_exclusive -rw-rw-r-- 1 yz yz 0 5月 28 17:24 cpuset.mem_hardwall -rw-rw-r-- 1 yz yz 0 5月 28 17:24 cpuset.memory_migrate -r--r--r-- 1 yz yz 0 5月 28 17:24 cpuset.memory_pressure -rw-rw-r-- 1 yz yz 0 5月 28 17:24 cpuset.memory_spread_page -rw-rw-r-- 1 yz yz 0 5月 28 17:24 cpuset.memory_spread_slab -rw-rw-r-- 1 yz yz 0 5月 28 18:45 cpuset.mems -rw-rw-r-- 1 yz yz 0 5月 28 17:24 cpuset.sched_load_balance -rw-rw-r-- 1 yz yz 0 5月 28 17:24 cpuset.sched_relax_domain_level -rw-rw-r-- 1 yz yz 0 5月 28 17:24 notify_on_release -rw-rw-r-- 1 yz yz 0 5月 28 18:48 tasks
以下,假设主进程LWPID为10000(主进程LWPID同PID),两个子进程LWPID分别为10001和10002。
先将主线程绑定到资源组1,
[yz@yz219 yz]$ pwd /sys/fs/cgroup/cpuset/yz [yz@yz219 yz]$ echo 10000 > 1/tasks [yz@yz219 yz]$ cat 1/tasks 10000
然后创建两个子线程。
可以观察到:
子线程资源组自动继承了主线程的资源组。
[yz@yz219 yz]$ pwd /sys/fs/cgroup/cpuset/yz [yz@yz219 yz]$ cat 1/tasks 10000 10001 10002 [yz@yz219 yz]$ cat 2/tasks
子线程创建成功后,可以为主线程和子线程重新单独指定资源组,例如,可以将主线程单独绑定到资源组2。
[yz@yz219 yz]$ echo 10000 > 2/tasks [yz@yz219 yz]$ cat 1/tasks 10001 10002 [yz@yz219 yz]$ cat 2/tasks 10000