From 7699c3290cd533a0af108e44b3f01618a2adb9d0 Mon Sep 17 00:00:00 2001 From: sbhuller Date: Wed, 25 Mar 2026 15:56:07 +0100 Subject: [PATCH 1/2] allow using NUMA allocaito through the dpdk receivers when FDFakeReaderModules are used. --- src/NP02ReadoutApplication.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/NP02ReadoutApplication.cpp b/src/NP02ReadoutApplication.cpp index 36abb02..5f87f25 100644 --- a/src/NP02ReadoutApplication.cpp +++ b/src/NP02ReadoutApplication.cpp @@ -208,18 +208,24 @@ NP02ReadoutApplication::generate_modules(std::shared_ptrsenders(); auto det_receiver = d2d_conn->receiver(); + TLOG() << "reader class: " << reader_class; + TLOG() << "Receiver: " << det_receiver->class_name(); // Here I want to resolve the type of connection (network, felix, or?) // Rules of engagement: if the receiver interface is network or felix, the receivers should be castable to the counterpart - if (reader_class == "DPDKReaderModule" || reader_class == "SocketReaderModule") { + if (reader_class == "DPDKReaderModule" || reader_class == "SocketReaderModule" || reader_class == "FDFakeReaderModule") { if ((reader_class == "DPDKReaderModule" && !det_receiver->cast()) || + (reader_class == "FDFakeReaderModule" && !det_receiver->cast()) || // SSB: Note here, we are intrinsically locking FakeCard readout to only emulate DPDK data reception. Given NP02ReadoutApplication is intended for TDE readout at NP02, assuming this is OK. (reader_class == "SocketReaderModule" && !det_receiver->cast())) { throw(BadConf(ERS_HERE, fmt::format("{} requires NWDetDataReceiver, found {} of class {}", reader_class, det_receiver->UID(), det_receiver->class_name()))); } - if (reader_class == "DPDKReaderModule") { + // SSB: Note that here you need to include FDFakeCardReader as well, because emulated readout needs some way to map NUMA to streams + // Since we require a receiver in the NetworkDetector2DAQConnections this would still work if the receiver type is a DPDKReceiver + if (reader_class == "DPDKReaderModule" || reader_class == "FDFakeReaderModule") { auto dpdk_reciever = det_receiver->cast(); receiver_numa = (int16_t)dpdk_reciever->get_uses()->get_numa_id(); + TLOG() << "receiver numa: " << receiver_numa; } bool all_nw_senders = true; From ceca04f9350c434e81913c33d38c2d978a6873c5 Mon Sep 17 00:00:00 2001 From: sbhuller Date: Wed, 25 Mar 2026 16:42:43 +0100 Subject: [PATCH 2/2] remove TLOGs from debugging --- src/NP02ReadoutApplication.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/NP02ReadoutApplication.cpp b/src/NP02ReadoutApplication.cpp index 5f87f25..969e8cc 100644 --- a/src/NP02ReadoutApplication.cpp +++ b/src/NP02ReadoutApplication.cpp @@ -208,9 +208,6 @@ NP02ReadoutApplication::generate_modules(std::shared_ptrsenders(); auto det_receiver = d2d_conn->receiver(); - TLOG() << "reader class: " << reader_class; - TLOG() << "Receiver: " << det_receiver->class_name(); - // Here I want to resolve the type of connection (network, felix, or?) // Rules of engagement: if the receiver interface is network or felix, the receivers should be castable to the counterpart if (reader_class == "DPDKReaderModule" || reader_class == "SocketReaderModule" || reader_class == "FDFakeReaderModule") {