OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
cpuinfo_common.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #include "sys/times.h"
6 #include <cstdlib>
7 #include <base/cpuinfo.h>
8 
9 #include <fstream>
10 #include <iostream>
11 
12 extern void LoadAvg(CpuLoad &load);
13 extern uint32_t NumCpus();
14 
16 
17 static void ProcessCpuShare(double &percentage) {
18  struct tms cpu_taken;
19  clock_t now;
20 
21  now = times(&cpu_taken);
22  if (now <= snapshot || cpu_taken.tms_stime < prev_sys_cpu ||
23  cpu_taken.tms_utime < prev_user_cpu) {
24  percentage = -1.0;
25  } else {
26  percentage =
27  (double)((cpu_taken.tms_stime - prev_sys_cpu) +
28  (cpu_taken.tms_utime - prev_user_cpu)) / (now - snapshot);
29  percentage *= 100;
30  percentage /= NumCpus();
31  }
32  snapshot = now;
33  prev_sys_cpu = cpu_taken.tms_stime;
34  prev_user_cpu = cpu_taken.tms_utime;
35 }
36 
37 void CpuLoadData::GetCpuLoadInfo(CpuInfo &info, bool system) {
38  if (system) {
39  LoadAvg(info.load_avg);
41  }
42 
44 
46  info.num_cpu = NumCpus();
47 }
48 
50  struct tms cpu_taken;
51  snapshot = times(&cpu_taken);
52  prev_sys_cpu = cpu_taken.tms_stime;
53  prev_user_cpu = cpu_taken.tms_utime;
54 }
55 
56 void CpuLoadData::FillCpuInfo(CpuLoadInfo &cpu_load_info, bool system) {
57  CpuInfo info;
58  CpuLoadData::GetCpuLoadInfo(info, system);
59  cpu_load_info.set_num_cpu(info.num_cpu);
60  MemInfo mem_info;
61  mem_info.set_virt(info.mem_info.virt);
62  mem_info.set_peakvirt(info.mem_info.peakvirt);
63  mem_info.set_res(info.mem_info.res);
64  cpu_load_info.set_meminfo(mem_info);
65 
66  cpu_load_info.set_cpu_share(info.process_cpu_share);
67 
68  if (system) {
69  CpuLoadAvg load_avg;
70  load_avg.set_one_min_avg(info.load_avg.one_min_avg);
71  load_avg.set_five_min_avg(info.load_avg.five_min_avg);
72  load_avg.set_fifteen_min_avg(info.load_avg.fifteen_min_avg);
73  cpu_load_info.set_cpuload(load_avg);
74 
75  SysMemInfo sys_mem_info;
76  sys_mem_info.set_total(info.sys_mem_info.total);
77  sys_mem_info.set_used(info.sys_mem_info.used);
78  sys_mem_info.set_free(info.sys_mem_info.free);
79  sys_mem_info.set_buffers(info.sys_mem_info.buffers);
80  sys_mem_info.set_cached(info.sys_mem_info.cached);
81  cpu_load_info.set_sys_mem_info(sys_mem_info);
82  }
83 }
84 
85 void CpuLoadInfoReq::HandleRequest() const {
86  CpuLoadInfo cpu_load_info;
87  CpuLoadData::FillCpuInfo(cpu_load_info, true);
88 
89  CpuLoadInfoResp *resp = new CpuLoadInfoResp;
90  resp->set_cpu_info(cpu_load_info);
91  resp->set_context(context());
92  resp->Response();
93 }
94 
95 void PopulateProcessCpuInfo(const CpuLoadInfo &cpu_load_info,
96  ProcessCpuInfo *pinfo) {
97  pinfo->set_module_id(Sandesh::module());
98  pinfo->set_inst_id(Sandesh::instance_id());
99  pinfo->set_cpu_share(cpu_load_info.get_cpu_share());
100  pinfo->set_mem_virt(cpu_load_info.get_meminfo().get_virt());
101  pinfo->set_mem_res(cpu_load_info.get_meminfo().get_res());
102 }
void PopulateProcessCpuInfo(const CpuLoadInfo &cpu_load_info, ProcessCpuInfo *pinfo)
double fifteen_min_avg
Definition: cpuinfo.h:15
static void ProcessCpuShare(double &percentage)
void SystemMemInfo(SystemMemInfo &info)
Definition: cpuinfo.cc:77
static void FillCpuInfo(CpuLoadInfo &info, bool system)
static void Init()
uint32_t res
Definition: cpuinfo.h:21
double five_min_avg
Definition: cpuinfo.h:14
double one_min_avg
Definition: cpuinfo.h:13
static clock_t snapshot
CpuLoad load_avg
Definition: cpuinfo.h:36
static void GetCpuLoadInfo(CpuInfo &info, bool system)
uint32_t used
Definition: cpuinfo.h:26
static std::string module()
Definition: p/sandesh.h:291
void ProcessMemInfo(ProcessMemInfo &info)
Definition: cpuinfo.cc:50
uint32_t peakvirt
Definition: cpuinfo.h:20
uint32_t buffers
Definition: cpuinfo.h:28
SystemMemInfo sys_mem_info
Definition: cpuinfo.h:35
static clock_t prev_sys_cpu
uint32_t num_cpu
Definition: cpuinfo.h:33
ProcessMemInfo mem_info
Definition: cpuinfo.h:34
void LoadAvg(CpuLoad &load)
Definition: cpuinfo.cc:37
uint32_t cached
Definition: cpuinfo.h:29
uint32_t total
Definition: cpuinfo.h:25
double process_cpu_share
Definition: cpuinfo.h:37
uint32_t free
Definition: cpuinfo.h:27
uint32_t NumCpus()
Definition: cpuinfo.cc:18
static clock_t prev_user_cpu
static std::string instance_id()
Definition: p/sandesh.h:293
uint32_t virt
Definition: cpuinfo.h:19