Commit 4e7b51c9 authored by Andreas Schmidt's avatar Andreas Schmidt
Browse files

Migrate performance enhancements from other branch.

parent a7483af8
Loading
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -5,7 +5,8 @@ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

set(CMAKE_CXX_FLAGS "-fstack-protector -fstack-protector-all -Wall -pedantic " )
SET(CMAKE_C_FLAGS "-O2 -Wall -std=c11 -D_XOPEN_SOURCE=600" )
set(CMAKE_CXX_FLAGS "-fstack-protector -fstack-protector-all -Wall -std=c++11 -D_XOPEN_SOURCE=600" )
set(CMAKE_CXX_FLAGS_DEBUG "-O2 -Wall -ggdb" )
set(CMAKE_CXX_FLAGS_RELEASE "-Os -Wall" )

+3 −3
Original line number Diff line number Diff line
@@ -7,7 +7,7 @@
#include "block.h"
#include "codingParams.h"

void gather_redundancy_packets(const PrrtBlock *block_ptr, gf *const *fec, int *idx_p)
static void gather_redundancy_packets(const PrrtBlock *block_ptr, gf *const *fec, int *idx_p)
{
    uint32_t i;
    uint32_t m = 0;
@@ -27,7 +27,7 @@ void gather_redundancy_packets(const PrrtBlock *block_ptr, gf *const *fec, int *
    }
}

void gather_data_packets(PrrtBlock *block_ptr, gf *const *fec, int *idx_p)
static void gather_data_packets(PrrtBlock *block_ptr, gf *const *fec, int *idx_p)
{
    LIST_FOREACH(block_ptr->dataPackets, first, next, current) {
        PrrtPacket *packet = current->value;
@@ -36,7 +36,7 @@ void gather_data_packets(PrrtBlock *block_ptr, gf *const *fec, int *idx_p)
    }
}

void clear_list(gf *const *src, uint8_t k)
static void clear_list(gf *const *src, uint8_t k)
{
    int j = 0;
    for(j = 0; j < k; j++) {
+9 −9
Original line number Diff line number Diff line
@@ -10,19 +10,19 @@
#include "packet.h"
#include "clock.h"

void *encode_general_header(void *buf_ptr, const PrrtPacket *packet);
static void *encode_general_header(void *buf_ptr, const PrrtPacket *packet);

void *encode_data_header(void *buf_ptr, const void *payload);
static void *encode_data_header(void *buf_ptr, const void *payload);

void *encode_redundancy_header(void *buf_ptr, const void *payload);
static void *encode_redundancy_header(void *buf_ptr, const void *payload);

void *encode_feedback_header(void *buf_ptr, const void *payload);
static void *encode_feedback_header(void *buf_ptr, const void *payload);

void *decode_data_header(void *dstBuffer, const void *srcBuffer);
static void *decode_data_header(void *dstBuffer, const void *srcBuffer);

void *decode_redundancy_header(void *dstBuffer, const void *srcBuffer);
static void *decode_redundancy_header(void *dstBuffer, const void *srcBuffer);

void *decode_feedback_header(void *dstBuffer, const void *srcBuffer);
static void *decode_feedback_header(void *dstBuffer, const void *srcBuffer);

prrtPacketType_t PrrtPacket_type(PrrtPacket *packet_ptr)
{
@@ -131,7 +131,7 @@ PrrtPacket *PrrtPacket_copy(PrrtPacket *original)
    return NULL;
}

PrrtPacket *create_header(uint8_t priority, prrtSequenceNumber_t seqno, prrtPacketLength_t size, uint8_t type, uint8_t index)
static PrrtPacket *create_header(uint8_t priority, prrtSequenceNumber_t seqno, prrtPacketLength_t size, uint8_t type, uint8_t index)
{
    PrrtPacket *packet = calloc(1, sizeof(PrrtPacket));
    check_mem(packet);
+5 −5
Original line number Diff line number Diff line
@@ -9,7 +9,7 @@
#include "../socket.h"
#include "dataReceiver.h"

void retrieve_data_blocks(PrrtSocket *sock_ptr, prrtSequenceNumber_t base_seqno, uint8_t k, const PrrtBlock *block)
static void retrieve_data_blocks(PrrtSocket *sock_ptr, prrtSequenceNumber_t base_seqno, uint8_t k, const PrrtBlock *block)
{
    List *res = List_create();

@@ -27,7 +27,7 @@ void retrieve_data_blocks(PrrtSocket *sock_ptr, prrtSequenceNumber_t base_seqno,
    List_destroy(res);
}

void decode_block(PrrtSocket *socket, PrrtBlock *block)
static void decode_block(PrrtSocket *socket, PrrtBlock *block)
{
    if(block != NULL && PrrtBlock_decode_ready(block)) {
        check(PrrtBlock_decode(block), "Decoding failed");
@@ -54,7 +54,7 @@ void decode_block(PrrtSocket *socket, PrrtBlock *block)
    PERROR("Decoding failed.%s", "")
}

bool send_feedback(const PrrtSocket *sock_ptr, struct sockaddr_in remote)
static bool send_feedback(const PrrtSocket *sock_ptr, struct sockaddr_in remote)
{
    uint16_t remote_port = ntohs(remote.sin_port);
    char *remote_host = inet_ntoa(remote.sin_addr);
@@ -94,7 +94,7 @@ bool send_feedback(const PrrtSocket *sock_ptr, struct sockaddr_in remote)
    return false;
}

void handle_data_packet(PrrtSocket *sock_ptr, PrrtPacket *packet, struct sockaddr_in remote)
static void handle_data_packet(PrrtSocket *sock_ptr, PrrtPacket *packet, struct sockaddr_in remote)
{
    PrrtPacketDataPayload *payload = packet->payload;

@@ -146,7 +146,7 @@ void handle_data_packet(PrrtSocket *sock_ptr, PrrtPacket *packet, struct sockadd
    return;
}

void handle_redundancy_packet(PrrtSocket *socket, PrrtPacket *packet)
static void handle_redundancy_packet(PrrtSocket *socket, PrrtPacket *packet)
{
    PrrtPacketRedundancyPayload *redundancyPayload = packet->payload;

+3 −17
Original line number Diff line number Diff line
@@ -11,7 +11,7 @@
#include "dataTransmitter.h"


bool send_packet(PrrtSocket *sock_ptr, PrrtPacket *packet)
static bool send_packet(PrrtSocket *sock_ptr, PrrtPacket *packet)
{
    uint8_t buf[MAX_PAYLOAD_LENGTH];
    memset(buf, 0, sizeof(buf));
@@ -24,19 +24,8 @@ bool send_packet(PrrtSocket *sock_ptr, PrrtPacket *packet)
    LIST_FOREACH(sock_ptr->receivers, first, next, cur) {
        PrrtReceiver *recv = cur->value;

        struct hostent *hp;

        struct sockaddr_in targetaddr;
        memset((char *) &targetaddr, 0, sizeof(targetaddr));
        targetaddr.sin_family = AF_INET;
        targetaddr.sin_port = htons(recv->port);

        hp = gethostbyname(recv->host_name);
        check(hp != NULL, "Could not resolve host '%s'.", recv->host_name)
        memcpy((void *) &targetaddr.sin_addr, hp->h_addr_list[0], (size_t) hp->h_length);

        // TODO: [LATENCY] By knowing the time encoding etc. that happens upfront, one could make an adjustment here.
        check(sendto(sock_ptr->dataSocketFd, buf, length, 0, (struct sockaddr *) &targetaddr, sizeof(targetaddr)) ==
        check(sendto(sock_ptr->dataSocketFd, buf, length, 0, recv->ai->ai_addr, recv->ai->ai_addrlen) ==
              length, "Sendto failed.");
        usleep(1);
    }
@@ -61,17 +50,14 @@ void *send_data_loop(void *ptr)
    while(1) {
        check(pthread_mutex_lock(&sock_ptr->outQueueFilledMutex) == 0, "Lock failed.");
        while(List_count(sock_ptr->outQueue) == 0) {
            check(pthread_mutex_lock(&sock_ptr->closingMutex) == 0, "Lock failed.");
            if(sock_ptr->closing) {
            if (atomic_load_explicit(&sock_ptr->closing, memory_order_acquire)) {
                PrrtCodingParams_destroy(cpar);
                if(block != NULL) {
                    PrrtBlock_destroy(block);
                }
                check(pthread_mutex_unlock(&sock_ptr->closingMutex) == 0, "Unlock failed.");
                check(pthread_mutex_unlock(&sock_ptr->outQueueFilledMutex) == 0, "Unlock failed.");
                return NULL;
            }
            check(pthread_mutex_unlock(&sock_ptr->closingMutex) == 0, "Unlock failed.");
            check(pthread_cond_wait(&sock_ptr->outQueueFilledCv, &sock_ptr->outQueueFilledMutex) == 0,
                  "Cond wait failed.");
        }
Loading