bzr branch
http://darksoft.org/webbzr/xmlbench/trunk
1
by Suren A. Chilingaryan
Initial import |
1 |
#include <stdlib.h> |
2 |
#include <unistd.h> |
|
3 |
#include <sys/types.h> |
|
4 |
#include <sys/stat.h> |
|
5 |
||
6 |
#include "../tools/disp2.h" |
|
7 |
#include "../xmlgen/xmlgen.h" |
|
8 |
#include "../xmlgen/opcgen.h" |
|
9 |
||
10 |
struct TestData { |
|
11 |
unsigned long iterations; |
|
12 |
||
13 |
char *fn; |
|
14 |
char *xml; |
|
15 |
unsigned long xmllen; |
|
16 |
unsigned long size; |
|
17 |
};
|
|
18 |
||
19 |
char *ReadFile(char *fn) { |
|
20 |
FILE *f; |
|
21 |
struct stat st; |
|
22 |
char *buf; |
|
23 |
||
24 |
f=fopen(fn,"r"); |
|
25 |
if (!f) { |
|
26 |
printf("Can't open XML file!\n"); |
|
27 |
exit(1); |
|
28 |
}
|
|
29 |
fstat(f->_fileno,&st); |
|
30 |
buf=(char*)malloc(st.st_size+1+sizeof(unsigned long)); |
|
31 |
if (!buf) { |
|
32 |
printf("Can't allocate memory!\n"); |
|
33 |
exit(1); |
|
34 |
}
|
|
35 |
((unsigned long*)buf)[0]=st.st_size; |
|
36 |
fread(buf+sizeof(unsigned long),st.st_size,1,f); |
|
37 |
fclose(f); |
|
38 |
buf[st.st_size+sizeof(unsigned long)]=0; |
|
39 |
return buf; |
|
40 |
}
|
|
41 |
||
42 |
void ReadConfig(struct TestData *td) { |
|
43 |
FILE *f; |
|
44 |
f=fopen("config","r"); |
|
45 |
if (!f) { |
|
46 |
printf("Error opening config file!\n"); |
|
47 |
exit(1); |
|
48 |
}
|
|
49 |
fscanf(f,"%lu",&(td->iterations)); |
|
50 |
fclose(f); |
|
51 |
}
|
|
52 |
||
53 |
void parseXML(struct TestData *td, unsigned long iter); |
|
54 |
void signXML(struct TestData *td, unsigned long iter); |
|
55 |
void verifyXML(struct TestData *td, unsigned long iter); |
|
56 |
void encryptXML(struct TestData *td, unsigned long iter); |
|
57 |
void decryptXML(struct TestData *td, unsigned long iter); |
|
58 |
void initXML(struct TestData *td); |
|
59 |
void initXML_Security(struct TestData *td); |
|
60 |
void releaseXML(struct TestData *td); |
|
61 |
||
62 |
||
63 |
void Usage(char *myname) { |
|
64 |
printf("Usage:\n\t%s <iterations> [<xml file>|xmlgen|opcgen] [<size>]\n",myname); |
|
65 |
exit(0); |
|
66 |
}
|
|
67 |
||
68 |
||
69 |
int Test(int argc, char *argv[]) { |
|
70 |
int i,j; |
|
71 |
struct timeval pre_time,post_time; |
|
72 |
struct timezone tz; |
|
73 |
unsigned long init_time,init_time2,time; |
|
74 |
double init_dtime,init_d; |
|
75 |
unsigned long parse_s; |
|
76 |
double parse_m,parse_d; |
|
77 |
unsigned char mode=0; /* 0 - file, 1 - xmlgen, 2 - opcgen */ |
|
78 |
struct TestData td; |
|
79 |
char *xmlbuf,*xsdbuf; |
|
80 |
disp ds,de; |
|
81 |
||
2
by Suren A. Chilingaryan
Intel, Tango, Phobos, and RapidXML parsers; Memory benchmark scripts |
82 |
int execute_xml = 1; |
83 |
int execute_security = 1; |
|
84 |
||
85 |
if (getenv("skip_security")) { |
|
86 |
execute_security = 0; |
|
87 |
if (getenv("skip_xml")) execute_xml = 0; |
|
88 |
}
|
|
89 |
||
1
by Suren A. Chilingaryan
Initial import |
90 |
if ((argc<3)||(argc>4)) Usage(argv[0]); |
91 |
||
92 |
td.iterations = atol(argv[1]); |
|
2
by Suren A. Chilingaryan
Intel, Tango, Phobos, and RapidXML parsers; Memory benchmark scripts |
93 |
if (td.iterations<0) Usage(argv[0]); |
1
by Suren A. Chilingaryan
Initial import |
94 |
|
95 |
if (!strncmp(argv[2],"xmlgen",6)) mode=1; |
|
96 |
else if (!strncmp(argv[2],"opcgen",6)) mode=2; |
|
97 |
td.fn=argv[2]; |
|
98 |
||
99 |
if (mode) { |
|
100 |
td.size = atol(argv[3]); |
|
101 |
if (td.size<=0) Usage(argv[0]); |
|
102 |
||
103 |
rnd_init(); /* Initialising Random Generator */ |
|
104 |
}
|
|
105 |
||
106 |
switch (mode) { |
|
107 |
case 0: |
|
108 |
xmlbuf=ReadFile(argv[2]); |
|
109 |
if (!xmlbuf) { |
|
110 |
fprintf(stderr,"Can't read XML file!\n"); |
|
111 |
exit(0); |
|
112 |
}
|
|
113 |
td.xml=xmlbuf+sizeof(unsigned long); |
|
114 |
td.xmllen=((unsigned long*)xmlbuf)[0]; |
|
115 |
break; |
|
116 |
case 1: |
|
117 |
xmlbuf=xmlgen_init(td.size); |
|
118 |
td.xml=xmlbuf; |
|
119 |
td.xmllen=xmlgen(); |
|
120 |
break; |
|
121 |
case 2: |
|
122 |
xmlbuf=opcgen_init(td.size); |
|
123 |
td.xml=xmlbuf; |
|
124 |
td.xmllen=opcgen(); |
|
125 |
break; |
|
126 |
}
|
|
127 |
||
128 |
initXML(&td); |
|
2
by Suren A. Chilingaryan
Intel, Tango, Phobos, and RapidXML parsers; Memory benchmark scripts |
129 |
if (execute_xml) parseXML(&td,0); |
1
by Suren A. Chilingaryan
Initial import |
130 |
|
131 |
gettimeofday(&pre_time,NULL); |
|
132 |
initXML_Security(&td); |
|
133 |
gettimeofday(&post_time,NULL); |
|
134 |
init_time=(post_time.tv_sec-pre_time.tv_sec)*1000000+(post_time.tv_usec-pre_time.tv_usec); |
|
135 |
||
136 |
gettimeofday(&pre_time,NULL); |
|
2
by Suren A. Chilingaryan
Intel, Tango, Phobos, and RapidXML parsers; Memory benchmark scripts |
137 |
if (execute_security) { |
138 |
encryptXML(&td,0); |
|
139 |
decryptXML(&td,0); |
|
140 |
signXML(&td,0); |
|
141 |
verifyXML(&td,0); |
|
142 |
}
|
|
1
by Suren A. Chilingaryan
Initial import |
143 |
gettimeofday(&post_time,NULL); |
144 |
init_time2=(post_time.tv_sec-pre_time.tv_sec)*1000000+(post_time.tv_usec-pre_time.tv_usec); |
|
145 |
||
146 |
ds=disp_init(); |
|
147 |
de=disp_init(); |
|
148 |
for (i=1;i<=td.iterations;i++) { |
|
149 |
switch (mode) { |
|
150 |
case 1: |
|
151 |
td.xmllen=xmlgen(); |
|
152 |
break; |
|
153 |
case 2: |
|
154 |
td.xmllen=opcgen(); |
|
155 |
break; |
|
156 |
}
|
|
2
by Suren A. Chilingaryan
Intel, Tango, Phobos, and RapidXML parsers; Memory benchmark scripts |
157 |
if (execute_xml) parseXML(&td,i); |
158 |
||
1
by Suren A. Chilingaryan
Initial import |
159 |
gettimeofday(&pre_time,NULL); |
2
by Suren A. Chilingaryan
Intel, Tango, Phobos, and RapidXML parsers; Memory benchmark scripts |
160 |
if (execute_security) { |
161 |
encryptXML(&td,i); |
|
162 |
decryptXML(&td,i); |
|
163 |
}
|
|
1
by Suren A. Chilingaryan
Initial import |
164 |
gettimeofday(&post_time,NULL); |
165 |
time=(post_time.tv_sec-pre_time.tv_sec)*1000000+(post_time.tv_usec-pre_time.tv_usec); |
|
166 |
disp_event(de,time); |
|
167 |
// printf("%lu, ",time);
|
|
168 |
||
169 |
gettimeofday(&pre_time,NULL); |
|
2
by Suren A. Chilingaryan
Intel, Tango, Phobos, and RapidXML parsers; Memory benchmark scripts |
170 |
if (execute_security) { |
171 |
signXML(&td,i); |
|
172 |
verifyXML(&td,i); |
|
173 |
}
|
|
1
by Suren A. Chilingaryan
Initial import |
174 |
gettimeofday(&post_time,NULL); |
175 |
time=(post_time.tv_sec-pre_time.tv_sec)*1000000+(post_time.tv_usec-pre_time.tv_usec); |
|
176 |
disp_event(ds,time); |
|
177 |
||
178 |
// printf("%lu\n",time);
|
|
179 |
}
|
|
180 |
disp_post(de); |
|
181 |
disp_post(ds); |
|
182 |
||
183 |
releaseXML(&td); |
|
184 |
||
185 |
switch (mode) { |
|
186 |
case 0: |
|
187 |
free(xmlbuf); |
|
188 |
break; |
|
189 |
case 1: |
|
190 |
xmlgen_deinit(); |
|
191 |
break; |
|
192 |
case 2: |
|
193 |
opcgen_deinit(); |
|
194 |
break; |
|
195 |
}
|
|
196 |
||
197 |
if (mode==2) { |
|
198 |
printf("Signing/Verifying Time %lf ms for %lu messages\n", ((double)(ds->disp_s)) / 1000,td.iterations); |
|
199 |
printf("Encrypting/Decrypting Time %lf ms for %lu messages\n", ((double)(de->disp_s)) / 1000,td.iterations); |
|
200 |
} else { |
|
201 |
init_dtime=(init_time2 - ds->disp_m - de->disp_m); |
|
202 |
if (init_dtime<10) { |
|
203 |
init_d=0; |
|
204 |
init_dtime=0; |
|
205 |
} else { |
|
206 |
init_d=300 * (de->disp_d+ds->disp_d) / init_dtime; |
|
207 |
init_dtime/=1000; |
|
208 |
}
|
|
209 |
printf("Initialisation time %.3lf + %.3lf(%.2lf%) ms\n",(1. * init_time) / 1000, init_dtime, init_d); |
|
210 |
printf("Signing/Verifying Time %.3lf(%.2lf%) ms\n", (ds->disp_m) / 1000, ds->disp_m ? 300*(ds->disp_d)/(ds->disp_m) : 0); |
|
211 |
printf("Encrypting/Decrypting Time %.3lf(%.2lf%) ms\n", (de->disp_m) / 1000, de->disp_m ? 300*(de->disp_d)/(de->disp_m) : 0); |
|
212 |
}
|
|
213 |
return 0; |
|
214 |
}
|
|
215 |