Skip to content

Commit

Permalink
cpuinfo changes for windows : new windows specific code as well as re…
Browse files Browse the repository at this point in the history
…factoring

Partial-Bug: #1803774

Change-Id: If3f69201b2f16ba6c5dbbed63f76b3715cc906d0
  • Loading branch information
U-JNPR\sagarc committed Feb 8, 2019
1 parent d3a8829 commit ae921be
Show file tree
Hide file tree
Showing 5 changed files with 251 additions and 218 deletions.
5 changes: 4 additions & 1 deletion base/SConscript
Expand Up @@ -34,7 +34,10 @@ for src in CpuInfoSandeshGenSrcs:
obj = env.Object(objname, src)
cpuinfo_sandesh_files_.append(obj)

libcpuinfo = env.Library('cpuinfo', ['cpuinfo.cc'] + cpuinfo_sandesh_files_)
if sys.platform == 'win32':
libcpuinfo = env.Library('cpuinfo', ['cpuinfo_common.cc', 'windows/cpuinfo.cc'] + cpuinfo_sandesh_files_)
else:
libcpuinfo = env.Library('cpuinfo', ['cpuinfo_common.cc', 'linux/cpuinfo.cc'] + cpuinfo_sandesh_files_)

task = except_env.Object('task.o', 'task.cc')
timer = timer_env.Object('timer.o', 'timer.cc')
Expand Down
217 changes: 0 additions & 217 deletions base/cpuinfo.cc

This file was deleted.

102 changes: 102 additions & 0 deletions base/cpuinfo_common.cc
@@ -0,0 +1,102 @@
/*
* Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
*/

#include "sys/times.h"
#include <cstdlib>
#include <base/cpuinfo.h>

#include <fstream>
#include <iostream>

extern void LoadAvg(CpuLoad &load);
extern uint32_t NumCpus();

static clock_t snapshot, prev_sys_cpu, prev_user_cpu;

static void ProcessCpuShare(double &percentage) {
struct tms cpu_taken;
clock_t now;

now = times(&cpu_taken);
if (now <= snapshot || cpu_taken.tms_stime < prev_sys_cpu ||
cpu_taken.tms_utime < prev_user_cpu) {
percentage = -1.0;
} else {
percentage =
(double)((cpu_taken.tms_stime - prev_sys_cpu) +
(cpu_taken.tms_utime - prev_user_cpu)) / (now - snapshot);
percentage *= 100;
percentage /= NumCpus();
}
snapshot = now;
prev_sys_cpu = cpu_taken.tms_stime;
prev_user_cpu = cpu_taken.tms_utime;
}

void CpuLoadData::GetCpuLoadInfo(CpuInfo &info, bool system) {
if (system) {
LoadAvg(info.load_avg);
SystemMemInfo(info.sys_mem_info);
}

ProcessMemInfo(info.mem_info);

ProcessCpuShare(info.process_cpu_share);
info.num_cpu = NumCpus();
}

void CpuLoadData::Init() {
struct tms cpu_taken;
snapshot = times(&cpu_taken);
prev_sys_cpu = cpu_taken.tms_stime;
prev_user_cpu = cpu_taken.tms_utime;
}

void CpuLoadData::FillCpuInfo(CpuLoadInfo &cpu_load_info, bool system) {
CpuInfo info;
CpuLoadData::GetCpuLoadInfo(info, system);
cpu_load_info.set_num_cpu(info.num_cpu);
MemInfo mem_info;
mem_info.set_virt(info.mem_info.virt);
mem_info.set_peakvirt(info.mem_info.peakvirt);
mem_info.set_res(info.mem_info.res);
cpu_load_info.set_meminfo(mem_info);

cpu_load_info.set_cpu_share(info.process_cpu_share);

if (system) {
CpuLoadAvg load_avg;
load_avg.set_one_min_avg(info.load_avg.one_min_avg);
load_avg.set_five_min_avg(info.load_avg.five_min_avg);
load_avg.set_fifteen_min_avg(info.load_avg.fifteen_min_avg);
cpu_load_info.set_cpuload(load_avg);

SysMemInfo sys_mem_info;
sys_mem_info.set_total(info.sys_mem_info.total);
sys_mem_info.set_used(info.sys_mem_info.used);
sys_mem_info.set_free(info.sys_mem_info.free);
sys_mem_info.set_buffers(info.sys_mem_info.buffers);
sys_mem_info.set_cached(info.sys_mem_info.cached);
cpu_load_info.set_sys_mem_info(sys_mem_info);
}
}

void CpuLoadInfoReq::HandleRequest() const {
CpuLoadInfo cpu_load_info;
CpuLoadData::FillCpuInfo(cpu_load_info, true);

CpuLoadInfoResp *resp = new CpuLoadInfoResp;
resp->set_cpu_info(cpu_load_info);
resp->set_context(context());
resp->Response();
}

void PopulateProcessCpuInfo(const CpuLoadInfo &cpu_load_info,
ProcessCpuInfo *pinfo) {
pinfo->set_module_id(Sandesh::module());
pinfo->set_inst_id(Sandesh::instance_id());
pinfo->set_cpu_share(cpu_load_info.get_cpu_share());
pinfo->set_mem_virt(cpu_load_info.get_meminfo().get_virt());
pinfo->set_mem_res(cpu_load_info.get_meminfo().get_res());
}

0 comments on commit ae921be

Please sign in to comment.