-/* ------------------------------------------------\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
+/* ------------------------------------------------
+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