Changes in benchmark/io/http/main.cfa [d9c2284:7f389a5c]
- File:
-
- 1 edited
-
benchmark/io/http/main.cfa (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
benchmark/io/http/main.cfa
rd9c2284 r7f389a5c 17 17 #include "filecache.hfa" 18 18 #include "options.hfa" 19 #include "parseargs.hfa" 19 20 #include "worker.hfa" 20 21 … … 22 23 // Globals 23 24 //============================================================================================= 25 Options options @= { 26 0, 27 42u, 28 0, 29 false, 30 false, 31 0 32 }; 33 24 34 channel & wait_connect; 25 35 … … 29 39 30 40 void ?{}( ServerProc & this ) { 31 /* paranoid */ assert( options. clopts.instance!= 0p );32 (this.self){ "Benchmark Processor", *options. clopts.instance};41 /* paranoid */ assert( options.the_cluster != 0p ); 42 (this.self){ "Benchmark Processor", *options.the_cluster }; 33 43 34 44 #if !defined(__CFA_NO_STATISTICS__) 35 if( options. clopts.procstats ) {36 print_stats_at_exit( this.self, options. clopts.instance->print_stats );45 if( options.procstats ) { 46 print_stats_at_exit( this.self, options.the_cluster->print_stats ); 37 47 } 38 if( options. clopts.viewhalts ) {48 if( options.viewhalts ) { 39 49 print_halts( this.self ); 40 50 } … … 46 56 //=============================================================================================' 47 57 int main( int argc, char * argv[] ) { 58 int port = 8080; 59 int backlog = 10; 60 int nprocs = 1; 61 int nworkers = 1; 62 int cl_flags = 0; 63 int chan_size = 10; 64 const char * path = "."; 48 65 //=================== 49 66 // Parse args 50 const char * path = parse_options(argc, argv); 67 static cfa_option opt[] = { 68 {'p', "port", "Port the server will listen on", port}, 69 {'c', "cpus", "Number of processors to use", nprocs}, 70 {'t', "threads", "Number of worker threads to use", nworkers}, 71 {'b', "accept-backlog", "Maximum number of pending accepts", backlog}, 72 {'B', "channel-size", "Maximum number of accepted connection pending", chan_size} 73 }; 74 int opt_cnt = sizeof(opt) / sizeof(cfa_option); 75 76 char **left; 77 parse_args( argc, argv, opt, opt_cnt, "[OPTIONS] [PATH] -- cforall http server", left ); 78 51 79 52 80 //=================== … … 57 85 //=================== 58 86 // Open Socket 59 printf("Listening on port %d\n", options.socket.port);87 printf("Listening on port %d\n", port); 60 88 int server_fd = socket(AF_INET, SOCK_STREAM, 0); 61 89 if(server_fd < 0) { … … 69 97 address.sin_family = AF_INET; 70 98 address.sin_addr.s_addr = htonl(INADDR_ANY); 71 address.sin_port = htons( options.socket.port );99 address.sin_port = htons( port ); 72 100 73 101 ret = bind( server_fd, (struct sockaddr *)&address, sizeof(address) ); … … 76 104 } 77 105 78 ret = listen( server_fd, options.socket.backlog );106 ret = listen( server_fd, backlog ); 79 107 if(ret < 0) { 80 108 abort( "listen error: (%d) %s\n", (int)errno, strerror(errno) ); … … 84 112 // Run Server Cluster 85 113 { 86 cluster cl = { "Server Cluster", options.clopts.flags };114 cluster cl = { "Server Cluster", cl_flags }; 87 115 #if !defined(__CFA_NO_STATISTICS__) 88 116 print_stats_at_exit( cl, CFA_STATS_READY_Q | CFA_STATS_IO ); 89 117 #endif 90 options. clopts.instance= &cl;118 options.the_cluster = &cl; 91 119 92 channel chan = { options.clopts.chan_size };120 channel chan = { chan_size }; 93 121 &wait_connect = &chan; 94 122 95 int pipe_cnt = options.clopts.nworkers * 2;96 int pipe_off;97 int * fds;98 [fds, pipe_off] = filefds( pipe_cnt );99 for(i; 0 ~ pipe_cnt ~ 2) {100 int ret = pipe(&fds[pipe_off + i]);101 if( ret < 0 ) { abort( "pipe error: (%d) %s\n", (int)errno, strerror(errno) ); }102 }103 104 123 { 105 ServerProc procs[ options.clopts.nprocs];124 ServerProc procs[nprocs]; 106 125 { 107 Worker workers[options.clopts.nworkers]; 108 for(i; options.clopts.nworkers) { 109 if( options.file_cache.fixed_fds ) { 110 workers[i].pipe[0] = pipe_off + (i * 2) + 0; 111 workers[i].pipe[1] = pipe_off + (i * 2) + 1; 112 } 113 else { 114 workers[i].pipe[0] = fds[pipe_off + (i * 2) + 0]; 115 workers[i].pipe[1] = fds[pipe_off + (i * 2) + 1]; 116 } 117 unpark( workers[i] __cfaabi_dbg_ctx2 ); 118 } 119 printf("%d workers started on %d processors\n", options.clopts.nworkers, options.clopts.nprocs); 126 Worker workers[nworkers]; 127 printf("%d workers started on %d processors\n", nworkers, nprocs); 120 128 { 121 129 Acceptor acceptor = { server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen, 0 }; 122 123 char buffer[128];124 while(!feof(stdin)) {125 fgets(buffer, 128, stdin);126 }127 128 printf("Shutting Down\n");129 130 } 130 printf(" Acceptor Closed\n");131 printf("Shutting Down\n"); 131 132 132 133 // Clean-up the workers 133 for( options.clopts.nworkers) {134 for(nworkers) { 134 135 put( wait_connect, -1 ); 135 136 } 136 137 } 137 printf("Workers Closed\n");138 138 } 139 140 for(i; pipe_cnt) {141 ret = close( fds[pipe_off + i] );142 if(ret < 0) {143 abort( "close pipe error: (%d) %s\n", (int)errno, strerror(errno) );144 }145 }146 free(fds);147 139 } 148 140
Note:
See TracChangeset
for help on using the changeset viewer.