Untitled


SUBMITTED BY: antoineh1

DATE: May 8, 2016, 10:03 p.m.

FORMAT: Text only

SIZE: 8.4 kB

HITS: 3637

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/types.h>
  4. #include <unistd.h>
  5. #include <fcntl.h>
  6. #include <sys/stat.h>
  7. #include <string.h>
  8. #include <time.h>
  9. char** pars(char *tmp, char c);
  10. unsigned int maxbuffsize();
  11. void *mymemset(void *p, int c, size_t n);
  12. int main(){
  13. pid_t p=getpid();
  14. int i=50*1048576;
  15. int start; unsigned int end;
  16. int old_pf=0; int crnt_pf=0;
  17. void *c=NULL;
  18. char path[30];
  19. char ch;
  20. char buf[128];
  21. char **param;
  22. sprintf(path,"%s%d%s","/proc/",p,"/stat");
  23. FILE *f; FILE *fg;
  24. int g_hf=0; int g_chf=0;
  25. int cnt=0;
  26. clock_t crnt_time;
  27. printf("Help\n 1 - Find start use swap\n 2 - Linear address\n 3 - Cyclic address\n 4 - Random address\n 5 - exit\n");
  28. printf(":>");
  29. while (ch=getc(stdin)){
  30. old_pf=0; crnt_pf=0;
  31. g_hf=0; g_chf=0;
  32. switch(ch){
  33. case '1':
  34. end=maxbuffsize();
  35. printf("From 0 to %d\n",end/1048576);
  36. c=(void*)malloc(end);
  37. f=fopen(path,"r");
  38. if (f==NULL)printf("can't open file %s",path);
  39. if (fgets(buf,128,f)){
  40. param=pars(buf,' ');
  41. old_pf=atoi(param[11]);
  42. }
  43. i=50*1048576;
  44. while (1){
  45. c=mymemset((void*)c,0,i);
  46. f=fopen(path,"r");
  47. if (f==NULL)printf("can't open file %s",path);
  48. if (fgets(buf,128,f)){
  49. param=pars(buf,' ');
  50. crnt_pf=atoi(param[11]);
  51. if (old_pf-crnt_pf<0){
  52. printf("Process start use swap at: %d megabytes\n",i/1048576);
  53. break;
  54. }
  55. old_pf=crnt_pf;
  56. }
  57. i=i+50*1048576;
  58. }
  59. free(c);
  60. printf(":>");
  61. break;
  62. case '2':
  63. end=maxbuffsize();
  64. printf("From 0 to %d\n",end/1048576);
  65. c=(void*)malloc(end);
  66. i=1048576*50;
  67. f=fopen(path,"r");
  68. fg=fopen("/proc/vmstat","r");
  69. while(fgets(buf,128,fg)){
  70. if (strstr(buf,"pgmajfault")){
  71. param=pars(buf,' ');
  72. g_hf=atoi(param[1]);
  73. break;
  74. }
  75. }
  76. fclose(fg);
  77. if (fgets(buf,128,f)){
  78. fclose(f);
  79. param=pars(buf,' ');
  80. old_pf=atoi(param[11]);
  81. printf("Local statistics: major page fault=%d Global statistics: major page fault=%d \n",old_pf,g_hf);
  82. memset(buf,0,sizeof(buf));
  83. }
  84. while (i+(50*1048576)<=end){
  85. if (c==NULL){
  86. printf("Unable to allocate memory\n");
  87. break;
  88. }else{
  89. f=fopen(path,"r");
  90. if (fgets(buf,128,f)){
  91. fclose(f);
  92. param=pars(buf,' ');
  93. memset(buf,0,sizeof(buf));
  94. old_pf=atoi(param[11]);
  95. int t=(int)crnt_time;
  96. fg=fopen("/proc/vmstat","r");
  97. while(fgets(buf,128,fg)){
  98. if (strstr(buf,"pgmajfault")){
  99. char**param1=pars(buf,' ');
  100. g_hf=atoi(param1[1]);
  101. break;
  102. }
  103. }
  104. }
  105. fclose(fg);
  106. crnt_time=time(0);
  107. c=mymemset((void*)c,0,i);
  108. crnt_time=time(0)-crnt_time;
  109. f=fopen(path,"r");
  110. if (fgets(buf,128,f)){
  111. fclose(f);
  112. param=pars(buf,' ');
  113. memset(buf,0,sizeof(buf));
  114. crnt_pf=atoi(param[11]);
  115. int t=(int)crnt_time;
  116. fg=fopen("/proc/vmstat","r");
  117. while(fgets(buf,128,fg)){
  118. if (strstr(buf,"pgmajfault")){
  119. char**param1=pars(buf,' ');
  120. g_chf=atoi(param1[1]);
  121. break;
  122. }
  123. }
  124. fclose(fg);
  125. if (t>0){
  126. printf("Allocated memory = %dmb Local fault=%d fault/sec=%d Global fault=%d fault/sec=%d Time=%.1f\n",i/1048576,(crnt_pf-old_pf),(crnt_pf-old_pf)/t,(g_chf-g_hf),(g_chf-g_hf)/t,(double)crnt_time);
  127. }else {
  128. printf("Allocated memory = %dmb Local fault=%d fault/sec=%d Global fault=%d fault/sec=%d Time=%.1f\n",i/1048576,(crnt_pf-old_pf),(crnt_pf-old_pf),(g_chf-g_hf),(g_chf-g_hf),(double)crnt_time);
  129. }
  130. }
  131. i=i+50*1048576;
  132. }
  133. }
  134. free(c);
  135. c=NULL;
  136. printf(":>");
  137. break;
  138. case '3':
  139. end=maxbuffsize();
  140. printf("From 0 to %d\n",end/1048576);
  141. c=(void*)malloc(end);
  142. i=1048576*50;
  143. f=fopen(path,"r");
  144. fg=fopen("/proc/vmstat","r");
  145. while(fgets(buf,128,fg)){
  146. if (strstr(buf,"pgmajfault")){
  147. param=pars(buf,' ');
  148. g_hf=atoi(param[1]);
  149. break;
  150. }
  151. }
  152. fclose(fg);
  153. if (fgets(buf,128,f)){
  154. fclose(f);
  155. param=pars(buf,' ');
  156. old_pf=atoi(param[11]);
  157. printf("Local statistics: major page fault=%d Global statistics: major page fault=%d \n",old_pf,g_hf);
  158. memset(buf,0,sizeof(buf));
  159. }
  160. for (cnt=1;cnt<4;cnt++){
  161. printf("The %d iteration\n",cnt);
  162. while(i+(50*1048576)<=end){
  163. if (c==NULL){
  164. printf("Unable to allocate memory\n");
  165. break;
  166. }else{
  167. f=fopen(path,"r");
  168. if (fgets(buf,128,f)){
  169. fclose(f);
  170. param=pars(buf,' ');
  171. memset(buf,0,sizeof(buf));
  172. old_pf=atoi(param[11]);
  173. int t=(int)crnt_time;
  174. fg=fopen("/proc/vmstat","r");
  175. while(fgets(buf,128,fg)){
  176. if (strstr(buf,"pgmajfault")){
  177. char**param1=pars(buf,' ');
  178. g_hf=atoi(param1[1]);
  179. break;
  180. }
  181. }
  182. }
  183. fclose(fg);
  184. crnt_time=time(0);
  185. c=mymemset((void*)c,0,i);
  186. crnt_time=time(0)-crnt_time;
  187. f=fopen(path,"r");
  188. if (fgets(buf,128,f)){
  189. fclose(f);
  190. param=pars(buf,' ');
  191. memset(buf,0,sizeof(buf));
  192. crnt_pf=atoi(param[11]);
  193. int t=(int)crnt_time;
  194. fg=fopen("/proc/vmstat","r");
  195. while(fgets(buf,128,fg)){
  196. if (strstr(buf,"pgmajfault")){
  197. char**param1=pars(buf,' ');
  198. g_chf=atoi(param1[1]);
  199. break;
  200. }
  201. }
  202. fclose(fg);
  203. if (t>0){
  204. printf("Allocated memory = %dmb Local fault=%d fault/sec=%d Global fault=%d fault/sec=%d Time=%.1f\n",i/1048576,(crnt_pf-old_pf),(crnt_pf-old_pf)/t,(g_chf-g_hf),(g_chf-g_hf)/t,(double)crnt_time);
  205. }else {
  206. printf("Allocated memory = %dmb Local fault=%d fault/sec=%d Global fault=%d fault/sec=%d Time=%.1f\n",i/1048576,(crnt_pf-old_pf),(crnt_pf-old_pf),(g_chf-g_hf),(g_chf-g_hf),(double)crnt_time);
  207. }
  208. }
  209. i=i+50*1048576;
  210. }
  211. }
  212. i=50*1048576;
  213. }
  214. free(c);
  215. c=NULL;
  216. printf(":>");
  217. break;
  218. case '4':{
  219. end=maxbuffsize();
  220. printf("From 0 to %d\n",end/1048576);
  221. f=fopen(path,"r");
  222. fg=fopen("/proc/vmstat","r");
  223. while(fgets(buf,128,fg)){
  224. if (strstr(buf,"pgmajfault")){
  225. param=pars(buf,' ');
  226. g_hf=atoi(param[1]);
  227. break;
  228. }
  229. }
  230. fclose(fg);
  231. if (fgets(buf,128,f)){
  232. fclose(f);
  233. param=pars(buf,' ');
  234. old_pf=atoi(param[11]);
  235. printf("Local statistics: major page fault=%d Global statistics: major page fault=%d \n",old_pf,g_hf);
  236. memset(buf,0,sizeof(buf));
  237. }
  238. c=(void*)malloc(end);
  239. int steps=end/(50*1048576);
  240. for(cnt=0;cnt<steps;++cnt){
  241. i=(int)((rand()%steps)*(50*1048576))%end;
  242. f=fopen(path,"r");
  243. if (fgets(buf,128,f)){
  244. fclose(f);
  245. param=pars(buf,' ');
  246. memset(buf,0,sizeof(buf));
  247. old_pf=atoi(param[11]);
  248. }
  249. fg=fopen("/proc/vmstat","r");
  250. while(fgets(buf,128,fg)){
  251. if (strstr(buf,"pgmajfault")){
  252. char**param1=pars(buf,' ');
  253. g_hf=atoi(param1[1]);
  254. break;
  255. }
  256. }
  257. fclose(fg);
  258. crnt_time=time(0);
  259. mymemset((void*)c,0,i);
  260. crnt_time=time(0)-crnt_time;
  261. f=fopen(path,"r");
  262. int t=(int)crnt_time;
  263. if (fgets(buf,128,f)){
  264. fclose(f);
  265. param=pars(buf,' ');
  266. memset(buf,0,sizeof(buf));
  267. crnt_pf=atoi(param[11]);
  268. }
  269. fg=fopen("/proc/vmstat","r");
  270. while(fgets(buf,128,fg)){
  271. if (strstr(buf,"pgmajfault")){
  272. char**param1=pars(buf,' ');
  273. g_chf=atoi(param1[1]);
  274. break;
  275. }
  276. }
  277. fclose(fg);
  278. if (t>0){
  279. printf("Allocated memory = %dmb Local fault=%d fault/sec=%d Global fault=%d fault/sec=%d Time=%.1f\n",i/1048576,(crnt_pf-old_pf),(crnt_pf-old_pf)/t,(g_chf-g_hf),(g_chf-g_hf)/t,(double)crnt_time);
  280. }else {
  281. printf("Allocated memory = %dmb Local fault=%d fault/sec=%d Global fault=%d fault/sec=%d Time=%.1f\n",i/1048576,(crnt_pf-old_pf),(crnt_pf-old_pf),(g_chf-g_hf),(g_chf-g_hf),(double)crnt_time);
  282. }
  283. }
  284. }
  285. free(c);
  286. c=NULL;
  287. printf(":>");
  288. break;
  289. case '5':
  290. return 0;
  291. break;
  292. }
  293. }
  294. }
  295. void *mymemset(void *p, int c, size_t n){
  296. char *pb=(char*)p;
  297. char *pbend=pb+n;
  298. while(pb!=pbend){
  299. *pb++=c;
  300. }
  301. return p;
  302. }
  303. char** pars(char *tmp, char c){
  304. int i=0;
  305. int j=0;
  306. char **param;
  307. while (tmp[i]==' '){
  308. if (tmp[i]=' '){
  309. tmp=tmp+1;
  310. }else break;
  311. }
  312. for (i=0;i<=strlen(tmp);i++){
  313. if (tmp[i]==c){
  314. j++;
  315. }
  316. }
  317. j=j+2;
  318. param=(char**)malloc((j)*sizeof(char*));
  319. memset(param,'\0',sizeof(param));
  320. i=0; j=0;int k=0;
  321. for (i=0;i<strlen(tmp);i++){
  322. if (tmp[i]==c){
  323. param[j]=(char*)malloc((i+1)*sizeof(char));
  324. memset(param[j],0,sizeof(char)*(i+1));
  325. for (k=0;k<i;k++){
  326. param[j][k]=tmp[k];
  327. }
  328. param[j][k+1]=0;
  329. j++;
  330. tmp=tmp+i+1;
  331. i=0;
  332. k=0;
  333. }
  334. }
  335. param[j]=(char*)malloc(strlen(tmp)*sizeof(char));
  336. for (k=0;k<i;k++){
  337. param[j][k]=tmp[k];
  338. }
  339. param[j+1]=0;
  340. return param;
  341. }
  342. unsigned int maxbuffsize(){
  343. unsigned int i=1048576;
  344. void *c;
  345. while(1){
  346. c=(void*)malloc(i);
  347. if (c==NULL){i=i-1048576;break;}
  348. i=i+1048576;
  349. free(c);
  350. }
  351. return i;
  352. }

comments powered by Disqus