DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
reader_confgen.py
Go to the documentation of this file.
1# Set moo schema search path
2from dunedaq.env import get_moo_model_path
3import moo.io
4
5moo.io.default_load_path = get_moo_model_path()
6
7# Load configuration types
8import moo.otypes
9
10moo.otypes.load_types("dpdklibs/nicreader.jsonnet")
11
12moo.otypes.load_types("datahandlinglibs/sourceemulatorconfig.jsonnet")
13moo.otypes.load_types("datahandlinglibs/readoutconfig.jsonnet")
14moo.otypes.load_types("datahandlinglibs/recorderconfig.jsonnet")
15
16# Import new types
18import dunedaq.datahandlinglibs.sourceemulatorconfig as sec
19import dunedaq.datahandlinglibs.readoutconfig as rconf
20import dunedaq.datahandlinglibs.recorderconfig as bfs
21
22from daqconf.core.app import App, ModuleGraph
23from daqconf.core.daqmodule import DAQModule
24from daqconf.core.conf_utils import Endpoint, Direction, Queue
25
27
28# Time to wait on pop()
29QUEUE_POP_WAIT_MS = 100
30
31
33 DRO_CONFIG=None,
34 HOST='localhost',
35 ENABLE_SOFTWARE_TPG=False,
36 NUMBER_OF_GROUPS=4,
37 NUMBER_OF_LINKS_PER_GROUP=1,
38 NUMBER_OF_DATA_PRODUCERS=1,
39 BASE_SOURCE_IP="10.73.139.",
40 DESTINATION_IP="10.73.139.17",
41 FRONTEND_TYPE='tde',
42 EAL_ARGS='',
43):
44
45 number_of_dlh = NUMBER_OF_GROUPS
46
47 DRO_CONFIG = []
48
49 modules = []
50 queues = []
51
52 links = []
53 rxcores = []
54 lid = 0
55 last_ip = 100
56 for group in range(NUMBER_OF_GROUPS):
57 offset= 0
58 qlist = []
59 for src in range(NUMBER_OF_LINKS_PER_GROUP):
60 links.append(nrc.Link(id=lid, ip=BASE_SOURCE_IP+str(last_ip), rx_q=lid, lcore=group+1))
61 qlist.append(lid)
62 lid += 1
63 last_ip += 1
64 offset += NUMBER_OF_LINKS_PER_GROUP
65 rxcores.append(nrc.LCore(lcore_id=group+1, rx_qs=qlist))
66
67 modules += [DAQModule(name="nic_reader", plugin="DPDKReaderModule",
68 conf=nrc.Conf(eal_arg_list=EAL_ARGS,
69 dest_ip=DESTINATION_IP,
70 rx_cores=rxcores,
71 ip_sources=links),
72 )]
73
74 queues += [Queue(f"nic_reader.output_{idx}",
75 f"datahandler_{idx}.raw_input",
76 f'{FRONTEND_TYPE}_link_{idx}', 100000)
77 for idx in range(number_of_dlh)]
78
79 # for link in DRO_CONFIG.link:
80 for i in range(number_of_dlh):
81 source_id = i
82 if ENABLE_SOFTWARE_TPG:
83 queues += [Queue(f"datahandler_{idx}.tp_out",f"sw_tp_handler_{idx}.raw_input",f"sw_tp_link_{idx}",100000 )]
84
85 modules += [DAQModule(name=f"datahandler_{source_id}", plugin="RawDataHandler", conf=rconf.Conf(
86 readoutmodelconf=rconf.DataHandlingModelConf(
87 source_queue_timeout_ms=QUEUE_POP_WAIT_MS,
88 fake_trigger_flag=1,
89 # source_id =link.dro_source_id,
90 source_id=source_id,
91 timesync_connection_name = f"timesync_dlh_{source_id}",
92 timesync_topic_name = "Timesync",
93 ),
94 latencybufferconf=rconf.LatencyBufferConf(
95 latency_buffer_size=1000,
96 # source_id=link.dro_source_id,
97 source_id=source_id,
98 ),
99 rawdataprocessorconf=rconf.RawDataProcessorConf(
100 # source_id=link.dro_source_id,
101 source_id=source_id,
102 enable_software_tpg=ENABLE_SOFTWARE_TPG,
103 error_counter_threshold=100,
104 error_reset_freq=10000,
105 ),
106 requesthandlerconf=rconf.RequestHandlerConf(
107 latency_buffer_size=1000,
108 pop_limit_pct=0.8,
109 pop_size_pct=0.1,
110 # source_id=link.dro_source_id,
111 source_id=source_id,
112 output_file=f"output_{source_id}.out",
113 stream_buffer_size=8388608,
114 enable_raw_recording=True,
115 ),
116 ), extra_commands={"record": rconf.RecordingParams(duration=10)})]
117
118 modules += [DAQModule(name="timesync_consumer", plugin="TimeSyncConsumer")]
119 modules += [DAQModule(name="fragment_consumer", plugin="FragmentConsumer")]
120
121 mgraph = ModuleGraph(modules, queues=queues)
122
123 for idx in range(number_of_dlh):
124 mgraph.connect_modules(f"datahandler_{idx}.timesync_output", "timesync_consumer.input_queue", "timesync_q")
125 mgraph.connect_modules(f"datahandler_{idx}.fragment_queue", "fragment_consumer.input_queue", "data_fragments_q", 100)
126 mgraph.add_endpoint(f"requests_{idx}", f"datahandler_{idx}.request_input", Direction.IN)
127 mgraph.add_endpoint(f"requests_{idx}", None, Direction.OUT) # Fake request endpoint
128
129 dpdk_app = App(modulegraph=mgraph, host=HOST, name="dpdk_reader")
130 return dpdk_app
generate_dpdk_reader_app(DRO_CONFIG=None, HOST='localhost', ENABLE_SOFTWARE_TPG=False, NUMBER_OF_GROUPS=4, NUMBER_OF_LINKS_PER_GROUP=1, NUMBER_OF_DATA_PRODUCERS=1, BASE_SOURCE_IP="10.73.139.", DESTINATION_IP="10.73.139.17", FRONTEND_TYPE='tde', EAL_ARGS='')