-
Notifications
You must be signed in to change notification settings - Fork 2
/
SourceSDDS.prf.xml
186 lines (182 loc) · 15 KB
/
SourceSDDS.prf.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
<?xml version="1.0" encoding="UTF-8"?>
<!--
This file is protected by Copyright. Please refer to the COPYRIGHT file
distributed with this source distribution.
This file is part of REDHAWK rh.SourceSDDS.
REDHAWK rh.SourceSDDS is free software: you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the Free
Software Foundation, either version 3 of the License, or (at your option) any
later version.
REDHAWK rh.SourceSDDS is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
details.
You should have received a copy of the GNU Lesser General Public License along
with this program. If not, see http://www.gnu.org/licenses/.
-->
<!DOCTYPE properties PUBLIC "-//JTRS//DTD SCA V2.2.2 PRF//EN" "properties.dtd">
<properties>
<struct id="advanced_optimizations" mode="readwrite">
<description>A set of optimizations that may help adjust throughput performance. The defaults values work well for most systems.</description>
<simple id="advanced_optimizations::buffer_size" name="buffer_size" type="ulong">
<description>The maximum number of elements (SDDS Packets) which can be held within the internal buffer. If there is up stream back pressure this buffer will start to fill first and provide pressure on the socket buffer if full. Current fullness is displayed within status struct</description>
<value>20000</value>
<units>pkts</units>
</simple>
<simple id="advanced_optimizations::udp_socket_buffer_size" name="udp_socket_buffer_size" type="ulong">
<description>The socket buffer size requested via a call to setsockopt. Once the socket is opened, the user provided value will be replaced with the true value returned by the kernel. Note that the actual value set will depend on system configuration; in addition, the kernel will double the value to allow space for bookkeeping overhead. </description>
<value>134217728</value>
<units>bytes</units>
</simple>
<simple id="advanced_optimizations::pkts_per_socket_read" name="pkts_per_socket_read" type="ushort">
<description>The maximum number of SDDS packets read per read of the socket. The recvmmsg system call is used to read multiple UDP packets per system call, and a non-blocking socket used so at most, pkts_per_socket_read will be read.</description>
<value>500</value>
<units>pkts</units>
</simple>
<simple id="advanced_optimizations::sdds_pkts_per_bulkio_push" name="sdds_pkts_per_bulkio_push" type="ushort">
<description>The number of SDDS packets to aggregate per BulkIO pushpacket call. Note that situations such as a TTV change, or packet drops may cause push packets to occur before the desired size is achieved. Increasing this value will improve throughput performance but impact latency. It also has an affect on timing precision as only the first SDDS packet in the groups time stamp is preserved in the BulkIO call.</description>
<value>1000</value>
<units>pkts</units>
</simple>
<simple id="advanced_optimizations::socket_read_thread_affinity" name="socket_read_thread_affinity" type="string">
<description>Set using the same bitmask syntax (eg. FFFFFFFF) as taskset and limits the CPU affinity of the thread which reads from the socket to only the specified CPUs. If externally set, this property will update to reflect the actual thread affinity</description>
<value></value>
</simple>
<simple id="advanced_optimizations::work_thread_affinity" name="sdds_to_bulkio_thread_affinity" type="string">
<description>Set using the same bitmask syntax (eg. FFFFFFFF) as taskset and limits the CPU affinity of the thread which consumes packets from the internal buffer, and makes the call to pushpacket</description>
<value></value>
</simple>
<simple id="advanced_optimizations::socket_read_thread_priority" name="socket_read_thread_priority" type="long">
<description>If set to non-zero, the scheduler type for the socket reader thread will be set to Round Robin and the priority set to the provided value using the pthread_setschedparam call. Note that rtprio privileges will need to be given to user running the component and that in most cases, this feature is not needed to keep up with data rates.</description>
<value>-1</value>
</simple>
<simple id="advanced_optimizations::sdds_to_bulkio_thread_priority" name="sdds_to_bulkio_thread_priority" type="long">
<description>If set to non-zero, the scheduler type for the SDDS to BulkIO processor thread will be set to Round Robin and the priority set to the provided value using the pthread_setschedparam call. Note that rtprio privileges will need to be given to user running the component and that in most cases, this feature is not needed to keep up with data rates.</description>
<value>-1</value>
</simple>
<simple id="advanced_optimizations::check_for_duplicate_sender" name="check_for_duplicate_sender" type="boolean">
<description>If true, the source address of each SDDS packet will be checked and a warning printed if two different hosts are sending packets on the same multicast address. This is used primarily to debug the network configuration and can impact performance so is disabled by default.</description>
<value>false</value>
</simple>
<configurationkind kindtype="property"/>
</struct>
<struct id="attachment_override" mode="readwrite">
<description>Used in place of the SDDS Port to establish a multicast or unicast connection to a specific host and port. If enabled, this will overrule calls to attach however any SRI received from the attach port will be used.</description>
<simple id="attachment_override::enabled" name="enabled" type="boolean">
<description>Denotes if the attachment override values should be used.</description>
<value>false</value>
</simple>
<simple id="attachment_override::ip_address" name="ip_address" type="string">
<description>For the unicast case this is the IP address of the network interface to bind to where the address of 0.0.0.0 is acceptable. For the multicast case this is the multicast group to join.</description>
<value>127.0.0.1</value>
</simple>
<simple id="attachment_override::vlan" name="vlan" type="ushort">
<description>VLAN of the interface carrying the SDDS traffic. Ignored if set to 0.</description>
<value>0</value>
</simple>
<simple id="attachment_override:port" name="port" type="ushort">
<description>Source port of SDDS traffic (default SDDS port is: 29495) </description>
<value>29495</value>
</simple>
<simple id="attachment_override:endianness" name="endianness" type="string">
<description>The endianness (Big or Little) of the data portion of the SDDS packet. Defaults to Network Byte Order (Big Endian)</description>
<value>4321</value>
<enumerations>
<enumeration label="Little Endian" value="1234"/>
<enumeration label="Big Endian" value="4321"/>
</enumerations>
</simple>
<configurationkind kindtype="property"/>
</struct>
<simple id="interface" mode="readwrite" name="interface" type="string">
<description>The network interface you intend to be present or blank if no check is needed. Do not include the VLAN in the interface name. (eg. For eth0.28 the interface should be set to "eth0" NOT "eth0.28").</description>
<value>eth0</value>
<kind kindtype="property"/>
<action type="external"/>
</simple>
<struct id="advanced_configuration" mode="readwrite">
<description>Configuration options that affect when and how to forward SDDS packets to BulkIO</description>
<simple id="advanced_configuration::push_on_ttv" name="push_on_ttv" type="boolean">
<description>If set to true, a push packet will occur on any state change of the SDDS Time Tag Valid (TTV) flag. Eg. If TTV goes from True to False, all currently buffered data will be sent with a push packet and the next packet will start with the TTV False data. The TCS_INVALID flag will be set in the BulkIO timing field if the TTV flag is false.</description>
<value>false</value>
</simple>
<simple id="advanced_configuration::wait_on_ttv" name="wait_on_ttv" type="boolean">
<description>If set to true, no BulkIO packets will be pushed unless the SDDS Time Tag Valid (TTV) flag is set to true. Any packets missed due to invalid Time Tag will be counted as dropped / missed packets.</description>
<value>false</value>
</simple>
<configurationkind kindtype="property"/>
</struct>
<struct id="status" mode="readonly">
<description>A read only status structure to monitor the components performance as well as dropped packets and timing slips.</description>
<simple id="status::expected_sequence_number" name="expected_sequence_number" type="ushort">
<description>The next SDDS sequence number expected. Useful to confirm SDDS packets are being received.</description>
<value>0</value>
</simple>
<simple id="status::dropped_packets" name="dropped_packets" type="ulong">
<description>The number of lost SDDS packets. For simplicity, the calculation includes the optional checksum packets in the lost SDDS packet count (sent every 32 packets) so it may not reflect the exact number of dropped packets if checksum packets are not used (and they never are).</description>
<value>0</value>
</simple>
<simple id="status::bits_per_sample" name="bits_per_sample" type="ushort">
<description>The size (in bits) of the SDDS sample datatype which is derived from the bps field in the SDDS header. Values map from: (8 -> Byte), (16 -> Short), (32 -> Float) |
| empty_buffers_available | The number of empty SDDS buffers in the internal buffer that are available to the socket reader. Note empty_buffers_available + buffers_to_work may be less than the total buffer size as the socket reader pops off pkts_per_socket_read and the BulkIO thread pops sdds_pkts_per_bulkio_push.</description>
<value>0</value>
</simple>
<simple id="status::empty_buffers_available" name="empty_buffers_available" type="string">
<description>The number of empty SDDS buffers in the internal buffer that are available to the socket reader. Note empty_buffers_available + buffers_to_work may be less than the total buffer size as the socket reader pops off pkts_per_socket_read and the BulkIO thread pops sdds_pkts_per_bulkio_push.</description>
<value></value>
</simple>
<simple id="status::buffers_to_work" name="buffers_to_work" type="string">
<description>The number of full SDDS buffers in the internal buffer that need to be converted to BulkIO by the SDDS to BulkIO processor. Note empty_buffers_available + buffers_to_work may be less than the total buffer size as the socket reader pops off pkts_per_socket_read and the BulkIO thread pops sdds_pkts_per_bulkio_push.</description>
<value></value>
</simple>
<simple id="status::udp_socket_buffer_queue" name="udp_socket_buffer_queue" type="string">
<description>The current size of the kernels UDP buffer for the specific IP and port in use by this component. The data is parsed from /proc/net/udp. Note that multiple consumers may read from the same IP and socket and will appear to have unique lines the /proc/net/udp file however; the kernel keeps a *single* buffer for all consumers so this property reflects the max value of "fullness" as the slowest process will cause all processes to miss packets.</description>
<value></value>
</simple>
<simple id="status::num_udp_socket_readers" name="num_udp_socket_readers" type="long">
<description>The number of consumers on this socket. The data is parsed from /proc/net/udp.</description>
<value>0</value>
</simple>
<simple id="status::input_address" name="input_address" type="string">
<description>The current host IP address in use either via the attachment override or attach call.</description>
<value></value>
</simple>
<simple id="status::input_port" name="input_port" type="long">
<description>The current host port in use either via the attachment override or attach call.</description>
<value>0</value>
</simple>
<simple id="status::input_vlan" name="input_vlan" type="long">
<description>The current host vlan in use either via the attachment override or attach call.</description>
<value>0</value>
</simple>
<simple id="status::input_endianness" name="input_endianness" type="string">
<description>The endianness set either via SRI keywords or attachment override.</description>
<value>4321</value>
<enumerations>
<enumeration label="Little Endian" value="1234"/>
<enumeration label="Big Endian" value="4321"/>
</enumerations>
</simple>
<simple id="status::input_samplerate" name="input_samplerate" type="double">
<description>The current samplerate, derived from either the SRI or the frequency field of the SDDS packet. The sample rate supplied by the attach call is ignored!</description>
<value>0</value>
</simple>
<simple id="status::input_stream_id" name="input_stream_id" type="string">
<description>The stream id set via SRI. A default is used if no stream ID is passed via SRI.</description>
<value></value>
</simple>
<simple id="status::time_slips" name="time_slips" type="longlong">
<description>The number of time slips which have occurred. A time slip could be either a single time slip event or an accumulated time slip. A single time slip event is defined as the SDDS timestamps between two SDDS packets exceeding a one sample delta. (eg. there was one sample time lag or lead between consecutive packets) An accumulated time slip is defined as the absolute value of the time error accumulator exceeding 0.000001 seconds. The time error accumulator is a running total of the delta between the expected (1/sample_rate) and actual time stamps and should always hover around zero.</description>
<value>0</value>
</simple>
<simple id="status::num_packets_dropped_by_nic" name="num_packets_dropped_by_nic" type="long">
<description>Read from /sys/class/<interface>/statistics/rx_dropped, indicates the number of packets received by the network device but dropped, that are not forwarded to the upper layers for packet processing. This is NOT an indication of full buffers but instead a hint that something may be missconfigured as the NIC is receiving packets it does not know what to do with. See the network driver for the exact meaning of this value.</description>
<value>0</value>
</simple>
<simple id="status::interface" name="interface" type="string">
<description>The network interface in use, chosen based on 1) interface specified, or if blank 2) VLAN specified, or 3) unicast IP or multicast group of incoming data and system's ip routing table, or 4) the first suitable interface found.</description>
<value></value>
</simple>
<configurationkind kindtype="property"/>
</struct>
</properties>