From 6367e820695529adb1d5acb3fe4438aed86607ff Mon Sep 17 00:00:00 2001 From: Jesper Dangaard Brouer Date: Fri, 14 Jan 2022 11:12:24 +0100 Subject: [PATCH] AF_XDP-interaction: Add param to adjust TX-cyclic interval Signed-off-by: Jesper Dangaard Brouer --- AF_XDP-interaction/af_xdp_user.c | 10 +++++++--- AF_XDP-interaction/common_defines.h | 1 + AF_XDP-interaction/common_params.c | 5 ++++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/AF_XDP-interaction/af_xdp_user.c b/AF_XDP-interaction/af_xdp_user.c index 7cda3d8..eb77963 100644 --- a/AF_XDP-interaction/af_xdp_user.c +++ b/AF_XDP-interaction/af_xdp_user.c @@ -300,6 +300,9 @@ static const struct option_wrapper long_options[] = { {{"tx-smac", required_argument, NULL, 'H' }, "Src MAC addr of TX frame in aa:bb:cc:dd:ee:ff format", "aa:bb:cc:dd:ee:ff"}, + {{"interval", required_argument, NULL, 'i' }, + "Periodic TX-cyclic interval wakeup period in usec", ""}, + {{0, 0, NULL, 0 }, NULL, false} }; @@ -1138,7 +1141,7 @@ static void rx_avail_packets(struct xsk_container *xsks) } /* Default interval in usec */ -#define DEFAULT_INTERVAL 1000000 +#define DEFAULT_INTERVAL 1000000 #define USEC_PER_SEC 1000000 #define NSEC_PER_SEC 1000000000 @@ -1210,7 +1213,7 @@ static void tx_cyclic_and_rx_process(struct config *cfg, struct xdp_desc tx_pkts[batch_nr]; int tx_nr; - int period = DEFAULT_INTERVAL; // TODO: Add to cfg + int period = cfg->interval; int timermode = TIMER_ABSTIME; int clock = CLOCK_MONOTONIC; @@ -1286,7 +1289,7 @@ static void tx_cyclic_and_rx_process(struct config *cfg, printf("TX pkts:%d event:%lu" " inaccurate wakeup(nanosec) curr:%ld" "(min:%ld max:%ld avg:%ld avg2adj:%ld)" - " variance(n-1):%ld interval:%ld\n", + " variance(n-1):%ld interval-ns:%ld\n", n, stat.events, stat.curr, stat.min, stat.max, avg, avg2adj, stat.curr - stat.prev, @@ -1444,6 +1447,7 @@ int main(int argc, char **argv) .xsk_if_queue = -1, .opt_tx_dmac = default_tx_dmac, .opt_tx_smac = default_tx_smac, + .interval = DEFAULT_INTERVAL, }; pthread_t stats_poll_thread; struct xsk_umem_info *umem; diff --git a/AF_XDP-interaction/common_defines.h b/AF_XDP-interaction/common_defines.h index 56e075d..23fef0f 100644 --- a/AF_XDP-interaction/common_defines.h +++ b/AF_XDP-interaction/common_defines.h @@ -30,6 +30,7 @@ struct config { bool opt_busy_poll; struct ether_addr opt_tx_smac; struct ether_addr opt_tx_dmac; + __u64 interval; }; /* Defined in common_params.o */ diff --git a/AF_XDP-interaction/common_params.c b/AF_XDP-interaction/common_params.c index d54255a..19f190e 100644 --- a/AF_XDP-interaction/common_params.c +++ b/AF_XDP-interaction/common_params.c @@ -97,7 +97,7 @@ void parse_cmdline_args(int argc, char **argv, } /* Parse commands line args */ - while ((opt = getopt_long(argc, argv, "hd:r:L:R:BASNFUMQ:G:H:czqp:t", + while ((opt = getopt_long(argc, argv, "hd:r:L:R:BASNFUMQ:G:H:czqp:ti:", long_options, &longindex)) != -1) { switch (opt) { case 'd': @@ -219,6 +219,9 @@ void parse_cmdline_args(int argc, char **argv, dest = (char *)&cfg->dest_mac; strncpy(dest, optarg, sizeof(cfg->dest_mac)); break; + case 'i': + cfg->interval = atoi(optarg); + break; case 'c': cfg->xsk_bind_flags &= ~XDP_ZEROCOPY; /* Clear flag */ cfg->xsk_bind_flags |= XDP_COPY; /* Set flag */