@@ -91,18 +91,7 @@ static bool opt_need_wakeup = true;
91
91
static u32 opt_num_xsks = 1 ;
92
92
static u32 prog_id ;
93
93
94
- struct xsk_umem_info {
95
- struct xsk_ring_prod fq ;
96
- struct xsk_ring_cons cq ;
97
- struct xsk_umem * umem ;
98
- void * buffer ;
99
- };
100
-
101
- struct xsk_socket_info {
102
- struct xsk_ring_cons rx ;
103
- struct xsk_ring_prod tx ;
104
- struct xsk_umem_info * umem ;
105
- struct xsk_socket * xsk ;
94
+ struct xsk_ring_stats {
106
95
unsigned long rx_npkts ;
107
96
unsigned long tx_npkts ;
108
97
unsigned long rx_dropped_npkts ;
@@ -119,6 +108,21 @@ struct xsk_socket_info {
119
108
unsigned long prev_rx_full_npkts ;
120
109
unsigned long prev_rx_fill_empty_npkts ;
121
110
unsigned long prev_tx_empty_npkts ;
111
+ };
112
+
113
+ struct xsk_umem_info {
114
+ struct xsk_ring_prod fq ;
115
+ struct xsk_ring_cons cq ;
116
+ struct xsk_umem * umem ;
117
+ void * buffer ;
118
+ };
119
+
120
+ struct xsk_socket_info {
121
+ struct xsk_ring_cons rx ;
122
+ struct xsk_ring_prod tx ;
123
+ struct xsk_umem_info * umem ;
124
+ struct xsk_socket * xsk ;
125
+ struct xsk_ring_stats ring_stats ;
122
126
u32 outstanding_tx ;
123
127
};
124
128
@@ -173,12 +177,12 @@ static int xsk_get_xdp_stats(int fd, struct xsk_socket_info *xsk)
173
177
return err ;
174
178
175
179
if (optlen == sizeof (struct xdp_statistics )) {
176
- xsk -> rx_dropped_npkts = stats .rx_dropped ;
177
- xsk -> rx_invalid_npkts = stats .rx_invalid_descs ;
178
- xsk -> tx_invalid_npkts = stats .tx_invalid_descs ;
179
- xsk -> rx_full_npkts = stats .rx_ring_full ;
180
- xsk -> rx_fill_empty_npkts = stats .rx_fill_ring_empty_descs ;
181
- xsk -> tx_empty_npkts = stats .tx_ring_empty_descs ;
180
+ xsk -> ring_stats . rx_dropped_npkts = stats .rx_dropped ;
181
+ xsk -> ring_stats . rx_invalid_npkts = stats .rx_invalid_descs ;
182
+ xsk -> ring_stats . tx_invalid_npkts = stats .tx_invalid_descs ;
183
+ xsk -> ring_stats . rx_full_npkts = stats .rx_ring_full ;
184
+ xsk -> ring_stats . rx_fill_empty_npkts = stats .rx_fill_ring_empty_descs ;
185
+ xsk -> ring_stats . tx_empty_npkts = stats .tx_ring_empty_descs ;
182
186
return 0 ;
183
187
}
184
188
@@ -198,9 +202,9 @@ static void dump_stats(void)
198
202
double rx_pps , tx_pps , dropped_pps , rx_invalid_pps , full_pps , fill_empty_pps ,
199
203
tx_invalid_pps , tx_empty_pps ;
200
204
201
- rx_pps = (xsks [i ]-> rx_npkts - xsks [i ]-> prev_rx_npkts ) *
205
+ rx_pps = (xsks [i ]-> ring_stats . rx_npkts - xsks [i ]-> ring_stats . prev_rx_npkts ) *
202
206
1000000000. / dt ;
203
- tx_pps = (xsks [i ]-> tx_npkts - xsks [i ]-> prev_tx_npkts ) *
207
+ tx_pps = (xsks [i ]-> ring_stats . tx_npkts - xsks [i ]-> ring_stats . prev_tx_npkts ) *
204
208
1000000000. / dt ;
205
209
206
210
printf ("\n sock%d@" , i );
@@ -209,47 +213,58 @@ static void dump_stats(void)
209
213
210
214
printf ("%-15s %-11s %-11s %-11.2f\n" , "" , "pps" , "pkts" ,
211
215
dt / 1000000000. );
212
- printf (fmt , "rx" , rx_pps , xsks [i ]-> rx_npkts );
213
- printf (fmt , "tx" , tx_pps , xsks [i ]-> tx_npkts );
216
+ printf (fmt , "rx" , rx_pps , xsks [i ]-> ring_stats . rx_npkts );
217
+ printf (fmt , "tx" , tx_pps , xsks [i ]-> ring_stats . tx_npkts );
214
218
215
- xsks [i ]-> prev_rx_npkts = xsks [i ]-> rx_npkts ;
216
- xsks [i ]-> prev_tx_npkts = xsks [i ]-> tx_npkts ;
219
+ xsks [i ]-> ring_stats . prev_rx_npkts = xsks [i ]-> ring_stats . rx_npkts ;
220
+ xsks [i ]-> ring_stats . prev_tx_npkts = xsks [i ]-> ring_stats . tx_npkts ;
217
221
218
222
if (opt_extra_stats ) {
219
223
if (!xsk_get_xdp_stats (xsk_socket__fd (xsks [i ]-> xsk ), xsks [i ])) {
220
- dropped_pps = (xsks [i ]-> rx_dropped_npkts -
221
- xsks [i ]-> prev_rx_dropped_npkts ) * 1000000000. / dt ;
222
- rx_invalid_pps = (xsks [i ]-> rx_invalid_npkts -
223
- xsks [i ]-> prev_rx_invalid_npkts ) * 1000000000. / dt ;
224
- tx_invalid_pps = (xsks [i ]-> tx_invalid_npkts -
225
- xsks [i ]-> prev_tx_invalid_npkts ) * 1000000000. / dt ;
226
- full_pps = (xsks [i ]-> rx_full_npkts -
227
- xsks [i ]-> prev_rx_full_npkts ) * 1000000000. / dt ;
228
- fill_empty_pps = (xsks [i ]-> rx_fill_empty_npkts -
229
- xsks [i ]-> prev_rx_fill_empty_npkts )
230
- * 1000000000. / dt ;
231
- tx_empty_pps = (xsks [i ]-> tx_empty_npkts -
232
- xsks [i ]-> prev_tx_empty_npkts ) * 1000000000. / dt ;
224
+ dropped_pps = (xsks [i ]-> ring_stats .rx_dropped_npkts -
225
+ xsks [i ]-> ring_stats .prev_rx_dropped_npkts ) *
226
+ 1000000000. / dt ;
227
+ rx_invalid_pps = (xsks [i ]-> ring_stats .rx_invalid_npkts -
228
+ xsks [i ]-> ring_stats .prev_rx_invalid_npkts ) *
229
+ 1000000000. / dt ;
230
+ tx_invalid_pps = (xsks [i ]-> ring_stats .tx_invalid_npkts -
231
+ xsks [i ]-> ring_stats .prev_tx_invalid_npkts ) *
232
+ 1000000000. / dt ;
233
+ full_pps = (xsks [i ]-> ring_stats .rx_full_npkts -
234
+ xsks [i ]-> ring_stats .prev_rx_full_npkts ) *
235
+ 1000000000. / dt ;
236
+ fill_empty_pps = (xsks [i ]-> ring_stats .rx_fill_empty_npkts -
237
+ xsks [i ]-> ring_stats .prev_rx_fill_empty_npkts ) *
238
+ 1000000000. / dt ;
239
+ tx_empty_pps = (xsks [i ]-> ring_stats .tx_empty_npkts -
240
+ xsks [i ]-> ring_stats .prev_tx_empty_npkts ) *
241
+ 1000000000. / dt ;
233
242
234
243
printf (fmt , "rx dropped" , dropped_pps ,
235
- xsks [i ]-> rx_dropped_npkts );
244
+ xsks [i ]-> ring_stats . rx_dropped_npkts );
236
245
printf (fmt , "rx invalid" , rx_invalid_pps ,
237
- xsks [i ]-> rx_invalid_npkts );
246
+ xsks [i ]-> ring_stats . rx_invalid_npkts );
238
247
printf (fmt , "tx invalid" , tx_invalid_pps ,
239
- xsks [i ]-> tx_invalid_npkts );
248
+ xsks [i ]-> ring_stats . tx_invalid_npkts );
240
249
printf (fmt , "rx queue full" , full_pps ,
241
- xsks [i ]-> rx_full_npkts );
250
+ xsks [i ]-> ring_stats . rx_full_npkts );
242
251
printf (fmt , "fill ring empty" , fill_empty_pps ,
243
- xsks [i ]-> rx_fill_empty_npkts );
252
+ xsks [i ]-> ring_stats . rx_fill_empty_npkts );
244
253
printf (fmt , "tx ring empty" , tx_empty_pps ,
245
- xsks [i ]-> tx_empty_npkts );
246
-
247
- xsks [i ]-> prev_rx_dropped_npkts = xsks [i ]-> rx_dropped_npkts ;
248
- xsks [i ]-> prev_rx_invalid_npkts = xsks [i ]-> rx_invalid_npkts ;
249
- xsks [i ]-> prev_tx_invalid_npkts = xsks [i ]-> tx_invalid_npkts ;
250
- xsks [i ]-> prev_rx_full_npkts = xsks [i ]-> rx_full_npkts ;
251
- xsks [i ]-> prev_rx_fill_empty_npkts = xsks [i ]-> rx_fill_empty_npkts ;
252
- xsks [i ]-> prev_tx_empty_npkts = xsks [i ]-> tx_empty_npkts ;
254
+ xsks [i ]-> ring_stats .tx_empty_npkts );
255
+
256
+ xsks [i ]-> ring_stats .prev_rx_dropped_npkts =
257
+ xsks [i ]-> ring_stats .rx_dropped_npkts ;
258
+ xsks [i ]-> ring_stats .prev_rx_invalid_npkts =
259
+ xsks [i ]-> ring_stats .rx_invalid_npkts ;
260
+ xsks [i ]-> ring_stats .prev_tx_invalid_npkts =
261
+ xsks [i ]-> ring_stats .tx_invalid_npkts ;
262
+ xsks [i ]-> ring_stats .prev_rx_full_npkts =
263
+ xsks [i ]-> ring_stats .rx_full_npkts ;
264
+ xsks [i ]-> ring_stats .prev_rx_fill_empty_npkts =
265
+ xsks [i ]-> ring_stats .rx_fill_empty_npkts ;
266
+ xsks [i ]-> ring_stats .prev_tx_empty_npkts =
267
+ xsks [i ]-> ring_stats .tx_empty_npkts ;
253
268
} else {
254
269
printf ("%-15s\n" , "Error retrieving extra stats" );
255
270
}
@@ -936,7 +951,7 @@ static inline void complete_tx_l2fwd(struct xsk_socket_info *xsk,
936
951
xsk_ring_prod__submit (& xsk -> umem -> fq , rcvd );
937
952
xsk_ring_cons__release (& xsk -> umem -> cq , rcvd );
938
953
xsk -> outstanding_tx -= rcvd ;
939
- xsk -> tx_npkts += rcvd ;
954
+ xsk -> ring_stats . tx_npkts += rcvd ;
940
955
}
941
956
}
942
957
@@ -956,7 +971,7 @@ static inline void complete_tx_only(struct xsk_socket_info *xsk,
956
971
if (rcvd > 0 ) {
957
972
xsk_ring_cons__release (& xsk -> umem -> cq , rcvd );
958
973
xsk -> outstanding_tx -= rcvd ;
959
- xsk -> tx_npkts += rcvd ;
974
+ xsk -> ring_stats . tx_npkts += rcvd ;
960
975
}
961
976
}
962
977
@@ -996,7 +1011,7 @@ static void rx_drop(struct xsk_socket_info *xsk, struct pollfd *fds)
996
1011
997
1012
xsk_ring_prod__submit (& xsk -> umem -> fq , rcvd );
998
1013
xsk_ring_cons__release (& xsk -> rx , rcvd );
999
- xsk -> rx_npkts += rcvd ;
1014
+ xsk -> ring_stats . rx_npkts += rcvd ;
1000
1015
}
1001
1016
1002
1017
static void rx_drop_all (void )
@@ -1155,7 +1170,7 @@ static void l2fwd(struct xsk_socket_info *xsk, struct pollfd *fds)
1155
1170
xsk_ring_prod__submit (& xsk -> tx , rcvd );
1156
1171
xsk_ring_cons__release (& xsk -> rx , rcvd );
1157
1172
1158
- xsk -> rx_npkts += rcvd ;
1173
+ xsk -> ring_stats . rx_npkts += rcvd ;
1159
1174
xsk -> outstanding_tx += rcvd ;
1160
1175
}
1161
1176
0 commit comments