u8 no_pci = 0;
u8 no_huge = 0;
u8 huge_dir = 0;
- u8 dump_physmem = 0;
u8 file_prefix = 0;
u8 * socket_mem = 0;
}
#endif
- else if (unformat (input, "dump-physmem"))
- dump_physmem = 1;
else if (unformat (input, "num-mbufs %d", &dm->num_mbufs))
;
else if (unformat (input, "max-tx-queues %d", &dm->max_tx_queues))
dm->eal_init_args_str = format(dm->eal_init_args_str, "%s ",
dm->eal_init_args[i]);
- if (CLIB_DEBUG > 0)
- {
- int ix;
-
- clib_warning ("DPDK eal init args:\n");
- for (ix=0; ix<vec_len(dm->eal_init_args); ix++) {
- clib_warning (" %s\n", dm->eal_init_args[ix]);
- }
- }
-
ret = rte_eal_init(vec_len(dm->eal_init_args), (char **) dm->eal_init_args);
/* lazy umount hugepages */
return clib_error_return (0, "rte_eal_init returned %d", ret);
/* Dump the physical memory layout prior to creating the mbuf_pool */
- if (dump_physmem) {
- fprintf(stdout, "DPDK physical memory layout:\n");
- rte_dump_physmem_layout(stdout);
- }
+ fprintf(stdout, "DPDK physical memory layout:\n");
+ rte_dump_physmem_layout(stdout);
/* main thread 1st */
error = vlib_buffer_pool_create(vm, dm->num_mbufs, MBUF_SIZE, rte_socket_id());
while (1)
{
- vlib_process_wait_for_event_or_clock (vm, 5.0);
+ /*
+ * check each time through the loop in case intervals are changed
+ */
+ f64 min_wait = dm->link_state_poll_interval < dm->stat_poll_interval ?
+ dm->link_state_poll_interval : dm->stat_poll_interval;
+
+ vlib_process_wait_for_event_or_clock (vm, min_wait);
if (dpdk_get_admin_up_down_in_progress())
/* skip the poll if an admin up down is in progress (on any interface) */
vec_foreach (xd, dm->devices)
{
f64 now = vlib_time_now (vm);
- if ((now - xd->time_last_stats_update) >= DPDK_STATS_POLL_INTERVAL)
+ if ((now - xd->time_last_stats_update) >= dm->stat_poll_interval)
dpdk_update_counters (xd, now);
- if ((now - xd->time_last_link_update) >= DPDK_LINK_POLL_INTERVAL)
+ if ((now - xd->time_last_link_update) >= dm->link_state_poll_interval)
dpdk_update_link_state (xd, now);
if (xd->dev_type == VNET_DPDK_DEV_VHOST_USER)
.process_log2_n_stack_bytes = 17,
};
+int dpdk_set_stat_poll_interval (f64 interval)
+{
+ if (interval < DPDK_MIN_STATS_POLL_INTERVAL)
+ return (VNET_API_ERROR_INVALID_VALUE);
+
+ dpdk_main.stat_poll_interval = interval;
+
+ return 0;
+}
+
+int dpdk_set_link_state_poll_interval (f64 interval)
+{
+ if (interval < DPDK_MIN_LINK_POLL_INTERVAL)
+ return (VNET_API_ERROR_INVALID_VALUE);
+
+ dpdk_main.link_state_poll_interval = interval;
+
+ return 0;
+}
+
clib_error_t *
dpdk_init (vlib_main_t * vm)
{
| IP_BUFFER_L4_CHECKSUM_COMPUTED
| IP_BUFFER_L4_CHECKSUM_CORRECT);
+ dm->stat_poll_interval = DPDK_STATS_POLL_INTERVAL;
+ dm->link_state_poll_interval = DPDK_LINK_POLL_INTERVAL;
+
/* init CLI */
if ((error = vlib_call_init_function (vm, dpdk_cli_init)))
return error;