Changes in / [6a33e40:d3261710]


Ignore:
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • benchmark/io/http/Makefile.am

    r6a33e40 rd3261710  
    2121include $(top_srcdir)/tools/build/cfa.make
    2222
    23 AM_CFLAGS = -O2 -Wall -Wextra -I$(srcdir) -lrt -pthread # -Werror
     23AM_CFLAGS = -O3 -Wall -Wextra -I$(srcdir) -lrt -pthread # -Werror
    2424AM_CFAFLAGS = -quiet -nodebug
    2525AM_LDFLAGS = -quiet -nodebug
  • benchmark/io/http/main.cfa

    r6a33e40 rd3261710  
    1 #define __USE_GNU
     1#define _GNU_SOURCE
    22
    33#include <errno.h>
     
    66#include <unistd.h>
    77extern "C" {
     8        #include <sched.h>
    89        #include <signal.h>
    910        #include <sys/socket.h>
     
    6768        (this.self){ "Server Cluster", options.clopts.params };
    6869
     70        cpu_set_t fullset;
     71        CPU_ZERO(&fullset);
     72        int ret = sched_getaffinity(getpid(), sizeof(fullset), &fullset);
     73        if( ret != 0 ) abort | "sched_getaffinity failed with" | errno | strerror( errno );
     74        int cnt = CPU_COUNT(&fullset);
     75
    6976        this.procs = alloc(options.clopts.nprocs);
    7077        for(i; options.clopts.nprocs) {
    7178                (this.procs[i]){ "Benchmark Processor", this.self };
     79
     80                int c = 0;
     81                int n = 1 + (i % cnt);
     82                for(int j = 0; j < CPU_SETSIZE; j++) {
     83                        if(CPU_ISSET(j, &fullset)) n--;
     84                        if(n == 0) {
     85                                c = j;
     86                                break;
     87                        }
     88                }
     89                cpu_set_t localset;
     90                CPU_ZERO(&localset);
     91                CPU_SET(c, &localset);
     92                ret = pthread_setaffinity_np(this.procs[i].kernel_thread, sizeof(localset), &localset);
     93                if( ret != 0 ) abort | "sched_getaffinity failed with" | ret | strerror( ret );
    7294
    7395                #if !defined(__CFA_NO_STATISTICS__)
     
    146168        int waited = 0;
    147169        for() {
    148                 ret = bind( server_fd, (struct sockaddr *)&address, sizeof(address) );
     170                int sockfd = server_fd;
     171                __CONST_SOCKADDR_ARG addr;
     172                addr.__sockaddr__ = (struct sockaddr *)&address;
     173                socklen_t addrlen = sizeof(address);
     174                ret = bind( sockfd, addr, addrlen );
    149175                if(ret < 0) {
    150176                        if(errno == EADDRINUSE) {
  • libcfa/src/concurrency/kernel_private.hfa

    r6a33e40 rd3261710  
    219219
    220220        // Step 2 : acquire our local lock
     221        /*paranoid*/ verify(!kernelTLS().sched_lock);
    221222        __atomic_acquire( &kernelTLS().sched_lock );
    222223        /*paranoid*/ verify(kernelTLS().sched_lock);
  • libcfa/src/concurrency/ready_queue.cfa

    r6a33e40 rd3261710  
    201201uint_fast32_t ready_mutate_lock( void ) with(*__scheduler_lock) {
    202202        /* paranoid */ verify( ! __preemption_enabled() );
    203         /* paranoid */ verify( ! kernelTLS().sched_lock );
    204203
    205204        // Step 1 : lock global lock
     
    207206        //   to simply lock their own lock and enter.
    208207        __atomic_acquire( &write_lock );
     208
     209        // Make sure we won't deadlock ourself
     210        // Checking before acquiring the writer lock isn't safe
     211        // because someone else could have locked us.
     212        /* paranoid */ verify( ! kernelTLS().sched_lock );
    209213
    210214        // Step 2 : lock per-proc lock
Note: See TracChangeset for help on using the changeset viewer.