Example #1
0
static int
set_tsc_freq_from_clock(void)
{
#define NS_PER_SEC 1E9

	struct timespec sleeptime = {.tv_nsec = 5E8 }; /* 1/2 second */

	struct timespec t_start, t_end;

	if (clock_gettime(CLOCK_MONOTONIC_RAW, &t_start) == 0) {
			uint64_t ns, end, start = get_tsc();
			nanosleep(&sleeptime,NULL);
			clock_gettime(CLOCK_MONOTONIC_RAW, &t_end);
			end = get_tsc();
			ns = ((t_end.tv_sec - t_start.tv_sec) * NS_PER_SEC);
			ns += (t_end.tv_nsec - t_start.tv_nsec);

			double secs = (double)ns/NS_PER_SEC;
			eal_tsc_resolution_hz = (uint64_t)((end - start)/secs);
			return 0;
	}

	return -1;
}


int main(int argc , char *argv[])
{
    int socket_desc , client_sock , c , read_size;
    unsigned long long total_rcvd = 0;
    struct sockaddr_in server , client;
    char client_message[2000];
     
    printf("Clock measure:%d\n\n",set_tsc_freq_from_clock());

    //Create socket
    socket_desc = socket(AF_INET , SOCK_STREAM , 0);
    if (socket_desc == -1)
    {
        printf("Could not create socket");
    }
    puts("Socket created");
     
    //Prepare the sockaddr_in structure
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = inet_addr("192.168.56.101");
    server.sin_port = htons( 80 );
     
    //Bind
    if( bind(socket_desc,(struct sockaddr *)&server , sizeof(server)) < 0)
    {
        //print the error message
        perror("bind failed. Error");
        return 1;
    }
    puts("bind done");
     
    //Listen
    listen(socket_desc , 3);
     
    //Accept and incoming connection
    puts("Waiting for incoming connections...");
    c = sizeof(struct sockaddr_in);
     
    //accept connection from an incoming client
    client_sock = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&c);
    if (client_sock < 0)
    {
        perror("accept failed");
        return 1;
    }
    puts("Connection accepted");
     
    uint64_t  end = get_tsc() + eal_tsc_resolution_hz;

    //Receive a message from client
    while( 1 )
    {
        read_size = recv(client_sock , client_message , 2000 , MSG_DONTWAIT );
        if (read_size > 0) 
        {
            total_rcvd += read_size;
        }

        if(get_tsc() >= end)
		{
			printf("%llu \n", total_rcvd);
			total_rcvd = 0;
			end = get_tsc() + eal_tsc_resolution_hz;
		}
    }
     
    if(read_size == 0)
    {
        puts("Client disconnected");
        fflush(stdout);
    }
    else if(read_size == -1)
    {
        perror("recv failed");
    }
     
    return 0;
}
Example #2
0
static int
set_tsc_freq_from_clock(void)
{
#define NS_PER_SEC 1E9

	struct timespec sleeptime = {.tv_nsec = 5E8 }; /* 1/2 second */

	struct timespec t_start, t_end;

	if (clock_gettime(CLOCK_MONOTONIC_RAW, &t_start) == 0) {
			uint64_t ns, end, start = get_tsc();
			nanosleep(&sleeptime,NULL);
			clock_gettime(CLOCK_MONOTONIC_RAW, &t_end);
			end = get_tsc();
			ns = ((t_end.tv_sec - t_start.tv_sec) * NS_PER_SEC);
			ns += (t_end.tv_nsec - t_start.tv_nsec);

			double secs = (double)ns/NS_PER_SEC;
			eal_tsc_resolution_hz = (uint64_t)((end - start)/secs);
			return 0;
	}

	return -1;
}


int main(int argc , char *argv[])
{
    int sock;
    struct sockaddr_in server;
    unsigned char buffer[1400] , server_reply[2000];
    unsigned long long total_rcvd = 0, rcvd;
	memset(buffer, 'A', 1400);

	printf("Clock measure:%d\n\n",set_tsc_freq_from_clock());

    //Create socket
    sock = socket(AF_INET , SOCK_STREAM , 0);
    if (sock == -1)
    {
        printf("Could not create socket");
    }
    puts("Socket created");
     
    server.sin_addr.s_addr = inet_addr("10.132.251.197");
    server.sin_family = AF_INET;
    server.sin_port = htons( 80 );
 
    //Connect to remote server
    if (connect(sock , (struct sockaddr *)&server , sizeof(server)) < 0)
    {
        perror("connect failed. Error");
        return 1;
    }
     
    puts("Connected\n");
     

	uint64_t  end = get_tsc() + eal_tsc_resolution_hz;


    //keep communicating with server
    while(1)
    {      
        //Send some data
        if( send(sock , buffer , 1400 , 0) < 0)
        {
            puts("Send failed");
            return 1;
        }
         
        //Receive a reply from the server
        if( (rcvd = recv(sock , server_reply , 2000 , 0)) < 0)
        {
            puts("recv failed");
            break;
        }
         
		else
		{
			total_rcvd += rcvd;
		}

		if(get_tsc() >= end)
		{
			printf("%llu \n", total_rcvd);
			total_rcvd = 0;
			end = get_tsc() + eal_tsc_resolution_hz;
		}
        //puts("Server reply :");
        //puts(server_reply);
    }
     
    close(sock);
    return 0;
}
Example #3
0
/*
 * This function measures the TSC frequency. It uses a variety of approaches.
 *
 * 1. If kernel provides CLOCK_MONOTONIC_RAW we use that to tune the TSC value
 * 2. If kernel does not provide that, and we have HPET support, tune using HPET
 * 3. Lastly, if neither of the above can be used, just sleep for 1 second and
 * tune off that, printing a warning about inaccuracy of timing
 */
static void set_tsc_freq (hptl_clock *clk) {
	if (set_tsc_freq_from_clock (clk) < 0) {
		set_tsc_freq_linux (clk);
	}
}