Changes in benchmark/io/http/worker.cfa [3f95dab:07997cd]
- File:
-
- 1 edited
-
benchmark/io/http/worker.cfa (modified) (13 diffs)
Legend:
- Unmodified
- Added
- Removed
-
benchmark/io/http/worker.cfa
r3f95dab r07997cd 13 13 #include "protocol.hfa" 14 14 #include "filecache.hfa" 15 16 static const unsigned long long period = 50_000_000;17 15 18 16 //============================================================================================= … … 97 95 // Send the desired file 98 96 int ret = answer_sendfile( this.pipe, fd, ans_fd, count, this.stats.sendfile ); 99 if(ret < 0) { 100 if( ret == -ECONNABORTED ) break REQUEST; 101 if( ret == -ECONNRESET ) break REQUEST; 102 if( ret == -EPIPE ) break REQUEST; 103 abort( "sendfile error: %d (%d) %s\n", ret, (int)errno, strerror(errno) ); 104 } 97 if( ret == -ECONNRESET ) break REQUEST; 105 98 106 99 if( options.log ) mutex(sout) sout | "=== Answer sent ==="; … … 109 102 if (stats_thrd) { 110 103 unsigned long long next = rdtscl(); 111 if(next > (last + period)) {104 if(next > (last + 500000000)) { 112 105 if(try_lock(stats_thrd->stats.lock __cfaabi_dbg_ctx2)) { 113 106 push(this.stats.sendfile, stats_thrd->stats.send); … … 148 141 char buffer[len]; 149 142 handle_connection( this.conn, fd, buffer, len, 0p, last ); 150 this.conn.stats.sendfile.maxfd = max(this.conn.stats.sendfile.maxfd, fd);151 this.conn.stats.sendfile.close++;152 143 153 144 if( options.log ) mutex(sout) sout | "=== Connection closed ==="; … … 171 162 /* paranoid */ assert( this.conn.pipe[0] != -1 ); 172 163 /* paranoid */ assert( this.conn.pipe[1] != -1 ); 173 this.conn.stats.sendfile.maxfd = max(this.conn.pipe[0], this.conn.pipe[1]);174 164 for() { 175 165 size_t len = options.socket.buflen; … … 183 173 if( options.log ) mutex(sout) sout | "=== Waiting new connection ==="; 184 174 handle_connection( this.conn, p.out.fd, buffer, len, &p.f, last ); 175 176 if( options.log ) mutex(sout) sout | "=== Connection closed ==="; 185 177 if(this.done) break; 186 this.conn.stats.sendfile.maxfd = max(this.conn.stats.sendfile.maxfd, p.out.fd); 187 this.conn.stats.sendfile.close++; 188 189 if( options.log ) mutex(sout) sout | "=== Connection closed ==="; 190 } 191 192 lock(stats_thrd->stats.lock __cfaabi_dbg_ctx2); 193 push(this.conn.stats.sendfile, stats_thrd->stats.send); 194 unlock(stats_thrd->stats.lock); 178 } 195 179 } 196 180 … … 214 198 215 199 static inline void push_connection( Acceptor & this, int fd ) { 216 this.stats.accepts++;217 200 PendingRead * p = 0p; 218 201 for() { … … 229 212 230 213 // #define ACCEPT_SPIN 231 #define ACCEPT_ONE 232 // #define ACCEPT_MANY 214 #define ACCEPT_MANY 233 215 234 216 void main( Acceptor & this ) { … … 250 232 abort( "accept error: (%d) %s\n", (int)errno, strerror(errno) ); 251 233 } 234 this.stats.accepts++; 252 235 253 236 if(this.done) return; … … 259 242 if (stats_thrd) { 260 243 unsigned long long next = rdtscl(); 261 if(next > (last + period)) { 262 if(try_lock(stats_thrd->stats.lock)) { 263 push(this.stats, stats_thrd->stats.accpt); 264 unlock(stats_thrd->stats.lock); 265 last = next; 266 } 267 } 268 } 269 270 if( options.log ) sout | "=== Accepting connection ==="; 271 } 272 273 #elif defined(ACCEPT_ONE) 274 if( options.log ) sout | "=== Accepting connection ==="; 275 for() { 276 int fd = cfa_accept4(this.sockfd, this.[addr, addrlen, flags], 0); 277 if(fd < 0) { 278 if( errno == ECONNABORTED ) break; 279 if( this.done && (errno == EINVAL || errno == EBADF) ) break; 280 abort( "accept error: (%d) %s\n", (int)errno, strerror(errno) ); 281 } 282 283 if(this.done) return; 284 285 if( options.log ) sout | "=== New connection" | fd | "" | ", waiting for requests ==="; 286 287 if(fd) push_connection(this, fd); 288 289 if (stats_thrd) { 290 unsigned long long next = rdtscl(); 291 if(next > (last + period)) { 244 if(next > (last + 500000000)) { 292 245 if(try_lock(stats_thrd->stats.lock)) { 293 246 push(this.stats, stats_thrd->stats.accpt); … … 316 269 if (stats_thrd) { 317 270 unsigned long long next = rdtscl(); 318 if(next > (last + period)) {271 if(next > (last + 500000000)) { 319 272 if(try_lock(stats_thrd->stats.lock __cfaabi_dbg_ctx2)) { 320 273 push(this.stats, stats_thrd->stats.accpt); … … 331 284 int fd = get_res(res); 332 285 reset(res); 286 this.stats.accepts++; 333 287 if(fd < 0) { 334 288 if( errno == ECONNABORTED ) continue; … … 365 319 #error no accept algorithm specified 366 320 #endif 367 lock(stats_thrd->stats.lock); 368 push(this.stats, stats_thrd->stats.accpt); 369 unlock(stats_thrd->stats.lock); 370 } 321 }
Note:
See TracChangeset
for help on using the changeset viewer.