在一个计算机系统中,CPU是一个有限的核心的资源,有时为了充分利用CPU的资源,我们会把业务混合部署到一台机器上,这些业务有可能包括核心业务和非核心业务,为了不影响核心业务,我们需要限制非核心业务CPU资源的利用率。
背后原理
如果一个进程的CPU利用率是40%,表示这个进程占用了40%的CPU时间。那么为了限制进程的CPU不超过40%,我们可以让这个进程运行40%的时间,然后停止60%的时间。通过给进程发送SIGCONT和SIGSTOP信号可以控制进程的启停。
代码示例
根据上面的原理,代码如下:
#include <errno.h>
#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include <vector>
#include <getopt.h>
static int g_process_count = 8;
static int g_cpu_usage = 80;
static std::vector<pid_t> g_child_processes;
static int g_show_usage = 0;
static void show_usage()
{
fprintf(stdout,
"Usage: cpu [--process-count=N] [--cpu-usage=N]\n"
"\n"
" -c, --process-count=N process count\n"
" -u, --c