Skip to content

Commit 2e8806f

Browse files
cloftusAlexei Starovoitov
authored andcommitted
samples: bpf: Split xdpsock stats into new struct
New statistics will be added in future commits. In preparation for this, let's split out the existing statistics into their own struct. Signed-off-by: Ciara Loftus <ciara.loftus@intel.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Acked-by: Yonghong Song <yhs@fb.com> Link: https://lore.kernel.org/bpf/20201002133612.31536-1-ciara.loftus@intel.com
1 parent 544d6ad commit 2e8806f

File tree

1 file changed

+69
-54
lines changed

1 file changed

+69
-54
lines changed

samples/bpf/xdpsock_user.c

Lines changed: 69 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -91,18 +91,7 @@ static bool opt_need_wakeup = true;
9191
static u32 opt_num_xsks = 1;
9292
static u32 prog_id;
9393

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 {
10695
unsigned long rx_npkts;
10796
unsigned long tx_npkts;
10897
unsigned long rx_dropped_npkts;
@@ -119,6 +108,21 @@ struct xsk_socket_info {
119108
unsigned long prev_rx_full_npkts;
120109
unsigned long prev_rx_fill_empty_npkts;
121110
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;
122126
u32 outstanding_tx;
123127
};
124128

@@ -173,12 +177,12 @@ static int xsk_get_xdp_stats(int fd, struct xsk_socket_info *xsk)
173177
return err;
174178

175179
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;
182186
return 0;
183187
}
184188

@@ -198,9 +202,9 @@ static void dump_stats(void)
198202
double rx_pps, tx_pps, dropped_pps, rx_invalid_pps, full_pps, fill_empty_pps,
199203
tx_invalid_pps, tx_empty_pps;
200204

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) *
202206
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) *
204208
1000000000. / dt;
205209

206210
printf("\n sock%d@", i);
@@ -209,47 +213,58 @@ static void dump_stats(void)
209213

210214
printf("%-15s %-11s %-11s %-11.2f\n", "", "pps", "pkts",
211215
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);
214218

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;
217221

218222
if (opt_extra_stats) {
219223
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;
233242

234243
printf(fmt, "rx dropped", dropped_pps,
235-
xsks[i]->rx_dropped_npkts);
244+
xsks[i]->ring_stats.rx_dropped_npkts);
236245
printf(fmt, "rx invalid", rx_invalid_pps,
237-
xsks[i]->rx_invalid_npkts);
246+
xsks[i]->ring_stats.rx_invalid_npkts);
238247
printf(fmt, "tx invalid", tx_invalid_pps,
239-
xsks[i]->tx_invalid_npkts);
248+
xsks[i]->ring_stats.tx_invalid_npkts);
240249
printf(fmt, "rx queue full", full_pps,
241-
xsks[i]->rx_full_npkts);
250+
xsks[i]->ring_stats.rx_full_npkts);
242251
printf(fmt, "fill ring empty", fill_empty_pps,
243-
xsks[i]->rx_fill_empty_npkts);
252+
xsks[i]->ring_stats.rx_fill_empty_npkts);
244253
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;
253268
} else {
254269
printf("%-15s\n", "Error retrieving extra stats");
255270
}
@@ -936,7 +951,7 @@ static inline void complete_tx_l2fwd(struct xsk_socket_info *xsk,
936951
xsk_ring_prod__submit(&xsk->umem->fq, rcvd);
937952
xsk_ring_cons__release(&xsk->umem->cq, rcvd);
938953
xsk->outstanding_tx -= rcvd;
939-
xsk->tx_npkts += rcvd;
954+
xsk->ring_stats.tx_npkts += rcvd;
940955
}
941956
}
942957

@@ -956,7 +971,7 @@ static inline void complete_tx_only(struct xsk_socket_info *xsk,
956971
if (rcvd > 0) {
957972
xsk_ring_cons__release(&xsk->umem->cq, rcvd);
958973
xsk->outstanding_tx -= rcvd;
959-
xsk->tx_npkts += rcvd;
974+
xsk->ring_stats.tx_npkts += rcvd;
960975
}
961976
}
962977

@@ -996,7 +1011,7 @@ static void rx_drop(struct xsk_socket_info *xsk, struct pollfd *fds)
9961011

9971012
xsk_ring_prod__submit(&xsk->umem->fq, rcvd);
9981013
xsk_ring_cons__release(&xsk->rx, rcvd);
999-
xsk->rx_npkts += rcvd;
1014+
xsk->ring_stats.rx_npkts += rcvd;
10001015
}
10011016

10021017
static void rx_drop_all(void)
@@ -1155,7 +1170,7 @@ static void l2fwd(struct xsk_socket_info *xsk, struct pollfd *fds)
11551170
xsk_ring_prod__submit(&xsk->tx, rcvd);
11561171
xsk_ring_cons__release(&xsk->rx, rcvd);
11571172

1158-
xsk->rx_npkts += rcvd;
1173+
xsk->ring_stats.rx_npkts += rcvd;
11591174
xsk->outstanding_tx += rcvd;
11601175
}
11611176

0 commit comments

Comments
 (0)