前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >vpp---- log模块

vpp---- log模块

作者头像
dpdk-vpp源码解读
发布2023-03-07 17:11:37
1.5K0
发布2023-03-07 17:11:37
举报
文章被收录于专栏:DPDK VPP源码分析DPDK VPP源码分析

对vpp自带的log模块了解很少,但是功能开发总是因为log的缺失导致问题很多定位。所以有必要了解一下log模块的记录。

  • unix 字段下log:
代码语言:javascript
复制
unix {
  nodaemon
  log /var/log/vpp/vpp.log
  full-coredump
  cli-listen /run/vpp/cli.sock
  gid vpp
  startup-config /etc/vpp/start.txt
}

这个log应该记录的是vppctl命令行所有操作信息,在定位一些配置下发过程引发的问题时,比较有用。

默认在系统/var/log并没有vpp的目录。需要自己手动创建一个,否则在启动时会报下面的错误,导致不会记录日志。

代码语言:javascript
复制
unix_config:463: couldn't open log '/var/log/vpp/vpp.log'
#文件夹记录日志举例。
2020/09/28 20:42:10:859: ***** Start: PID 23450 *****
2020/09/28 20:42:13:039: ***** Startup Config *****

set interface sta eth0 up
set interface l2 learn eth0
set interface promiscuous on eth0
set interface ip addr eth0 192.168.1.1/24

set interface sta eth1 up
set interface l2 learn eth1
set interface promiscuous on eth1
set interface ip addr eth1 192.168.2.1/24

2020/09/28 20:42:13:039: ***** End Startup Config *****
  • logging 字段
代码语言:javascript
复制
logging {
  default-log-level info
  default-syslog-log-level info
}

设置系统日志的默认日志级别:

代码语言:javascript
复制
default-log-level emerg|alert | crit | err | warn | notice | info | debug | disabled

设置syslog目标的默认日志记录级别:

代码语言:javascript
复制
default-syslog-log-level emerg|alert | crit | err | warn | notice | info | debug | disabled

在vpp命令行可以通过show logging configure来查询设置情况:

在命令行通过show logging 记录当前最新的日志信息:

代码语言:javascript
复制
show logging 会记录当前的有一些信息
2020/09/28 20:42:11:321 warn       dpdk           EAL init args: -c 7e -n 4 --in-memory --file-prefix vpp -w 0000:01:00.0 -w 0000:01:00.1 --master-lcore 1
2020/09/28 20:42:11:739 notice     dpdk           DPDK drivers found 2 ports...
2020/09/28 20:42:11:757 info       dpdk           qinq strip soft offload enabled for interface
2020/09/28 20:42:11:774 info       dpdk           qinq strip soft offload enabled for interface
2020/09/28 20:42:11:779 notice     dpdk           EAL: Detected 12 lcore(s)
  • logging模块使用事例 下面是每个消息对应的宏定义
代码语言:javascript
复制
#define vlib_log_emerg(...) vlib_log(VLIB_LOG_LEVEL_EMERG, __VA_ARGS__)
#define vlib_log_alert(...) vlib_log(VLIB_LOG_LEVEL_ALERT, __VA_ARGS__)
#define vlib_log_crit(...) vlib_log(VLIB_LOG_LEVEL_CRIT, __VA_ARGS__)
#define vlib_log_err(...) vlib_log(VLIB_LOG_LEVEL_ERR, __VA_ARGS__)
#define vlib_log_warn(...) vlib_log(VLIB_LOG_LEVEL_WARNING, __VA_ARGS__)
#define vlib_log_notice(...) vlib_log(VLIB_LOG_LEVEL_NOTICE, __VA_ARGS__)
#define vlib_log_info(...) vlib_log(VLIB_LOG_LEVEL_INFO, __VA_ARGS__)
#define vlib_log_debug(...) vlib_log(VLIB_LOG_LEVEL_DEBUG, __VA_ARGS__

以dpdk模块举例如何使用:

1、 注册dpdk logging模块。

在文件src/plugins/dpdk/device/init.c中的dpdk_init函数注册dpdk模块,没有设置子模块。默认是50/s。也可以自己指定

代码语言:javascript
复制
 dm->log_default = vlib_log_register_class ("dpdk", 0);

注册并指定设置每秒记录条数

代码语言:javascript
复制
pm->logger =
    vlib_log_register_class_rate_limit ("plugin", "load",
          0x7FFFFFFF /* aka no rate limit */ )

2、定义自己模块对应的level的接口函数

代码语言:javascript
复制
#define dpdk_log_err(...) \
  vlib_log(VLIB_LOG_LEVEL_ERR, dpdk_main.log_default, __VA_ARGS__)
#define dpdk_log_warn(...) \
  vlib_log(VLIB_LOG_LEVEL_WARNING, dpdk_main.log_default, __VA_ARGS__)
#define dpdk_log_notice(...) \
  vlib_log(VLIB_LOG_LEVEL_NOTICE, dpdk_main.log_default, __VA_ARGS__)
#define dpdk_log_info(...) \
  vlib_log(VLIB_LOG_LEVEL_INFO, dpdk_main.log_default, __VA_ARGS__

3、代码中使用,就ok了

下面是vlan strip功能设置信息。我们可以使用show logging可以看到启动后的打印。

代码语言:javascript
复制
    if (devconf->vlan_strip_offload == DPDK_DEVICE_VLAN_STRIP_ON)
  {
    vlan_off |= ETH_VLAN_STRIP_OFFLOAD;
    if (rte_eth_dev_set_vlan_offload (xd->port_id, vlan_off) >= 0)
      dpdk_log_info ("VLAN strip enabled for interface\n");
    else
      dpdk_log_warn ("VLAN strip cannot be supported by interface\n");
    }
  • 总结 本文简单介绍了vpp 日志记录使用的,当然还有一个elog模块。这个模块相对复杂一些,用的地方也相当的多,可以统计函数执行效率或node节点执行效率。 觉得有用记得点赞。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-09-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DPDK VPP源码分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
日志服务
日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档