Ignore:
Timestamp:
Jun 9, 2022, 10:56:34 AM (8 months ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
master, pthread-emulation, qualifiedEnum
Children:
430ce61
Parents:
8c58e73
Message:

Moved stats printer to it's own file and now using push-stats rather than pull

File:
1 edited

Legend:

Unmodified
Added
Removed
  • benchmark/io/http/worker.cfa

    r8c58e73 r137974a  
    1414#include "filecache.hfa"
    1515
    16 void ?{}( sendfile_stats_t & this ) {
    17         this.calls = 0;
    18         this.tries = 0;
    19         this.header = 0;
    20         this.splcin = 0;
    21         this.splcot = 0;
    22         for(i; zipf_cnts) {
    23                 this.avgrd[i].calls = 0;
    24                 this.avgrd[i].bytes = 0;
    25         }
    26 }
    27 
    2816//=============================================================================================
    2917// Generic connection handling
    3018//=============================================================================================
    31 static void handle_connection( connection & this, volatile int & fd, char * buffer, size_t len, io_future_t * f ) {
     19static void handle_connection( connection & this, volatile int & fd, char * buffer, size_t len, io_future_t * f, unsigned long long & last ) {
    3220        REQUEST:
    3321        for() {
     
    11199                if( options.log ) sout | "=== Answer sent ===";
    112100        }
     101
     102        if (stats_thrd) {
     103                unsigned long long next = rdtscl();
     104                if(next > (last + 500000000)) {
     105                        if(try_lock(stats_thrd->stats.lock)) {
     106                                push(this.stats.sendfile, stats_thrd->stats.send);
     107                                unlock(stats_thrd->stats.lock);
     108                                last = next;
     109                        }
     110                }
     111        }
    113112}
    114113
     
    124123void main( AcceptWorker & this ) {
    125124        park();
     125        unsigned long long last = rdtscl();
    126126        /* paranoid */ assert( this.conn.pipe[0] != -1 );
    127127        /* paranoid */ assert( this.conn.pipe[1] != -1 );
     
    139139                size_t len = options.socket.buflen;
    140140                char buffer[len];
    141                 handle_connection( this.conn, fd, buffer, len, 0p );
     141                handle_connection( this.conn, fd, buffer, len, 0p, last );
    142142
    143143                if( options.log ) sout | "=== Connection closed ===";
     
    157157void main( ChannelWorker & this ) {
    158158        park();
     159        unsigned long long last = rdtscl();
    159160        /* paranoid */ assert( this.conn.pipe[0] != -1 );
    160161        /* paranoid */ assert( this.conn.pipe[1] != -1 );
     
    168169
    169170                if( options.log ) sout | "=== Waiting new connection ===";
    170                 handle_connection( this.conn, p.out.fd, buffer, len, &p.f );
     171                handle_connection( this.conn, p.out.fd, buffer, len, &p.f, last );
    171172
    172173                if( options.log ) sout | "=== Connection closed ===";
     
    187188void main( Acceptor & this ) {
    188189        park();
     190        unsigned long long last = rdtscl();
    189191        if( options.log ) sout | "=== Accepting connection ===";
    190192        for() {
     
    192194                if(fd < 0) {
    193195                        if( errno == EWOULDBLOCK) {
     196                                this.stats.eagains++;
    194197                                yield();
    195198                                continue;
     
    199202                        abort( "accept error: (%d) %s\n", (int)errno, strerror(errno) );
    200203                }
     204                this.stats.accepts++;
     205
    201206                if(this.done) return;
    202207
     
    210215                                if(p) break;
    211216                                yield();
     217                                this.stats.creates++;
    212218                        };
    213219
     
    216222                }
    217223
     224                if (stats_thrd) {
     225                        unsigned long long next = rdtscl();
     226                        if(next > (last + 500000000)) {
     227                                if(try_lock(stats_thrd->stats.lock)) {
     228                                        push(this.stats, stats_thrd->stats.accpt);
     229                                        unlock(stats_thrd->stats.lock);
     230                                        last = next;
     231                                }
     232                        }
     233                }
     234
    218235                if( options.log ) sout | "=== Accepting connection ===";
    219236        }
Note: See TracChangeset for help on using the changeset viewer.