SPDK Trace Log用法简介

今天我们给大家介绍SPDK Trace Log在Debug/Free build下针对特定模块的使用。

温馨提示:由于部分函数较长,建议使用电脑端或者手机横屏阅读~

什么是日志

日志,又称为Log,是我们开发人员的一款利器。我们通常在程序代码中插入一些特殊的输出代码,将程序当前的运行状态按需输出,以便于在无人值守的情况下记录信息,在事后对程序的处理过程进行分析。不管是在调试还是测试的阶段,日志都是我们的得力助手。

一个完善的日志系统不只是简单地在控制台输出,还具有以下几个特征:

  • 使用一种方式就支持输出到多个目标,例如:控制台,文本文件,数据库等。

  • 允许控制输出的级别,过滤输出的内容,而不需要大幅度修改日志程序。

  • 使用简单,可以使用简单的语法来记录日志。

Linux内核中的日志系统函数和SPDK的封装

我们先来了解一下linux内核的三个系统函数openlogsyslogcloselog,这是一套系统日志写入接口。还有一个vsyslog,和syslog功能一样,只是参数格式不同。

2.1. openlog

openlog函数用来打开一个到系统日志记录程序的连接,打开之后就可以用syslog或vsyslog函数向系统日志里添加信息了。而closelog函数就是用来关闭此连接的。

通常来说,openlog需要在模块最开始指定,即限定了这个模块内都是一个facility的日志,SPDK里指定的是 LOG_LOCAL7。定义在/lib/event/app.c中

1.  void spdk_log_open(logfunc *logf)  

2.  {  

3.      if (logf) {  

4.          g_log = logf;  

5.      } else {  

6.          openlog("spdk", LOG_PID, LOG_LOCAL7);  

7.      }  

8.  }  

参数说明

LOG_PID,Include PID with each message,更多的是方便调试。

LOG_LOCAL0~LOG_LOCAL7, 为本地使用保留。

2.2. syslog

syslog 是Linux系统默认的日志守护进程。任何希望生成日志信息的程序都可以向 syslog 接口呼叫生成该信息,把日志消息发给系统程序syslogd去记录。

如果我们的程序要使用系统日志功能,只需要在程序启动时使用openlog函数来连接syslogd程序,后面随时用syslog函数写日志就行了。

SPDK代码里是这样使用的:

1. void  spdk_vlog(enum spdk_log_level level, const char *file, const int line, const char *func,  const char *format, va_list ap)  

2. {  

3.      ……

4.      if (level <= g_spdk_log_level) {  

5.          syslog(severity, "%s:%4d:%s: *%s*: %s", file, line, func, spdk_level_names[level], buf);  

6.      }  

7. }  

日志打印效果看上去就是这样的,

00:10:27.002  [2021-12-23 04:27:19.499391] nvme_rdma.c:1778:nvme_rdma_ctrlr_create_qpair: *DEBUG*: RDMA requests

同时,syslog为每个事件赋予几个不同的优先级:

  • LOG_ERR,错误 信息

  • LOG_WARNING,警告信息 

  • LOG_NOTICE,不是错误情况,但是可能需要处理 

  • LOG_INFO,一般的打印信息 

  • LOG_DEBUG,调试信息 

SPDK也定义了类似的6个日志事件优先等级:

1.  enum spdk_log_level {  

2.  SPDK_LOG_DISABLED = -1,/** All messages will be suppressed. */

3.  SPDK_LOG_ERROR,  

4.  SPDK_LOG_WARN,  

5.  SPDK_LOG_NOTICE,  

6.  SPDK_LOG_INFO,  

7.  SPDK_LOG_DEBUG,  

8.  }; 

<

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SPDK(存储性能开发套件)官方文档中文版。 第一章 简介 1 1.1.什么是SPDK? 1 1.2.入门 1 1.3. Vagrant开发环境 3 1.4.更新日志(略) 6 第二章 概念 6 2.1. 用户空间驱动程序** 6 2.2. 来自用户空间的DMA** 7 2.3. 消息传递和并发** 9 2.4. NAND Flash SSD内部 13 2.5. 将I / O提交到NVMe设备** 15 2.5.1 NVMe规范 15 2.5.2 SPDK NVMe驱动程序I / O路径 15 2.6. 使用Vhost-user进行虚拟化I / O. 16 2.6.1 介绍 16 2.6.2 QEMU 17 2.6.3 设备初始化 18 2.6.4 I / O路径 19 2.6.5 SPDK优化 20 2.7. SPDK目录结构概述 20 2.8. SPDK移植指南 22 第三章 用户指南 22 3.1. 系统配置用户指南 22 3.1.1 IOMMU配置 22 3.2. SPDK应用程序概述 23 3.2.1 配置SPDK应用程序 23 3.3. iSCSI Target 26 3.3.1. iSCSI Target入门指南 26 3.3.2. 通过配置文件配置iSCSI Target 27 3.3.3. 通过RPC方法配置iSCSI Target 28 3.3.4. 配置iSCSI启动器 29 3.3.5. rpc配置示例*** 30 3.3.6. iSCSI 热插拔 32 3.4. NVMe over Fabrics Target 32 3.5. Vhost Target(略) 37 3.6 块设备用户指南 38 3.6.1 bdev介绍 38 3.6.2 通用RPC命令 38 3.6.3 Ceph RBD 39 3.6.4 压缩虚拟Bdev模块 40 3.6.5 加密虚拟Bdev模块 41 3.6.6 延迟vbdev模块 41 3.6.7 GPT(GUID分区表) 42 3.6.8 iSCSI bdev 43 3.6.9 Linux AIO bdev 43 3.6.10 OCF虚拟bdev 43 3.6.11 Malloc bdev 44 3.6.12 NULL bdev 44 3.6.13 NVMe bdev 44 3.6.14 逻辑卷Lvol 45 3.6.15 RAID 46 3.6.16 Passthru 46 3.6.17 Pmem 46 3.6.18 Virtio Block 47 3.6.19 Virtio SCSI 47 3.7 BlobFS(Blobstore文件系统) 48 3.7.1 RocksDB集成 48 3.7.2 FUSE插件 49 3.8 JSON-RPC方法(略) 49 第四章 程序员指南 49 4.1. Blobstore程序员指南 49 4.1.1 介绍 50 4.1.2 运作理论 50 4.1.3 设计注意事项 52 4.1.4 例子 54 4.1.5配置 54 4.1.6 组件细节 54 4.2. 块设备层编程指南 56 4.3 编写自定义块设备模块 58 4.3.1 介绍 58 4.3.2 创建一个新模块 59 4.3.3创建虚拟Bdev 60 4.4 NVMe over Fabrics目标编程指南 61 4.4.1 介绍 61 4.4.2 原语结构体 61 4.4.3 基础函数 62 4.4.4访问控制 62 4.4.5发现子系统 62 4.4.6 传输 63 4.4.7选择线程模型 63 4.4.8 跨CPU核心扩展 63 4.4.9 零拷贝支持 63 4.4.10 RDMA 63 4.5 Flash传输层 64 4.5.1 术语 64 4.5.2 使用方法 67 4.6 GDB宏用户指南 69 4.6.1 介绍 69 4.6.2 加载gdb宏 71 4.6.3 使用gdb数据目录 72 4.6.4 使用.gdbinit加载宏 72 4.6.5 为什么我们需要显式调用spdk_load_macros 72 4.6.6 以上可用的宏总结 73 4.6.7 添加新宏 73 4.7 SPDK “Reduce”块压缩算法 73 4.7.1 介绍 73 4.7.2 例子 74 4.8 通知库 78 第五章 基本信息 79 5.1 事件框架 79 5.1.1 事件框架设计注意事项 80 5.1.2 SPDK事件框架组件 80 5.1.3 应用框架 80 5.2 逻辑卷 81 5.2.1 术语 81 5.2.2 配置逻辑卷 84 5.3 矢量数据包处理(略) 86 第六章 杂项 86 6.1 介绍 86 6.2 NVMe的P2P API 86 6.3 确定设备支持 87 6.4 P2P问题 87 第七章 驱动程序 88 7.1 NVMe驱动程序*** 88 7.1.1 介绍 88 7.1.2 例子 88 7.1.3 公共接口 89 7.1.4 NVMe驱动程序设计 89 7.1.5 NVMe over Fabrics主机支持 91 7.1.6 NVMe多进程 91 7.1.7 NVMe Hotplug 92 7.2 I/OAT驱动程序 93 7.2.1 公共接口 93 7.2.2 关键功能 93 7.3 Virtio驱动程序 93 7.3.1 介绍 93 7.3.2 2MB大页面 93 第八章 工具 94 8.1 SPDK CLI 94 8.1.1 安装所需的依赖项 94 8.1.2 运行SPDK应用程序实例 94 8.1.3 运行SPDK CLI 94 8.1.4 可选 - 创建Python虚拟环境 94 8.2 nvme-CLI 95 8.2.1 nvme-cli with SPDK入门指南 95 8.2.2 使用场景 95 第九章 性能测试报告(略) 96 第十章NVMe-oF Target跟踪点*** 96 10.1 介绍 96 10.2 启用跟踪点 97 10.3 捕获事件的快照 97 10.4 捕获足够的跟踪事件 98 10.5 添加新的跟踪点 99
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值