scheduler05
测试程序
$ cat multithread.c
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <sys/types.h>
void* thread_fun(void* param)
{
printf("thread pid:%d, tid:%lu\n",getpid(), pthread_self());
while(1);
}
int main(int argc, char *argv[])
{
int n = atoi(argv[1]);
pthread_t tid[n];
int i;
printf("main pid:%d, tid:%lu\n",getpid(), pthread_self());
for (i = 0; i < n; i++)
pthread_create(&tid[i],NULL,thread_fun,NULL);
for (i = 0; i < n; i++)
pthread_join(tid[i],NULL);
return 0;
}autogroup disabled
通过如下命令,关闭autogroup功能
然后执行如下命令,一个进程有4个线程,另一个进程有8个线程,4线程的CPU% : 8线程的CPU% = 1 : 2
将两个进程分别放入A与B群,因为默认A群与B群的权重都是1024,CFS调度算法平分CPU%给两个群,如下:
将A群权重设置为512,即 A群的权重 : B群的权重 = A群的CPU% : B群的CPU% = 1 : 2
将A群的最大CPU%设置为110% ,B群的最大CPU%设置为10%
autogroup enabled
通过如下命令,开启autogroup功能,每一个session就会自动创建一个cgroups,像ubntun的session就是bash。
开启autogroup功能后
Android和cgroup
Docker和cgroup
Docker使用cgroup调配容器的CPU资源
systemd和cgroup
默认时,不创建新cgroups,位于/cgroups下,如下:
如下,此时会创建新cgroups,设置新cgroups的最大CPU%为25%
修改新cgroups的权重为600,最大内存为500M,如下:
以上设置都是通过命令行操作,实际操作中都是在/lib/systemd/system/*.service文件配置,系统开机后自动加载服务。
cpuset和cgroup
cpusets提供了一种Linux内核机制来约束一个进程或一组进程使用哪些cpu和内存节点。
The root cpuset contains all the systems CPUs and Menmory Nodes
cpuset.cpus : list of CPUs in that cpuset
cpuset.mems : list of Memory Nodes in that cpuset
此方法一般用在NUMA服务器中,设置某进程只能在某CPU和某内存中工作,如下:
Last updated
Was this helpful?