lxcfs/0013-limit-stat-by-quota-period-setting.patch
2019-11-06 19:42:23 +08:00

40 lines
1.3 KiB
Diff

diff -uprN a/bindings.c b/bindings.c
--- a/bindings.c 2019-01-07 16:13:51.465457433 +0800
+++ b/bindings.c 2019-01-07 16:15:37.926452242 +0800
@@ -3747,10 +3747,12 @@ static int proc_stat_read(char *buf, siz
struct fuse_context *fc = fuse_get_context();
struct file_info *d = (struct file_info *)fi->fh;
char *cg = NULL;
+ char *ccg = NULL;
char *cpuset = NULL;
char *line = NULL;
size_t linelen = 0, total_len = 0, rv = 0;
int curcpu = -1; /* cpu numbering starts at 0 */
+ long total_cpus = -1;
unsigned long user = 0, nice = 0, system = 0, idle = 0, iowait = 0, irq = 0, softirq = 0, steal = 0, guest = 0, guest_nice = 0;
unsigned long user_sum = 0, nice_sum = 0, system_sum = 0, idle_sum = 0, iowait_sum = 0,
irq_sum = 0, softirq_sum = 0, steal_sum = 0, guest_sum = 0, guest_nice_sum = 0;
@@ -3783,6 +3785,12 @@ static int proc_stat_read(char *buf, siz
if (!cpuset)
goto err;
+ ccg = get_pid_cgroup(initpid, "cpu");
+ if (ccg) {
+ prune_init_slice(ccg);
+ total_cpus = get_cpu_count(ccg);
+ }
+
f = fopen("/proc/stat", "r");
if (!f)
goto err;
@@ -3820,6 +3828,9 @@ static int proc_stat_read(char *buf, siz
continue;
}
+ if (total_cpus > 0 && curcpu >= (total_cpus-1)) {
+ continue;
+ }
if (sscanf(cpu_char, "%d", &cpu) != 1)
continue;
if (!cpu_in_cpuset(cpu, cpuset))