[Devel] [PATCH rh8 1/5] ve: Virtualize sysinfo
Konstantin Khorenko
khorenko at virtuozzo.com
Thu Oct 8 18:21:59 MSK 2020
From: Kirill Tkhai <ktkhai at virtuozzo.com>
Extracted from "Initial patch".
Signed-off-by: Kirill Tkhai <ktkhai at virtuozzo.com>
(cherry picked from vz7 commit e55cd51304b3271a2adaf43de9b9a5a7be34541e)
Signed-off-by: Konstantin Khorenko <khorenko at virtuozzo.com>
Port to vz8 notes:
* virtinfo_notifier_call (bc_fill_sysinfo()) is substituted by
direct call to si_meminfo_ve() and only for not VE0.
* "avenrun" is not virtualized yet - need to port first commit
715f311fdb4a ("sched: Account task_group::cpustat,taskstats,avenrun")
* ve_struct.real_start_time is u64 now instead of timespec
---
kernel/sys.c | 28 +++++++++++++++++++++++-----
1 file changed, 23 insertions(+), 5 deletions(-)
diff --git a/kernel/sys.c b/kernel/sys.c
index cfde07d0ba9f..2644090f8d4b 100644
--- a/kernel/sys.c
+++ b/kernel/sys.c
@@ -2545,6 +2545,8 @@ SYSCALL_DEFINE3(getcpu, unsigned __user *, cpup, unsigned __user *, nodep,
return err ? -EFAULT : 0;
}
+extern void si_meminfo_ve(struct sysinfo *si, struct ve_struct *ve);
+
/**
* do_sysinfo - fill in sysinfo struct
* @info: pointer to buffer to fill
@@ -2554,18 +2556,34 @@ static int do_sysinfo(struct sysinfo *info)
unsigned long mem_total, sav_total;
unsigned int mem_unit, bitcount;
struct timespec tp;
+ struct ve_struct *ve;
memset(info, 0, sizeof(struct sysinfo));
+ si_meminfo(info);
+ si_swapinfo(info);
+
get_monotonic_boottime(&tp);
- info->uptime = tp.tv_sec + (tp.tv_nsec ? 1 : 0);
- get_avenrun(info->loads, 0, SI_LOAD_SHIFT - FSHIFT);
+ ve = get_exec_env();
+ if (ve_is_super(ve)) {
+ info->uptime = tp.tv_sec + (tp.tv_nsec ? 1 : 0);
+ get_avenrun(info->loads, 0, SI_LOAD_SHIFT - FSHIFT);
+
+ info->procs = nr_threads;
+ } else {
+ si_meminfo_ve(info, ve);
+ info->uptime = tp.tv_sec + (tp.tv_nsec ? 1 : 0) -
+ ve->real_start_time / NSEC_PER_SEC;
- info->procs = nr_threads;
+ info->procs = nr_threads_ve(ve);
- si_meminfo(info);
- si_swapinfo(info);
+#if 0
+FIXME after
+715f311fdb4a ("sched: Account task_group::cpustat,taskstats,avenrun") is ported
+ get_avenrun_ve(info->loads, 0, SI_LOAD_SHIFT - FSHIFT);
+#endif
+ }
/*
* If the sum of all the available memory (i.e. ram + swap)
--
2.28.0
More information about the Devel
mailing list