The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxcfs/pull/360

This e-mail was sent by the LXC bot, direct replies will not reach the author
unless they happen to be subscribed to this list.

=== Description (from pull-request) ===
Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com>
From fd65c77c6e824b4d24b88b706ff4583d6fda8271 Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brau...@ubuntu.com>
Date: Fri, 6 Mar 2020 10:34:40 +0100
Subject: [PATCH 1/4] proc_cpuview: cleanup

Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com>
---
 src/proc_cpuview.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/proc_cpuview.c b/src/proc_cpuview.c
index 39fce6a..47b5a4d 100644
--- a/src/proc_cpuview.c
+++ b/src/proc_cpuview.c
@@ -550,8 +550,8 @@ int cpuview_proc_stat(const char *cg, const char *cpuset,
                if (physcpu >= cg_cpu_usage_size)
                        continue;
 
-               curcpu ++;
-               cpu_cnt ++;
+               curcpu++;
+               cpu_cnt++;
 
                if (!cpu_in_cpuset(physcpu, cpuset)) {
                        for (i = curcpu; i <= physcpu; i++)

From 39f231dabbc5836c10f65aefe0cd549a2d3136e2 Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brau...@ubuntu.com>
Date: Fri, 6 Mar 2020 11:10:04 +0100
Subject: [PATCH 2/4] proc_cpuview: cleanup

Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com>
---
 src/proc_cpuview.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/proc_cpuview.c b/src/proc_cpuview.c
index 47b5a4d..99885aa 100644
--- a/src/proc_cpuview.c
+++ b/src/proc_cpuview.c
@@ -518,16 +518,17 @@ int cpuview_proc_stat(const char *cg, const char *cpuset,
        size_t linelen = 0, total_len = 0;
        int curcpu = -1; /* cpu numbering starts at 0 */
        int physcpu, i;
-       int max_cpus = max_cpu_count(cg), cpu_cnt = 0;
+       int cpu_cnt = 0;
        uint64_t user = 0, nice = 0, system = 0, idle = 0, iowait = 0, irq = 0,
                 softirq = 0, steal = 0, guest = 0, guest_nice = 0;
        uint64_t user_sum = 0, system_sum = 0, idle_sum = 0;
        uint64_t user_surplus = 0, system_surplus = 0;
+       int nprocs, max_cpus;
        ssize_t l;
        uint64_t total_sum, threshold;
        struct cg_proc_stat *stat_node;
-       int nprocs = get_nprocs_conf();
 
+       nprocs = get_nprocs_conf();
        if (cg_cpu_usage_size < nprocs)
                nprocs = cg_cpu_usage_size;
 
@@ -596,10 +597,6 @@ int cpuview_proc_stat(const char *cg, const char *cpuset,
                }
        }
 
-       /* Cannot use more CPUs than is available due to cpuset */
-       if (max_cpus > cpu_cnt)
-               max_cpus = cpu_cnt;
-
        stat_node = find_or_create_proc_stat_node(cg_cpu_usage, nprocs, cg);
        if (!stat_node)
                return log_error(0, "Failed to find/create stat node for %s", 
cg);
@@ -624,6 +621,11 @@ int cpuview_proc_stat(const char *cg, const char *cpuset,
 
        total_sum = diff_cpu_usage(stat_node->usage, cg_cpu_usage, diff, 
nprocs);
 
+       /* Cannot use more CPUs than is available in cpuset. */
+       max_cpus = max_cpu_count(cg);
+       if (max_cpus > cpu_cnt)
+               max_cpus = cpu_cnt;
+
        for (curcpu = 0, i = -1; curcpu < nprocs; curcpu++) {
                stat_node->usage[curcpu].online = cg_cpu_usage[curcpu].online;
 

From f9434b9a1ea0fd4ca32ea5a5cdbece45ad314092 Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brau...@ubuntu.com>
Date: Fri, 6 Mar 2020 13:44:55 +0100
Subject: [PATCH 3/4] proc_cpuview: fix /proc/stat cpu virtualization

Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com>
---
 src/proc_cpuview.c | 16 ++++++++--------
 src/proc_fuse.c    | 18 ++++++++++--------
 2 files changed, 18 insertions(+), 16 deletions(-)

diff --git a/src/proc_cpuview.c b/src/proc_cpuview.c
index 99885aa..1d37b5d 100644
--- a/src/proc_cpuview.c
+++ b/src/proc_cpuview.c
@@ -597,6 +597,11 @@ int cpuview_proc_stat(const char *cg, const char *cpuset,
                }
        }
 
+       /* Cannot use more CPUs than is available in cpuset. */
+       max_cpus = max_cpu_count(cg);
+       if (max_cpus > cpu_cnt || !max_cpus)
+               max_cpus = cpu_cnt;
+
        stat_node = find_or_create_proc_stat_node(cg_cpu_usage, nprocs, cg);
        if (!stat_node)
                return log_error(0, "Failed to find/create stat node for %s", 
cg);
@@ -621,11 +626,6 @@ int cpuview_proc_stat(const char *cg, const char *cpuset,
 
        total_sum = diff_cpu_usage(stat_node->usage, cg_cpu_usage, diff, 
nprocs);
 
-       /* Cannot use more CPUs than is available in cpuset. */
-       max_cpus = max_cpu_count(cg);
-       if (max_cpus > cpu_cnt)
-               max_cpus = cpu_cnt;
-
        for (curcpu = 0, i = -1; curcpu < nprocs; curcpu++) {
                stat_node->usage[curcpu].online = cg_cpu_usage[curcpu].online;
 
@@ -851,7 +851,7 @@ int proc_cpuinfo_read(char *buf, size_t size, off_t offset,
        char *cache = d->buf;
        size_t cache_size = d->buflen;
 
-       if (offset){
+       if (offset) {
                int left;
 
                if (offset > d->size)
@@ -1016,7 +1016,7 @@ int read_cpuacct_usage_all(char *cg, char *cpuset,
 {
        __do_free char *usage_str = NULL;
        __do_free struct cpuacct_usage *cpu_usage = NULL;
-       int cpucount = get_nprocs_conf();
+       int cpucount;
        int i = 0, j = 0, read_pos = 0, read_cnt = 0;
        int ret;
        int cg_cpu;
@@ -1024,7 +1024,6 @@ int read_cpuacct_usage_all(char *cg, char *cpuset,
        int64_t ticks_per_sec;
 
        ticks_per_sec = sysconf(_SC_CLK_TCK);
-
        if (ticks_per_sec < 0 && errno == EINVAL) {
                lxcfs_v(
                        "%s\n",
@@ -1033,6 +1032,7 @@ int read_cpuacct_usage_all(char *cg, char *cpuset,
                return -1;
        }
 
+       cpucount = get_nprocs_conf();
        cpu_usage = malloc(sizeof(struct cpuacct_usage) * cpucount);
        if (!cpu_usage)
                return -ENOMEM;
diff --git a/src/proc_fuse.c b/src/proc_fuse.c
index ce930d9..475e948 100644
--- a/src/proc_fuse.c
+++ b/src/proc_fuse.c
@@ -793,8 +793,16 @@ static int proc_stat_read(char *buf, size_t size, off_t 
offset,
         * If the cpuacct cgroup is present, it is used to calculate the 
container's
         * CPU usage. If not, values from the host's /proc/stat are used.
         */
-       if (read_cpuacct_usage_all(cg, cpuset, &cg_cpu_usage, 
&cg_cpu_usage_size) != 0)
-               lxcfs_v("%s\n", "proc_stat_read failed to read from cpuacct, 
falling back to the host's /proc/stat");
+       if (read_cpuacct_usage_all(cg, cpuset, &cg_cpu_usage, 
&cg_cpu_usage_size) == 0) {
+               if (cgroup_ops->can_use_cpuview(cgroup_ops) && opts && 
opts->use_cfs) {
+                       total_len = cpuview_proc_stat(cg, cpuset, cg_cpu_usage,
+                                                     cg_cpu_usage_size, f,
+                                                     d->buf, d->buflen);
+                       goto out;
+               }
+       } else {
+               lxcfs_v("proc_stat_read failed to read from cpuacct, falling 
back to the host's /proc/stat");
+       }
 
        f = fopen_cached("/proc/stat", "re", &fopen_cache);
        if (!f)
@@ -804,12 +812,6 @@ static int proc_stat_read(char *buf, size_t size, off_t 
offset,
        if (getline(&line, &linelen, f) < 0)
                return log_error(0, "proc_stat_read read first line failed");
 
-       if (cgroup_ops->can_use_cpuview(cgroup_ops) && opts && opts->use_cfs) {
-               total_len = cpuview_proc_stat(cg, cpuset, cg_cpu_usage,
-                                             cg_cpu_usage_size, f, d->buf, 
d->buflen);
-               goto out;
-       }
-
        while (getline(&line, &linelen, f) != -1) {
                ssize_t l;
                char cpu_char[10]; /* That's a lot of cores */

From 3b24c6c4d593eda39ab667c257569fb8b0256dda Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brau...@ubuntu.com>
Date: Fri, 6 Mar 2020 13:49:08 +0100
Subject: [PATCH 4/4] lxcfs: s/disable-cfs/--enable-cfs/g

Switch the logic.

Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com>
---
 src/lxcfs.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/lxcfs.c b/src/lxcfs.c
index 1094270..b614f48 100644
--- a/src/lxcfs.c
+++ b/src/lxcfs.c
@@ -1081,7 +1081,7 @@ int main(int argc, char *argv[])
        }
        opts->swap_off = false;
        opts->use_pidfd = false;
-       opts->use_cfs = true;
+       opts->use_cfs = false;
 
        /* accomodate older init scripts */
        swallow_arg(&argc, argv, "-s");
@@ -1112,9 +1112,9 @@ int main(int argc, char *argv[])
        /* --enable-pidfd */
        opts->use_pidfd = swallow_arg(&argc, argv, "--enable-pidfd");
 
-       /* --disable-cfs */
-       if (swallow_arg(&argc, argv, "--disable-cfs"))
-               opts->use_cfs = false;
+       /* --enable-cfs */
+       if (swallow_arg(&argc, argv, "--enable-cfs"))
+               opts->use_cfs = true;
 
        if (swallow_option(&argc, argv, "-o", &v)) {
                /* Parse multiple values */
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to