diff --git a/cpu/a.out b/cpu/a.out deleted file mode 100755 index 42ff03228098fea0de181c79488b2422125b5273..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6251 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 diff --git a/network/ocli b/network/ocli new file mode 100755 index 0000000000000000000000000000000000000000..221967ae3dc7c99b79ae188e1431db3d814d07ad GIT binary patch literal 9160 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 literal 0 HcmV?d00001 diff --git a/network/oser b/network/oser new file mode 100755 index 0000000000000000000000000000000000000000..4ccfe1e8552aec7988de0f0cb0e449e90b5aa572 GIT binary patch literal 13496 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 b?01?4mR{$<_BKWC01V}~;>JG!Sh4>AQ5b?h literal 0 HcmV?d00001 diff --git a/network/overhead_client.c b/network/overhead_client.c new file mode 100644 index 0000000..241fa1a --- /dev/null +++ b/network/overhead_client.c @@ -0,0 +1,70 @@ +#include "../rasperf.h" +#include<stdio.h> +#include<stdlib.h> +#include<arpa/inet.h> +#include<sys/types.h> +#include<sys/socket.h> +#include<netdb.h> +#include<string.h> +//Macro definitions +#define handle_error(msg) \ + do { perror(msg); exit(1);} while(0); +#define BACKLOG 50 +int main(int argc, char*argv[]) +{ + int socket_fd, rc; + float start_delta = 0, close_delta = 0; + if(argc<2){ + handle_error("<usage>:tcp_client <IP address>"); + } + //Retrieve the protocol number mapping + //from /etc/protocols file + struct protoent *proto_entry; + proto_entry = getprotobyname("tcp"); + + + //My address information to bind to + struct sockaddr_in server; + memset(&server, 0, sizeof(struct sockaddr)); + server.sin_family = AF_INET; + server.sin_port = htons(8000); + + rc= inet_pton(AF_INET, argv[1], &server.sin_addr); + if(rc == -1){ + handle_error("Address Error"); + } + time starttime, endtime; + //accept incoming connections + int addr_size = sizeof(struct sockaddr); + int i; + int protonum = proto_entry->p_proto; + for(i=1;i<=BACKLOG;i++){ + getTime(starttime); + //Open an socket end-point for this TCP Server + if((socket_fd = socket(AF_INET, SOCK_STREAM, protonum))<0){ + handle_error("Socket Error"); + } + if(connect(socket_fd, (struct sockaddr*)&server, sizeof(server))<0){ + handle_error("Connection Error"); + } + /*The end calculated here will miss time taken for ACK K+1 + from the client. And so we have to one way delay + measured using another experiment*/ + getTime(endtime); + + //Calculate connection overhead client + start_delta+=diff(endtime,starttime); + + getTime(starttime); + shutdown(socket_fd, SHUT_RDWR); + getTime(endtime); + + //Calculate connection overhead server side + close_delta+=diff(endtime,starttime); + } + printf("Connection Setup =%f us\n", (start_delta + RTT/2 * BACKLOG)/BACKLOG); + printf("Connection Teardown =%f us\n", (close_delta + RTT/2 * BACKLOG)/BACKLOG); + return 0; +} + + diff --git a/network/overhead_server.c b/network/overhead_server.c new file mode 100644 index 0000000..db3c1f2 --- /dev/null +++ b/network/overhead_server.c @@ -0,0 +1,78 @@ +#include "../rasperf.h" +#include<stdio.h> +#include<stdlib.h> +#include<arpa/inet.h> +#include<sys/types.h> +#include<sys/wait.h> +#include<sys/socket.h> +#include<netdb.h> +#include<string.h> + +//Macro definitions +#define handle_error(msg) \ + do { perror(msg); exit(1);} while(0); +#define LISTEN_BACKLOG 100 + +int main(int argc, char*argv[]) +{ + int socket_fd, rc; + float setup_delta, close_delta; + if(argc<1){ + handle_error("<usage>:tcp_server"); + } + //Retrieve the protocol number mapping + //from /etc/protocols file + struct protoent *proto_entry; + proto_entry = getprotobyname("tcp"); + + //Open an socket end-point for this TCP Server + socket_fd = socket(AF_INET, SOCK_STREAM, proto_entry->p_proto); + if(socket_fd == -1){ + handle_error("Socket descriptor creation failed"); + } + + //My address information to bind to + struct sockaddr_in sock_addr; + memset(&sock_addr, 0, sizeof(struct sockaddr)); + sock_addr.sin_family = AF_INET; + sock_addr.sin_addr.s_addr = htonl(INADDR_ANY); + sock_addr.sin_port = htons(8000); + + + rc = bind(socket_fd, (struct sockaddr*)&sock_addr, sizeof(sock_addr)); + if(rc == -1){ + handle_error("Bind failure"); + } + rc = listen(socket_fd, LISTEN_BACKLOG); + if(rc == -1){ + handle_error(" Listen Error"); + } + + time starttime, endtime; + + //accept incoming connections + int connfd, i, pid, addr_size = sizeof(struct sockaddr); + for(i=1;i<=1000;i++) + { + printf("Accept Connection\n"); + waitpid(WAIT_ANY, NULL, WNOHANG); + connfd = accept(socket_fd, (struct sockaddr *)NULL, NULL); + if( connfd == -1){ + handle_error("Accept failed"); + } + if(pid = fork() == 0){ + //close the copy of socket descriptor + //child should not medle with it.. + close(socket_fd); + close(connfd); + printf("Connection %d closed in Child\n",i); + exit(0); + } + close(connfd); + } + close(socket_fd); + + return 0; +} + + diff --git a/network/peak_client.c b/network/peak_client.c new file mode 100644 index 0000000..3527121 --- /dev/null +++ b/network/peak_client.c @@ -0,0 +1,70 @@ +#include "../rasperf.h" +#include<stdio.h> +#include<stdlib.h> +#include<arpa/inet.h> +#include<sys/types.h> +#include<sys/socket.h> +#include<netdb.h> +#include<string.h> +//Macro definitions +#define handle_error(msg) \ + do { perror(msg); exit(1);} while(0); +#define BACKLOG 50 +int main(int argc, char*argv[]) +{ + int socket_fd, rc; + float start_delta = 0, close_delta = 0; + if(argc<2){ + handle_error("<usage>:tcp_client <IP address>"); + } + //Retrieve the protocol number mapping + //from /etc/protocols file + struct protoent *proto_entry; + proto_entry = getprotobyname("tcp"); + + + //My address information to bind to + struct sockaddr_in server; + memset(&server, 0, sizeof(struct sockaddr)); + server.sin_family = AF_INET; + server.sin_port = htons(8000); + + rc= inet_pton(AF_INET, argv[1], &server.sin_addr); + if(rc == -1){ + handle_error("Address Error"); + } + time starttime, endtime; + //accept incoming connections + int addr_size = sizeof(struct sockaddr); + int i; + int protonum = proto_entry->p_proto; + for(i=1;i<=BACKLOG;i++){ + getTime(starttime); + //Open an socket end-point for this TCP Server + if((socket_fd = socket(AF_INET, SOCK_STREAM, protonum))<0){ + handle_error("Socket Error"); + } + if(connect(socket_fd, (struct sockaddr*)&server, sizeof(server))<0){ + handle_error("Connection Error"); + } + /*The end calculated here will miss time taken for ACK K+1 + from the client. And so we have to one way delay + measured using another experiment*/ + getTime(endtime); + + //Calculate connection overhead client + start_delta+=diff(endtime,starttime); + + getTime(starttime); + close(socket_fd); + getTime(endtime); + + //Calculate connection overhead server side + close_delta+=diff(endtime,starttime); + } + printf("Connection Setup =%f us\n", (start_delta + RTT/2 * BACKLOG)/BACKLOG); + printf("Connection Teardown =%f us\n", (close_delta + RTT/2 * BACKLOG)/BACKLOG); + return 0; +} + + diff --git a/network/peak_server.c b/network/peak_server.c new file mode 100644 index 0000000..87de305 --- /dev/null +++ b/network/peak_server.c @@ -0,0 +1,90 @@ +#include "../rasperf.h" +#include<stdio.h> +#include<stdlib.h> +#include<arpa/inet.h> +#include<sys/types.h> +#include<sys/wait.h> +#include<sys/socket.h> +#include<netdb.h> +#include<string.h> + +//Macro definitions +#define handle_error(msg) \ + do { perror(msg); exit(1);} while(0); +#define LISTEN_BACKLOG 50 + +int main(int argc, char*argv[]) +{ + int socket_fd, rc; + float setup_delta, close_delta; + if(argc<1){ + handle_error("<usage>:tcp_server"); + } + //Retrieve the protocol number mapping + //from /etc/protocols file + struct protoent *proto_entry; + proto_entry = getprotobyname("tcp"); + + //Open an socket end-point for this TCP Server + socket_fd = socket(AF_INET, SOCK_STREAM, proto_entry->p_proto); + if(socket_fd == -1){ + handle_error("Socket descriptor creation failed"); + } + + //My address information to bind to + struct sockaddr_in sock_addr; + memset(&sock_addr, 0, sizeof(struct sockaddr)); + sock_addr.sin_family = AF_INET; + sock_addr.sin_addr.s_addr = htonl(INADDR_ANY); + sock_addr.sin_port = htons(8000); + + + rc = bind(socket_fd, (struct sockaddr*)&sock_addr, sizeof(sock_addr)); + if(rc == -1){ + handle_error("Bind failure"); + } + rc = listen(socket_fd, LISTEN_BACKLOG); + if(rc == -1){ + handle_error(" Listen Error"); + } + + time starttime, endtime; + + //accept incoming connections + int connfd, i, pid, addr_size = sizeof(struct sockaddr); + for(i=1;i<=1000;i++) + { + //getTime(starttime); + printf("Accept Connection\n"); + //waitpid(WAIT_ANY, NULL, WNOHANG); + connfd = accept(socket_fd, (struct sockaddr *)NULL, NULL); + /*The end calculated here would have missed SYN time + from the client. And so we have to add one + packet worth round trip time in the overhead*/ + //getTime(endtime); + if( connfd == -1){ + handle_error("Accept failed"); + } + //setup_delta+=diff(endtime,starttime); + if(pid = fork() == 0){ + close(socket_fd); + close(connfd); + printf("Connection %d closed in Child\n",i); + //close_delta=diff(endtime, starttime); + //printf("Connection Termination %f", close_delta + RTT); + exit(0); + } + close(connfd); + } + //getTime(starttime); + close(socket_fd); + //getTime(endtime); + + //Calculate connection overhead server side + //setup_delta+=diff(endtime,starttime); + //printf("Connection Overhead:Setup =%f us\n", (setup_delta+ RTT*600)/600); + + return 0; +} + + diff --git a/network/rand b/network/rand new file mode 100755 index 0000000000000000000000000000000000000000..ebd6e6eb4e94a6316ade822f6b4d268c202fb4b5 GIT binary patch literal 8852 zcmeHMeQaCR6~DIg)i1~C$`&YV-dHQ8NHJ|FCFNs0Cvp1Hr5|e@C?DyI6FZ5)u_ODr zv`m9ap=DNE)<3GLRGL8h1F;Ql42h}gA2ey8Wz+sh853;lHdeKhQ()>ufovMhe&@b> z;^!A<LzDJjul3%!=XcLJ_uS)q@4FvQg}XYu9*^MU72goVy;7-5$bJhkRwr47wTJ~m z7c0baQ3a$Dk1k7y+Bv4v$~4m&CFcXJz|-QjfflbWGfZ!`VZoF=Bue!aldiHh{cwTJ zG8ICT0O^sh0l#EHdu4{{PUT0hqO3<O=`||7My1DeQaQ$y+edAqC!*{{ygE4Ibt0l& zzKfJ(DQ&xC#VCJN89G{{6Aa#__ef3%rmXiZ=#igaGzFC4c2(beak-+}$5gT6wq&Aj z{kq$dv8H4qmD|&_r)7Q9`gOr<I@m1RP4-E4<Cbn&6UVV09QnKq5A^{mH#S{9`R?L} zq8r}5^5CP1KN**Pe!P}+`9byzr#m6Jw2U;>TMnmgT@GJ0558y~oc<3Dk2|dZP|p71 zd2oTa_EQ+wi)<#Eiiwd-B4rJTek(B?7sJtHGTkpslcdb770p=Ya5Rw;1DSXn@ZfMd zrC?KR?CNZ7Gn<3W!8^z+@9fXc6GkznAI62`gvi~LzzFh+Zz_JewpZq;Z#nx{eZa=6 zfs;Nb&4JGjB@{L~aQfdlt#RPom#M79fjh^$?!cY?7!I6#;<U|y^Vp;^WAwus<6z|{ z3pHWvAG0b8SqZ*TGr^iRow?%zL}pf9#JjdZM~?U*Dx7+M25HsriKh@uO-lZ4;;HFV zW0L<B@zmt0S0sO$cxvj@3z9!cJT-CZh~!@-o|-nbPx3z|o|-f@0)FjBo%wUSjQj;- z^x~Cmk<PPYBbXVCv*SXNv)ik6QFsP|R|jev+J!igMgY2vrXdhxblPv^FFo$<nK%J^ zvf)>IPEpa!`?U@G2s=R>%a2d{AaCSP8{?PnGdz>Vx#=8~Pm-Xq|847PkC8uP>t9g% z`|hoSzam%H4b8%naHQu<<+TNx@O(T$@iRv6eW@A(){0pdmUW-fFsnj-X0m7M+fb=( z5K~!DvJr~xz<;IXzjOW+RV%d$2d>S`<j)p<268Zb-Z*A}ISt0hhYM%J7fJAgtp~#w zjs8jFV7SnAc%`@SD(OrVenR9-{=MfuyOuw9vM1E_)BIbXT|Qi~aD2Kde>(rx_;kbS z)A`BA#&)e9&%ZS~_O;M=D^`w%FM3eXXu)%L_~KJ97A+$vXAle2VT`_^Jsf(ZXM&uD z$AMGypB6Tt8SrWvBGVMCr|~!0ZFu{0lt}b!;YH+6HIn>-dF6lTkl#)6+erR*cB{+S z&p6~eke9Xoa$+D@+we3r1-di(N9ci2ekOE(Xa3VrcW3^$p-9)^RnwIky1?NkqC2`) zUt0SIWBhX;jhMol|AN!|KeAS^k*@sZuKcI%uragjyfHfAF*baVyNqDeJlqp{B-9hy z6*4CVij{th@g>I|BxtC4FxTv`FvksQ=>hGIyR=nV;aTpxy9H%52o9k_a`$GmAOgAo z?R^>ab<lS}lZe+<(DR`8U=-4Kg_7rq?ZUGs;90)7y5@+dIzTwBCB|UyRuWLDyu1)A zQBLv#@<)jJ10DYQO|^?2uh}Q=yXo#*Z(n%}!6es?ryKsgMnK3PIN)ttQnm4rZ?wYu zBUDeQw3P(C0J-N0U^(w`DMB_5;Tb`@;#A)14}8xX_SZk_3;VUh6=8qlp-RKQ=0KI< zZyBxL?AMe2mXLo<$luuN*INDckZ<+Z$o9Vj^<%K(oPWvW^>jS~*CTK}0{<xjBUQRA z-liza@*0onVpT9*VaqR3yoK)@r5oj&_FKI&w_Ne|Y$(J{imzAYa;^o&<)2)eNt4Ji zuTErk&v(RU^Ym??bi%6>5ewy8hzAs1q-edOHz>-47GyGExkHKP$}!0mzazYs{EEU` zRC^iM6wiKheQFyjn8$Q1+ar`bK39_GcwSL_LA6g+_kSn6k9AkHzEYP^hobi@I-uxo zMGq+YeMMhX)NOBLTiab)V|QOJW#zPW!It2<rskaF);_s*U2x61)ix^T2sSsZ-Jm3G znPwq^*}cP7v=7wE*mQ_<*e%5~BO;heTk&A1wX?~J4k~Uil?(Re64<jQVj@V~P&7Lv zg0a0R*t4mXu}gNxGucEsRl=Ak%fypWQc$^(q$PrhR03}+z6b9CFeppMqE=J{<3r{^ zCORB9hhorW&ekxanM`!At-<+6`ymGF(cwfts!qcoUO`!lZLu$#6~X@W@Nhh3xnuml z@H8%|4|4x+@#^4;=Q2DlC5RXISLVNtOf??Xk9c)(#d8l$a>Z9gF)MRx@pkH4UR~mr zGPqK5#g|*Z9YvpF>~Q_Zyt))VrU3Sz7UPt7oZ6faTacl-g7r^$b#OGVNFv^|iCl|P z+gZO};rD~mT*CT1KOIpM49`bOd`|p!p@8NB*5~nGQ2Km!!2Yuw)5oAsa|`o4zsN%t zlxcV<(R}IjUxIi&frnzs`kI=bG!<xWC)e+8|I;pgo*!G3{us(Bkv@Gh-1^S~BfrQ$ zO8h;UR{H#%uuE-UIZrf?$EmNW`A1U@%eA{hfzLUZ9(C#Sx#ufN|1<|i*<d|3dEBMX z-#<$=l)nQkubRcIctPoNHT%@}bDz>*HY;go-1;xM^!c2S&kyhUFZ#c5=})TqCsqA7 zQ*a$g!L!I1a&$DRy6f!sp3f8A@^1du(5-do^Ln6OowvH>-8_v?a*^w&lLSiI7u5eF zWU245K7SASymwNypZh1*&;8)9&~?_&=VjB>C?uA*xgyW_2Pkmr3$-5M1G$~7s3_|( zz3S56sq}X$2iZ?H!+OmB6B)v|{dD|8X-Fx$<yAPO483OX5VnRGM`HcW4vey_&y>zz zxo)TEYg|7IszMhl?eW-g>g#F&`jYzNzKX&oJlr0h*Jyl}tH01-TYK4M++DvdRsQXR zcP(ChPN5I8ZKN#j6INNgVs;(uH0HysdZMg+mEiACseHBI?@K9;s8r}qNalUG<>Bvv zv(SgtHqY~=_@deQyA)q6cwR2Wm(1QXmEwNE^JpnvD|mh^#RIeVBc*tq;Q6c+UphNa zmEvC#JpYv9%P^nxIw6_&i5qY)R1W{L;CaBQ<P+FM@c4EV_^?ahaqEE5FK@&+EN9>S zRkX)dh4?!S$C5<fTn|o#-2T(>@QNkkeb;(DsPI6Qj$AQ?kR^HdzL3^89*3ViJ_aN{ zH=c);9o}bxmFYRWJ-8|1{i1^9S!ua;Q9b4GH>I6A9Hi=OLek$zd~O`5u$-MgORc4I z`ok4zXYT+04<+yRe=!{Ol=<Ip0lpORq|<v!Jk2yqTtX$UcHmkGVl%xGpWA;P10F!X za`&GMa9&e7&Fz=?+;Mks9{K0z!C#*TKPT}e;s>f<$+J>8@E73Zr@R0E4Y=lXP~|@d zUgxbBy{>Vw5CN>iN`mJHUMJlMoZ>80oa4&QYKhOS;9lSX^yd+m{Z?g%*N3dxspQ>p z?pE@2A4BPR`4-|K;F`)iNeVc%%Wdb0dE}2u`*Y{p;}UmTR{8#nm9=s>iKpwsO>NuF zuFf41(-g6ICO(+RV$*C|!)AXnor-5g8OStaX>%}{?u#bPn3c|C&1i0qz)o}|8MorG z;Q9@B-VV!UgiP8K+dEtnyVlHJ+*Z<_IF=h8-U}56XVO->M3nA8)5Eya%t*&Owud%{ z&G43Xcy2d?^Cg-wVYWZGCA7J-4N{I0d1ETfja^$?LtW<9j*cDSh#3jBc7@5Dyj1Pa z=A^^&N>$gLm#AiEWV2a}S7dV=MJp2ROU4E5&h495VaDZFUEbKb49L>~`$pGQ;=a)> zEtXforO;qJ70*PiIE4ncCve~CLg`H~%Cc#52%&_hX6IJu#1bhpmyIJ(#b#5W)D?4S zUHID|sDfwW2twuM)w8*2x4B()p|)f+n??UIO$3MkCW;z&sFIk;e@4(hTw2|~0VfMW AtN;K2 literal 0 HcmV?d00001 diff --git a/network/random_str.c b/network/random_str.c new file mode 100644 index 0000000..7f765d5 --- /dev/null +++ b/network/random_str.c @@ -0,0 +1,32 @@ +#include<stdio.h> +#include<stdlib.h> +char* generate_string(int length) +{ + //Random number seed + srand((unsigned int) ctime(0)); + char * buff; + buff=(char *)malloc(sizeof(char)*length); + int i; + for(i=0;i< length-1;i++){ + buff[i] = rand() % rand() % (126 - 33 + 1) + 33; + } + buff[i] = '\0'; + return buff; +} +int main() +{ + char *buf; + buf = generate_string(5); + printf("String of 5: %s", buf); + free(buf); + + buf = generate_string(40); + printf("String of 5: %s", buf); + free(buf); + + buf = generate_string(80); + printf("String of 5: %s", buf); + free(buf); + + return 0; +} diff --git a/network/rtt_client.c b/network/rtt_client.c new file mode 100644 index 0000000..3a743d6 --- /dev/null +++ b/network/rtt_client.c @@ -0,0 +1,94 @@ +#include "../rasperf.h" +#include<stdio.h> +#include<stdlib.h> +#include<arpa/inet.h> +#include<sys/types.h> +#include<sys/socket.h> +#include<netdb.h> +#include<string.h> +//Macro definitions +#define handle_error(msg) \ + do { perror(msg); exit(1);} while(0); +#define BUFFER_SIZE 2048 +#define STRIDE_SIZE 64 +#define BACKLOG 32 //buff size/stride size + +//A random string generator of given length +char* generate_string(int length) +{ + //Random number seed + srand((unsigned int) ctime(0)); + char * buff; + buff=(char *)malloc(sizeof(char)*length); + int i; + for(i=0;i< length-1;i++){ + buff[i] = rand() % rand() % (126 - 33 + 1) + 33; + } + buff[i] = '\0'; + return buff; +} + +int main(int argc, char*argv[]) +{ + int socket_fd, rc; + char buf[BUFFER_SIZE]; + char *msg; + float start_delta = 0, close_delta = 0; + if(argc<2){ + handle_error("<usage>:tcp_client <IP address>"); + } + //Retrieve the protocol number mapping + //from /etc/protocols file + struct protoent *proto_entry; + proto_entry = getprotobyname("tcp"); + + + //My address information to bind to + struct sockaddr_in server; + memset(&server, 0, sizeof(struct sockaddr)); + server.sin_family = AF_INET; + server.sin_port = htons(8000); + + rc= inet_pton(AF_INET, argv[1], &server.sin_addr); + if(rc == -1){ + handle_error("Address Error"); + } + time starttime, endtime; + //accept incoming connections + int addr_size = sizeof(struct sockaddr); + int i; + int protonum = proto_entry->p_proto; + + //Open an socket end-point for this TCP Server + if((socket_fd = socket(AF_INET, SOCK_STREAM, protonum))<0){ + handle_error("Socket Error"); + } + if(connect(socket_fd, (struct sockaddr*)&server, sizeof(server))<0){ + handle_error("Connection Error"); + } + + for(i=1;i<=BACKLOG;i++){ + //increase the sent message in strides of 64 + //look for for peak rtt + msg = generate_string(STRIDE_SIZE * i); + printf("String Generated: \"%s\"",msg); + getTime(starttime); + if(send(socket_fd, msg, sizeof(msg), 0) <0){ + handler_error("Send Error"); + } + //The recv buffer size is same as the one we sent + if(recv(socket_fd, buff, sizeof(msg), 0) != sizeof(msg)){ + handle_error("Data over/ Receive Error"); + } + getTime(endtime); + delta+=diff(endtime, starttime); + printf("Single RTT %f", diff(endtime, starttime)); + + } + + close(socket_fd); + printf("Averaged RTT =%f us\n", delta/BACKLOG); + return 0; +} + + diff --git a/network/rtt_server.c b/network/rtt_server.c new file mode 100644 index 0000000..2ff16a1 --- /dev/null +++ b/network/rtt_server.c @@ -0,0 +1,80 @@ +#include "../rasperf.h" +#include<stdio.h> +#include<stdlib.h> +#include<arpa/inet.h> +#include<sys/types.h> +#include<sys/wait.h> +#include<sys/socket.h> +#include<netdb.h> +#include<string.h> + +//Macro definitions +#define handle_error(msg) \ + do { perror(msg); exit(1);} while(0); +#define LISTEN_BACKLOG 100 +#define BUFFER_SIZE 2048 + +int main(int argc, char*argv[]) +{ + int socket_fd, rc; + char buff[BUFFER_SIZE], msg[BUFFER_SIZE]; + char + float setup_delta, close_delta; + if(argc<1){ + handle_error("<usage>:tcp_server"); + } + //Retrieve the protocol number mapping + //from /etc/protocols file + struct protoent *proto_entry; + proto_entry = getprotobyname("tcp"); + + //Open an socket end-point for this TCP Server + socket_fd = socket(AF_INET, SOCK_STREAM, proto_entry->p_proto); + if(socket_fd == -1){ + handle_error("Socket descriptor creation failed"); + } + + //My address information to bind to + struct sockaddr_in sock_addr; + memset(&sock_addr, 0, sizeof(struct sockaddr)); + sock_addr.sin_family = AF_INET; + sock_addr.sin_addr.s_addr = htonl(INADDR_ANY); + sock_addr.sin_port = htons(8000); + + + rc = bind(socket_fd, (struct sockaddr*)&sock_addr, sizeof(sock_addr)); + if(rc == -1){ + handle_error("Bind failure"); + } + rc = listen(socket_fd, LISTEN_BACKLOG); + if(rc == -1){ + handle_error(" Listen Error"); + } + + time starttime, endtime; + //accept incoming connections + int connfd, i, pid, addr_size = sizeof(struct sockaddr); + printf("Accept Connection\n"); + connfd = accept(socket_fd, (struct sockaddr *)NULL, NULL); + if( connfd == -1){ + handle_error("Accept failed"); + } + for(i=1;i<=BACKLOG;i++) + { + getTime(starttime); + if(recv(connfd, buff, sizeof(i* STRIDE_SIZE), 0)!= sizeof(i* STRIDE_SIZE)){ + handle_error("Receive Error/ Data Done"); + } + if(send(connfd, buff, sizeof(i * STRIDE_SIZE), 0)<0){ + handle_error("Send Error"); + } + getTime(endtime); + } + + close(socket_fd); + close(connfd); + printf("Connection %d closed in Child\n",i); + return 0; +} + + diff --git a/network/run_script.sh b/network/run_script.sh new file mode 100755 index 0000000..8d32350 --- /dev/null +++ b/network/run_script.sh @@ -0,0 +1,6 @@ +#!/bin/bash +for i in `seq 1 10`; +do + ./tcp_client localhost +done + diff --git a/network/tcp_rtt_client.bul b/network/tcp_rtt_client.bul new file mode 100644 index 0000000..82bf516 --- /dev/null +++ b/network/tcp_rtt_client.bul @@ -0,0 +1,76 @@ +#include "../rasperf.h" +#include<stdio.h> +#include<stdlib.h> +#include<arpa/inet.h> +#include<sys/types.h> +#include<sys/socket.h> +#include<netdb.h> +#include<string.h> +//Macro definitions +#define handle_error(msg) \ + do { perror(msg); exit(1);} while(0); +#define BACKLOG 1 +int main(int argc, char*argv[]) +{ + int socket_fd, rc; + float start_delta = 0, close_delta = 0; + if(argc<2){ + handle_error("<usage>:tcp_client <IP address>"); + } + //Retrieve the protocol number mapping + //from /etc/protocols file + struct protoent *proto_entry; + proto_entry = getprotobyname("tcp"); + + + //My address information to bind to + struct sockaddr_in server; + memset(&server, 0, sizeof(struct sockaddr)); + server.sin_family = AF_INET; + server.sin_port = htons(8000); + + rc= inet_pton(AF_INET, argv[1], &server.sin_addr); + if(rc == -1){ + handle_error("Address Error"); + } + time starttime, endtime; + //accept incoming connections + int addr_size = sizeof(struct sockaddr); + int i; + int protonum = proto_entry->p_proto; + for(i=1;i<=BACKLOG;i++){ + getTime(starttime); + //Open an socket end-point for this TCP Server + if((socket_fd = socket(AF_INET, SOCK_STREAM, protonum))<0){ + handle_error("Socket descriptor creation failed"); + } + if((connect(socket_fd, (struct sockaddr*)&server, sizeof(server)))<0){ + handle_error("Connect failed"); + } + /*The end calculated here will miss time taken for ACK K+1 + from the client. And so we have to one way delay + measured using another experiment*/ + getTime(endtime); + + //Calculate connection overhead client + start_delta+=diff(endtime,starttime); + printf("EndTime: %f usec\n", endtime.tv_sec + endtime.tv_usec*1e6); + printf("Start time:%f usec\n", starttime.tv_sec +starttime.tv_usec*1e6); + printf("Setup:%f\n",diff(endtime,starttime) + 25); + + getTime(starttime); + sleep(1); + close(socket_fd); + getTime(endtime); + printf("Endtime %f usec\n", endtime.tv_sec + endtime.tv_usec*1e6); + printf("Start time:%f usec\n", starttime.tv_sec +starttime.tv_usec*1e6); + printf("TearDown:%f\n",diff(endtime,starttime) + 25); + //Calculate connection overhead server side + close_delta+=diff(endtime,starttime); + } + printf("Connection Setup =%f us\n", (start_delta + RTT/2 * BACKLOG)/BACKLOG); + printf("Connection Teardown =%f us\n", (close_delta + RTT/2 * BACKLOG)/BACKLOG); + return 0; +} + + diff --git a/network/tcp_rtt_server.c b/network/tcp_rtt_server.c deleted file mode 100644 index 2e2fbd0..0000000 --- a/network/tcp_rtt_server.c +++ /dev/null @@ -1,50 +0,0 @@ -#include "../rasperf.h" -#include<arpa/inet.h> -#include<sys/typesh> -#include<sys/socket.h> -#include<netdb.h> - -//Macro definitions -#define handle_error(msg) \ - do { perror(msg); exit(EXIT_FAILURE);} while(0) -#define LISTEN_BACKLOG 5 -int main(int argc, char*argv[]) -{ - int socket_fd, rc; - if(argc<1){ - handle_error("<usage>:"); - } - //Retrieve the protocol number mapping - //from /etc/protocols file - struct protoent *proto_entry; - proto_entry = getprotobyname("tcp"); - - //Open an socket end-point for this TCP Server - socket_fd = socket(AF_INET, SOCK_STREAM, proto_entry->p_proto); - if(socket_fd == -1){ - handle_error("Errno: %d,Socket descriptor creation failed", errorno); - } - - //My address information to bind to - struct sockaddr sock_addr; - memset(&sock_addr, 0, sizeof(struct sockaddr)); - sock_addr.sa_family = AF_INET; - sock_addr.sin_addr.s_addr = htonl(INADDR_ANY); - sock_addr.sin_port = htons(8000); - - - rc = bind(sock_fd, &sock_addr, sizeof(sock_addr)); - if(rc == -1){ - handle_error("Errno: %d, Bind failure", errorno); - } - rc = listen(socket_fd, LISTEN_BACKLOG); - if(rc == -1){ - handle_error("Errno: %d, Listen Error", errorno); - } - - int addr_size = sizeof(struct sockaddr); - rc= accept(sock_fd, &sock_addr, &addr_size); - if( rc == -1){ - handle_error("Error: %d,Accept failed", errorno); - } - diff --git a/osproject_task.c b/osproject_task.c index 64432f5..5b68269 100644 --- a/osproject_task.c +++ b/osproject_task.c @@ -7,13 +7,12 @@ int main() unsigned int a, b; unsigned int avg; int status; - asm volatile("mrc p15, 0, %0, c9, c14, 0" : "=r" (regr)); + readCCNT(regr); printf("regr: %x\n", regr); - - asm volatile("mrc p15, 0, %0, c9, c13, 0" : "=r" (a)); + getTime(a); int pid = fork(); if (pid) { - asm volatile("mrc p15, 0, %0, c9, c13, 0" : "=r" (b)); + getTime(b); printf("Time for fork: %u\n", b - a); } diff --git a/rasperf.h b/rasperf.h index e0e76b4..8a57704 100644 --- a/rasperf.h +++ b/rasperf.h @@ -1,7 +1,12 @@ + #ifndef __RASPERF_H__ +#define NULL '\0' #define __RASPERF_H__ -#define PI 1 -#define x86 0 +#define RTT 35 //in MicroSec +#define PI 0 +#define x86 1 +#define CPU_CYCLES 900 +#define MHz 1e6 #if defined(PI) && PI #define time unsigned int #define getTime(var) \ @@ -12,13 +17,14 @@ asm volatile (\ "mrc p15, 0, %0, c9, c14, 0":\ "=r" (var)); -#define diff(end, begin) (end - begin) +#define diff(end, begin) \ + (end - begin)/ CPU_CYCLES}; #endif #if defined(x86) && x86 #define time struct timeval #define getTime(var) gettimeofday(&var, NULL) #define diff(end, begin) \ - (end.tv_sec*1e6+end.tv_usec - begin.tv_sec*1e6+ begin.tv_usec) + ((end.tv_sec*1e6+end.tv_usec) - (begin.tv_sec*1e6+ begin.tv_usec)) #endif #endif