vpp代码dpdk-input node后加feature node 不能trace原因

trace功能

在使能trace功能后,发现dpdk-input的feature节点是没有开启trace的,因为

查看代码\vpp-1701\vnet\vnet\devices\dpdk\node.c

关键函数是

static_always_inline u32
dpdk_device_input (dpdk_main_t * dm, dpdk_device_t * xd,
		   vlib_node_runtime_t * node, u32 cpu_index, u16 queue_id)
{
  ......

  while (n_buffers > 0)
    {
      ......
      vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next);

      while (n_buffers > 8 && n_left_to_next > 4)
	{
	
	}
    
      while (n_buffers > 0 && n_left_to_next > 0)
	{


	  /* Do we have any driver RX features configured on the interface? */
	  vnet_feature_start_device_input_x1 (xd->vlib_sw_if_index, &next0,
					      b0, l3_offset0);


	  vlib_validate_buffer_enqueue_x1 (vm, node, next_index,
					   to_next, n_left_to_next,
					   bi0, next0);
	  n_buffers--;
	  mb_index++;
	}
      vlib_put_next_frame (vm, node, next_index, n_left_to_next);
    }


  if (PREDICT_FALSE (vec_len (xd->d_trace_buffers[cpu_index]) > 0))
    {
      dpdk_rx_trace (dm, node, xd, queue_id, xd->d_trace_buffers[cpu_index],
		     vec_len (xd->d_trace_buffers[cpu_index]));
      vlib_set_trace_count (vm, node, n_trace -
			    vec_len (xd->d_trace_buffers[cpu_index]));
    }


  vlib_increment_combined_counter
    (vnet_get_main ()->interface_main.combined_sw_if_counters
     + VNET_INTERFACE_COUNTER_RX,
     cpu_index, xd->vlib_sw_if_index, mb_index, n_rx_bytes);


  dpdk_worker_t *dw = vec_elt_at_index (dm->workers, cpu_index);
  dw->aggregate_rx_packets += mb_index;


  return mb_index;
}

dpdk_rx_trace开始使能node trace,注意上面函数dpdk_rx_trace函数的执行位置。

  if (PREDICT_FALSE (vec_len (xd->d_trace_buffers[cpu_index]) > 0))
    {
      dpdk_rx_trace (dm, node, xd, queue_id, xd->d_trace_buffers[cpu_index],
		     vec_len (xd->d_trace_buffers[cpu_index]));
      vlib_set_trace_count (vm, node, n_trace -
			    vec_len (xd->d_trace_buffers[cpu_index]));
    }

在dpdk-input node 后添加feature node 后,vlib_put_next_frame (vm, node, next_index, n_left_to_next)中 next_index,会是feature node的索引,

而dpdk_rx_trace里的下一节点索引还是默认的,所以feature node 就不会trace了

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值