-/* ------------------------------------------------
-Copyright 2014 AT&T Intellectual Property
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- ------------------------------------------- */
-
-#ifndef __QNODE_H_DEFINED_
-#define __QNODE_H_DEFINED_
-
-#include<string>
-
-struct perf_struct{
- int n_samples;
- int init_discard;
- int init_time;
- int last_update;
- unsigned long long int init_stime;
- unsigned long long int init_utime;
- unsigned long long int total_stime;
- unsigned long long int total_utime;
- double max_stime;
- double max_utime;
- double max_time;
- unsigned long long int max_vm_size;
- unsigned long long int max_rss;
-
- void init(){
- n_samples = 0;
- init_time = 0;
- init_stime = 0;
- init_utime = 0;
- total_stime = 0;
- total_utime = 0;
- max_stime = 0.0;
- max_utime = 0.0;
- max_time = 0.0;
- max_vm_size = 0;
- max_rss = 0;
- last_update = -1;
- }
-
- perf_struct(){
- init();
- }
- perf_struct(int d){
- init();
- init_discard = d;
- }
-
- bool update(int t, unsigned long long int u, unsigned long long int s,
- unsigned long long int v, unsigned long long int r){
- if(init_discard>0){
- init_discard--;
- return false;;
- }
-
-
- if(v>max_vm_size)
- max_vm_size = v;
- if(r>max_rss)
- max_rss = r;
- if(last_update<0){
- init_time = t;
- init_stime = s;
- init_utime = u;
- }else{
- if(t<=last_update || u<total_utime || s<total_stime){
- return true;
- }
-
- double tmps,tmpu,tmpt;
- tmps = (double)((s-total_stime))/(t-last_update);
- tmpu = (double)((u-total_utime))/(t-last_update);
- tmpt = tmps+tmpu;
- if(tmps>max_stime)
- max_stime = tmps;
- if(tmpu>max_utime)
- max_utime = tmpu;
- if(tmpt>max_time)
- max_time = tmpt;
- }
- total_stime = s;
- total_utime = u;
- last_update = t;
-
- return false;
- }
-
- std::string to_string(){
- char ret[1000];
- if(last_update - init_time>0){
- sprintf(ret,"stime=%lf, utime=%lf, time=%lf max_stime=%lf, max_utime=%lf, max_time=%lf, max_vmsize=%lld, max_rss = %lld",
- (double)(total_stime-init_stime)/(last_update - init_time),
- (double)(total_utime-init_utime)/(last_update - init_time),
- (double)(total_stime-init_stime)/(last_update - init_time) + (double)(total_utime-init_utime)/(last_update - init_time),
- max_stime,max_utime,max_time,
- max_vm_size,max_rss
- );
- return ret;
- }
- return("(no perf results)");
- }
-
- static std::string to_csv_hdr(){
- return "avg_system_time,avg_user_time,avg_cpu_time,max_sys_time,max_user_time,max_total_time,max_vm_size,max_rss";
- }
-
- std::string to_csv(){
- char ret[1000];
- if(last_update - init_time>0){
- sprintf(ret,"%lf,%lf,%lf,%lf,%lf,%lf,%lld,%lld",
- (double)(total_stime-init_stime)/(last_update - init_time),
- (double)(total_utime-init_utime)/(last_update - init_time),
- (double)(total_stime-init_stime)/(last_update - init_time) + (double)(total_utime-init_utime)/(last_update - init_time),
- max_stime,max_utime,max_time,
- max_vm_size,max_rss
- );
- return ret;
- }
- return(",,,,,,");
- }
-
- double avg_cpu_time(){
- return ((double)((total_stime-init_stime)+(total_utime-init_utime))/(last_update - init_time))/100.0;
- }
-
- bool is_valid(){
- return last_update > 0;
- }
-};
-
-
-
-
-struct field_str{
- std::string name;
- int pos;
- std::string type;
- std::string mods;
-
- field_str(){};
- field_str(std::string n, int p, std::string t, std::string m){
- name=n;
- pos=p;
- type=t;
- mods=m;
- }
-};
-
-
-struct qnode{
- std::string name;
- std::string executable_name;
- std::string qnode_type;
- int aggr_tbl_size;
- std::vector<field_str *> fields;
- std::vector<std::string> reads_from;
- std::vector<int> reads_from_idx;
- std::vector<int> sources_to_idx;
- std::string src_interface;
- int par_index;
- int start_tick, end_tick;
-
- unsigned long long int in_tup,out_tup,out_sz;
- unsigned long long int accepted_tup,cycles,collisions,evictions;
- double inferred_in_sz;
- perf_struct *perf;
-
- qnode(int d){
- aggr_tbl_size = 0;
- in_tup = 0;
- out_tup = 0;
- accepted_tup = 0;
- cycles = 0;
- collisions = 0;
- evictions = 0;
- inferred_in_sz = 0.0;
- par_index = 0;
- start_tick = end_tick = -1;
- perf = new perf_struct(d);
- };
-
- qnode(std::string type, std::string n,int d){
- qnode_type=type;
- name=n;
- aggr_tbl_size = 0;
-
- in_tup = 0;
- out_tup = 0;
- out_sz = 0;
- accepted_tup = 0;
- cycles = 0;
- collisions = 0;
- evictions = 0;
- inferred_in_sz = 0.0;
- par_index = 0;
- start_tick = end_tick = -1;
- perf = new perf_struct(d);
- }
-
- double output_rate(){
- if(end_tick == start_tick){
- return 0.0;
- }
- return( ((double)out_sz)/(end_tick-start_tick) );
- }
-
- void add_field(field_str *fld){
- fields.push_back(fld);
- }
-
- void add_source(std::string src){
- reads_from.push_back(src);
- }
-
-};
-
-
-
-
-
-#endif
+/* ------------------------------------------------\r
+Copyright 2014 AT&T Intellectual Property\r
+ Licensed under the Apache License, Version 2.0 (the "License");\r
+ you may not use this file except in compliance with the License.\r
+ You may obtain a copy of the License at\r
+\r
+ http://www.apache.org/licenses/LICENSE-2.0\r
+\r
+ Unless required by applicable law or agreed to in writing, software\r
+ distributed under the License is distributed on an "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ See the License for the specific language governing permissions and\r
+ limitations under the License.\r
+ ------------------------------------------- */\r
+\r
+#ifndef __QNODE_H_DEFINED_\r
+#define __QNODE_H_DEFINED_\r
+\r
+#include<string>\r
+\r
+struct perf_struct{\r
+ int n_samples;\r
+ int init_discard;\r
+ int init_time;\r
+ int last_update;\r
+ unsigned long long int init_stime;\r
+ unsigned long long int init_utime;\r
+ unsigned long long int total_stime;\r
+ unsigned long long int total_utime;\r
+ double max_stime;\r
+ double max_utime;\r
+ double max_time;\r
+ unsigned long long int max_vm_size;\r
+ unsigned long long int max_rss;\r
+\r
+ void init(){\r
+ n_samples = 0;\r
+ init_time = 0;\r
+ init_stime = 0;\r
+ init_utime = 0;\r
+ total_stime = 0;\r
+ total_utime = 0;\r
+ max_stime = 0.0;\r
+ max_utime = 0.0;\r
+ max_time = 0.0;\r
+ max_vm_size = 0;\r
+ max_rss = 0;\r
+ last_update = -1;\r
+ }\r
+\r
+ perf_struct(){\r
+ init();\r
+ }\r
+ perf_struct(int d){\r
+ init();\r
+ init_discard = d;\r
+ }\r
+\r
+ bool update(int t, unsigned long long int u, unsigned long long int s,\r
+ unsigned long long int v, unsigned long long int r){\r
+ if(init_discard>0){\r
+ init_discard--;\r
+ return false;;\r
+ }\r
+\r
+\r
+ if(v>max_vm_size)\r
+ max_vm_size = v;\r
+ if(r>max_rss)\r
+ max_rss = r;\r
+ if(last_update<0){\r
+ init_time = t;\r
+ init_stime = s;\r
+ init_utime = u;\r
+ }else{\r
+ if(t<=last_update || u<total_utime || s<total_stime){\r
+ return true;\r
+ }\r
+\r
+ double tmps,tmpu,tmpt;\r
+ tmps = (double)((s-total_stime))/(t-last_update);\r
+ tmpu = (double)((u-total_utime))/(t-last_update);\r
+ tmpt = tmps+tmpu;\r
+ if(tmps>max_stime)\r
+ max_stime = tmps;\r
+ if(tmpu>max_utime)\r
+ max_utime = tmpu;\r
+ if(tmpt>max_time)\r
+ max_time = tmpt;\r
+ }\r
+ total_stime = s;\r
+ total_utime = u;\r
+ last_update = t;\r
+\r
+ return false;\r
+ }\r
+\r
+ std::string to_string(){\r
+ char ret[1000];\r
+ if(last_update - init_time>0){\r
+ sprintf(ret,"stime=%lf, utime=%lf, time=%lf max_stime=%lf, max_utime=%lf, max_time=%lf, max_vmsize=%lld, max_rss = %lld",\r
+ (double)(total_stime-init_stime)/(last_update - init_time),\r
+ (double)(total_utime-init_utime)/(last_update - init_time),\r
+ (double)(total_stime-init_stime)/(last_update - init_time) + (double)(total_utime-init_utime)/(last_update - init_time),\r
+ max_stime,max_utime,max_time,\r
+ max_vm_size,max_rss\r
+ );\r
+ return ret;\r
+ }\r
+ return("(no perf results)");\r
+ }\r
+\r
+ static std::string to_csv_hdr(){\r
+ return "avg_system_time,avg_user_time,avg_cpu_time,max_sys_time,max_user_time,max_total_time,max_vm_size,max_rss";\r
+ }\r
+\r
+ std::string to_csv(){\r
+ char ret[1000];\r
+ if(last_update - init_time>0){\r
+ sprintf(ret,"%lf,%lf,%lf,%lf,%lf,%lf,%lld,%lld",\r
+ (double)(total_stime-init_stime)/(last_update - init_time),\r
+ (double)(total_utime-init_utime)/(last_update - init_time),\r
+ (double)(total_stime-init_stime)/(last_update - init_time) + (double)(total_utime-init_utime)/(last_update - init_time),\r
+ max_stime,max_utime,max_time,\r
+ max_vm_size,max_rss\r
+ );\r
+ return ret;\r
+ }\r
+ return(",,,,,,");\r
+ }\r
+\r
+ double avg_cpu_time(){\r
+ return ((double)((total_stime-init_stime)+(total_utime-init_utime))/(last_update - init_time))/100.0;\r
+ }\r
+\r
+ bool is_valid(){\r
+ return last_update > 0;\r
+ }\r
+};\r
+\r
+\r
+\r
+\r
+struct field_str{\r
+ std::string name;\r
+ int pos;\r
+ std::string type;\r
+ std::string mods;\r
+\r
+ field_str(){};\r
+ field_str(std::string n, int p, std::string t, std::string m){\r
+ name=n;\r
+ pos=p;\r
+ type=t;\r
+ mods=m;\r
+ }\r
+};\r
+\r
+\r
+struct qnode{\r
+ std::string name;\r
+ std::string executable_name;\r
+ std::string qnode_type;\r
+ int aggr_tbl_size;\r
+ std::vector<field_str *> fields;\r
+ std::vector<std::string> reads_from;\r
+ std::vector<int> reads_from_idx;\r
+ std::vector<int> sources_to_idx;\r
+ std::string src_interface;\r
+ int par_index;\r
+ int start_tick, end_tick;\r
+\r
+ unsigned long long int in_tup,out_tup,out_sz;\r
+ unsigned long long int accepted_tup,cycles,collisions,evictions;\r
+ double inferred_in_sz;\r
+ perf_struct *perf;\r
+\r
+ qnode(int d){\r
+ aggr_tbl_size = 0;\r
+ in_tup = 0;\r
+ out_tup = 0;\r
+ accepted_tup = 0;\r
+ cycles = 0;\r
+ collisions = 0;\r
+ evictions = 0;\r
+ inferred_in_sz = 0.0;\r
+ par_index = 0;\r
+ start_tick = end_tick = -1;\r
+ perf = new perf_struct(d);\r
+ };\r
+\r
+ qnode(std::string type, std::string n,int d){\r
+ qnode_type=type;\r
+ name=n;\r
+ aggr_tbl_size = 0;\r
+\r
+ in_tup = 0;\r
+ out_tup = 0;\r
+ out_sz = 0;\r
+ accepted_tup = 0;\r
+ cycles = 0;\r
+ collisions = 0;\r
+ evictions = 0;\r
+ inferred_in_sz = 0.0;\r
+ par_index = 0;\r
+ start_tick = end_tick = -1;\r
+ perf = new perf_struct(d);\r
+ }\r
+\r
+ double output_rate(){\r
+ if(end_tick == start_tick){\r
+ return 0.0;\r
+ }\r
+ return( ((double)out_sz)/(end_tick-start_tick) );\r
+ }\r
+\r
+ void add_field(field_str *fld){\r
+ fields.push_back(fld);\r
+ }\r
+\r
+ void add_source(std::string src){\r
+ reads_from.push_back(src);\r
+ }\r
+\r
+};\r
+\r
+\r
+\r
+\r
+\r
+#endif\r