diff --git a/src/FileDmaInputFilter.cc b/src/FileDmaInputFilter.cc index 5b86004f8d3379568d2f0a210ee3c399706b0bc5..f020376e01710694499949ca1b27577bfc580552 100644 --- a/src/FileDmaInputFilter.cc +++ b/src/FileDmaInputFilter.cc @@ -17,6 +17,9 @@ #define DAX_INPUT 1 +constexpr size_t DAX_LENGTH = 16777216; +constexpr size_t DAX_OFFSET = 16777216; + FileDmaInputFilter::FileDmaInputFilter(const std::string &filename, size_t packetBufferSize, size_t nbPacketBuffers, ctrl &control) : InputFilter(packetBufferSize, nbPacketBuffers, control) { @@ -31,8 +34,8 @@ FileDmaInputFilter::FileDmaInputFilter(const std::string &filename, size_t packe std::cout << "File descriptor = " << std::to_string(f_descriptor_) << std::endl; } - uint32_t const length = 4096 * 4096 * 1000; // Multiple of page size - uint32_t const offset = 4096 * 4096; + uint32_t const length = DAX_LENGTH; // Multiple of page size + uint32_t const offset = DAX_OFFSET; mmap_buffer_ = reinterpret_cast<char *>(mmap(NULL, length, PROT_READ, MAP_SHARED, f_descriptor_, offset)); @@ -54,8 +57,7 @@ FileDmaInputFilter::FileDmaInputFilter(const std::string &filename, size_t packe FileDmaInputFilter::~FileDmaInputFilter() { fclose(inputFile); - uint32_t length = 4096 * 4096 * 1000; // Multiple of page size - munmap(mmap_buffer_, length); + munmap(mmap_buffer_, DAX_LENGTH); LOG(TRACE) << "Destroyed file input filter"; } @@ -120,6 +122,8 @@ static inline ssize_t read_dma_packet_buffer(char *src_buf, char *dst_buf, size_ size_t bytes_read = 0; const size_t align_by = 32; assert(size % align_by == 0); + std::cout << "read_dma_packet_buffer: reading up to " << std::to_string(size) << " bytes." + << std::endl; static constexpr uint64_t deadbeef = 0xdeadbeefdeadbeefL; @@ -128,11 +132,17 @@ static inline ssize_t read_dma_packet_buffer(char *src_buf, char *dst_buf, size_ memcpy(dst_buf + bytes_read, src_buf + bytes_read, align_by); // Must find end of packet ('deadbeef') within the destination buffer's allocated space if (*(uint64_t *)(src_buf + bytes_read) == deadbeef) { + std::cout << "Found deadbeef after " << std::to_string(bytes_read) << " bytes." << std::endl; return static_cast<ssize_t>(bytes_read + align_by); } bytes_read += align_by; } + if (bytes_read == size) { + std::cout << "Filled buffer but no deadbeef" << std::endl; + // return static_cast<ssize_t>(bytes_read); + } + // We are here because the packet cannot fit into the buffer throw std::runtime_error("Packet is too big and cannot fit into preallocated memory"); return -1; @@ -145,10 +155,11 @@ inline ssize_t FileDmaInputFilter::readPacket(char **buffer, ssize_t bufferSize) #if DAX_INPUT == 1 // bufferSize must be multiple of page size + std::cout << "Current mmap offset: " << std::to_string(mmap_offset_) << " out of " + << std::to_string(DAX_LENGTH) << std::endl; bytesRead = read_dma_packet_buffer(mmap_buffer_ + mmap_offset_, *buffer, bufferSize); mmap_offset_ += bytesRead; - - std::cout << "Bytes read : " << std::to_string(bytesRead) << std::endl; + std::cout << "Bytes read: " << std::to_string(bytesRead) << std::endl; // void *buffer = mmap(NULL, bufferSize, PROT_READ, MAP_PRIVATE, f_descriptor_, offset); //