浅析Linux SCSI子系统:调试方法

news2024/9/22 9:55:26

文章目录

    • SCSI日志调试功能
      • scsi_logging_level
      • 调整SCSI日志等级
    • SCSI trace events
      • 使能SCSI trace events
        • 方式一:通过set_event接口
        • 方式二:通过enable
      • 跟踪trace信息
    • 相关参考

SCSI日志调试功能

SCSI子系统支持内核选项CONFIG_SCSI_LOGGING配置日志调试功能:
在这里插入图片描述

scsi_logging_level

scsi_logging_level定义为一个4字节的值,表示了SCSI的各种日志类型及对应的日志等级:

unsigned int scsi_logging_level;

scsi_logging_level被分成10个3位的字段,每个字段定义为一种日志类型,字段取值范围为0~7,表示了对应日志类型的打印等级。SCSI支持的日志类型如下:

  • SCSI_LOG_ERROR
  • SCSI_LOG_TIMEOUT_BITS
  • SCSI_LOG_SCAN_BITS
  • SCSI_LOG_MLQUEUE_BITS
  • SCSI_LOG_MLCOMPLETE_BITS
  • SCSI_LOG_LLQUEUE_BITS
  • SCSI_LOG_LLCOMPLETE_BITS
  • SCSI_LOG_HLQUEUE_BITS
  • SCSI_LOG_HLCOMPLETE_BITS
  • SCSI_LOG_IOCTL

调整SCSI日志等级

SCSI日志调试可以通过修改/proc/sys/devscsi/logging_level进行控制:

echo <bitmask> > /proc/sys/dev/scsi/logging_level   # 0表示关闭,-1表示全开

通过proc文件系统的方式需要手动计算bitmask,相对比较繁琐,lsscsi软件包提供了scsi_logging_level命令行工具来控制SCSI子系统的打印等级:

-s, --set:设置SCSI日志类型打印等级 
-g, --get: 获取当前SCSI日志类型等级设置
-a, --all:设置所有SCSI日志类型的打印等级
-E, --error :设置SCSI_LOG_ERROR的打印等级
-T, --timeout:设置SCSI_LOG_TIMEOUT的打印等级
-S, --scan:设置SCSI_LOG_SCAN的打印等级
-M, --midlevel:设置SCSI_LOG_MLQUEUE和SCSI_LOG_MLCOMPLETE的打印等级
    --mlqueue:设置SCSI_LOG_MLQUEUE的打印等级
    --mlcomplete:设置SCSI_LOG_MLCOMPLETE的打印等级
-L, --lowlevel:设置SCSI_LOG_LLQUEUE和SCSI_LOG_LLCOMPLETE的打印等级
    --llqueue:设置SCSI_LOG_LLQUEUE的打印等级
    --llcomplete:设置SCSI_LOG_LLCOMPLETE的打印等级
-H, --highlevel:设置SCSI_LOG_HLQUEUE和SCSI_LOG_HLCOMPLETE的打印等级
    --hlqueue:设置SCSI_LOG_HLQUEUE的打印等级
    --hlcomplete:设置SCSI_LOG_HLCOMPLETE的打印等级
-I, --ioctl:设置SCSI_LOG_IOCTL的打印等级

scsi_logging_level命令使用示例:
在这里插入图片描述

SCSI trace events

SCSI子系统注册了一些trace events,这些trace events可以用来跟踪特定路径上的行为,已支持的trace events有:
在这里插入图片描述
这些trace events也可以在/sys/kernel/debug/tracing/events/scsi目录下找到:
在这里插入图片描述

使能SCSI trace events

方式一:通过set_event接口

* 使能特定的event:echo 'scsi_dispatch_cmd_done' > /sys/kernel/debug/tracing/set_event  
* 使能SCSI系统的所有event:echo 'scsi:*'  > /sys/kernel/debug/tracing/
* 禁用特定的event:echo '!scsi_dispatch_cmd_done' > /sys/kernel/debug/tracing/set_event 

方式二:通过enable

* 使能特定的event:echo 1 > /sys/kerne/debug/tracing/events/scsi/scsi_dispatch_cmd_done/enable
* 使能SCSI系统的所有event:echo 1 > /sys/kernel/debug/tracing/event/scsi/enable
* 禁用特定的event:echo '!scsi_dispatch_cmd_done' > /sys/kernel/debug/tracing/set_event 

跟踪trace信息

SCSI子系统注册的trace events有限,只能查看位于IO请求下发、返回的一些信息,对于日常问题定位可能帮助不大,但可以辅助用来分析SCSI的运行流程。
在这里插入图片描述

相关参考

  • 《存储技术原理分析:基于Linux 2.6内核源代码分析》
  • 深入浅出SCSI子系统
  • Tracing event

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/901956.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是原型(prototype)和原型链(prototype chain)?如何继承一个对象的属性和方法?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 原型&#xff08;Prototype&#xff09;和原型链&#xff08;Prototype Chain&#xff09;⭐ 原型&#xff08;Prototype&#xff09;⭐ 原型链&#xff08;Prototype Chain&#xff09;⭐ 继承属性和方法⭐ 写在最后 ⭐ 专栏简介 前端入…

15---脚注(footnote)

本节我们来学习markdown的脚注 一、脚注的基本使用&#xff1a; 当使用Markdown编写文档时&#xff0c;有时我们希望在文本中插入一些额外的注释或解释&#xff0c;这时可以使用脚注&#xff08;footnote&#xff09;来实现。脚注是一种注释形式&#xff0c;通常以数字或符号的…

STM32——RTC实时时钟

文章目录 Unix时间戳UTC/GMT 时间戳转换BKP简介BKP基本结构读写BKP备份寄存器电路设计关键代码 RTC简介RTC框图RTC基本结构硬件电路RTC操作注意事项读写实时时钟电路设计关键代码 Unix时间戳 Unix 时间戳&#xff08;Unix Timestamp&#xff09;定义为从UTC/GMT的1970年1月1日…

如何创建和查看软链接和硬链接?这二者的区别是什么?

索引节点&#xff08;inode&#xff09;硬链接创建硬链接查看硬链接 软链接创建软链接查看软链接 inode编号妙用总结软链接和硬链接的区别感谢 &#x1f496; hello大家好&#x1f60a; 在linux中&#xff0c;文件链接可以使多个文件名引用同一个文件。有两种方式可以创建指向同…

Blender卡通着色入门

当想到 Blender 和 3D 设计时&#xff0c;你的想法可能会转向风格化渲染或照片级渲染和 VFX。 但是&#xff0c;你是否知道 Blender 还可以创建可与 2D 动漫风格和漫画书类似的图形&#xff1f; 推荐&#xff1a;用 [NSDT编辑器 快速搭建可编程3D场景 1、什么是卡通着色&#x…

矩形重叠问题

矩形重叠 文章目录 题目描述解题思路方法一方法二 题目描述 矩形以列表 [x1, y1, x2, y2] 的形式表示&#xff0c;其中 (x1, y1) 为左下角的坐标&#xff0c;(x2, y2) 是右上角的坐标。矩形的上下边平行于 x 轴&#xff0c;左右边平行于 y 轴。 如果相交的面积为 正 &#xff0…

线程基础和CompletableFuture异步编排

目录 一、线程回顾 1、初始化线程的 4 种方式 2、线程池的七大参数 3、常见的 4 种线程池 4、开发中为什么使用线程池 二、CompletableFuture 异步编排 1、创建异步对象 2、计算完成时回调方法 3、handle 方法 4、线程串行化方法 5、两任务组合 - 都要完成 6、两任务…

电商项目part03 电商支撑服务梳理

分布式任务调度系统 1、contab指令快速实现简单的定时任务 在Linux机器上直接使用crontab -e指令&#xff0c;就可以编辑一个简单的调度任务&#xff0c;适用于请求量不是很大的情况 * * * * * echo "timer">/root/test.out缺点&#xff1a;只能在本机上执行&a…

7-9 奇偶分家

分数 10 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 给定N个正整数&#xff0c;请统计奇数和偶数各有多少个&#xff1f; 输入格式&#xff1a; 输入第一行给出一个正整N&#xff08;≤1000&#xff09;&#xff1b;第2行给出N个非负整数&#xff0c;以空格分隔。 输…

【C# 基础精讲】Task和Task<T>的应用

当涉及异步编程时&#xff0c;Task 和 Task<T> 是C#中的重要概念。它们不仅是处理异步操作的关键类型&#xff0c;还提供了一些强大的功能和方法&#xff0c;使异步编程更加高效和灵活。在本文中&#xff0c;我们将深入探讨 Task 和 Task<T> 的应用&#xff0c;从创…

C++中function,bind,lambda

c11之前&#xff0c;STL中提供了bind1st以及bind2nd绑定器 首先来看一下他们如何使用&#xff1a; 如果我们要对vector中的元素排序&#xff0c;首先会想到sort&#xff0c;比如&#xff1a; void output(const vector<int> &vec) {for (auto v : vec) {cout <&l…

【C# 基础精讲】异步和同步的区别

异步&#xff08;Asynchronous&#xff09;和同步&#xff08;Synchronous&#xff09;是在编程中经常遇到的两种执行模式。它们涉及到程序中任务的执行方式以及对资源的管理方式。在本文中&#xff0c;我们将深入探讨异步和同步的区别、使用场景以及在 C# 中如何实现异步编程。…

|个人信息保护影响评估的概念与实践-二

一、什么是“个人信息保护影响评估” “个人信息保护影响评估”或“隐私影响评估”等相关概念最早起源于加拿大、澳大利亚等数据保护相关条例较为发达的国家&#xff0c;在广泛推行和应用之后成为一项对个人信息必要的保护准则。 我国在2017年发布的《信息安全技术 个人信息安…

EMO实战:使用EMO实现图像分类任务(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整策略设置混合精度&#xff0c;DP多卡&#xff0c;EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看关于EMA设置为True时…

机器学习之概率论

最近&#xff0c;在了解机器学习相关的数学知识&#xff0c;包括线性代数和概率论的知识&#xff0c;今天&#xff0c;回顾了概率论的知识&#xff0c;贴上几张其他博客的关于概率论的图片&#xff0c;记录学习过程。

【Freertos基础入门】深入浅出freertos互斥量

文章目录 前言一、互斥量是什么&#xff1f;二、互斥量的使用场景三、互斥量的使用1.创建 2.删除互斥量3.give和take四、示例代码总结 前言 FreeRTOS是一款开源的实时操作系统&#xff0c;提供了许多基本的内核对象&#xff0c;其中包括互斥锁&#xff08;Mutex&#xff09;。…

Jmeter性能测试 —— 压力模式

压力模式 性能测试中的压力模式有两种。 第一种是并发用户模式&#xff08;虚拟用户模式&#xff09;并发用户是指虚拟并发用户数&#xff0c;从业务角度&#xff0c;也可以理解为同时在线的用户数。 从客户端的角度出发&#xff0c;摸底业务系统各节点能同时承载的在线用户…

RK3588平台开发系列讲解(内存篇)伙伴系统如何分配页面

文章目录 一、通过接口找到内存节点二、开始分配三、准备分配页面的参数四、快速分配路径五、慢速分配路径沉淀、分享、成长,让自己和他人都能有所收获!😄 📢分配物理内存页面的过程很好推理:首先要找到内存节点,接着找到内存区,然后合适的空闲链表,最后在其中找到页…

WebGL的剪裁空间

推荐&#xff1a;使用NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景 什么是WebGL的剪裁空间 WebGL的剪裁空间&#xff08;Clipping Space&#xff09;是在图形渲染过程中处理视图体积裁剪的一种特定空间。它是指定义在3D世界坐标系和屏幕窗口之间的虚拟空间&#xff0c;用…

windows下redis设置redis开机自启动方法(保姆级)

1.找到Redis所在的目录&#xff0c;在文件路径框中输入cmd: 2.进入到控制台下的Redis所在目录,输入下列命令: redis-server --service-install redis.windows-service.conf --loglevel verbose 3.找到redis.windows-service.conf文件,双击打开设置redis服务的密码: (不想设置密…