浅析Linux SCSI子系统:调试方法
文章目录
- 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
相关文章:
浅析Linux SCSI子系统:调试方法
文章目录 SCSI日志调试功能scsi_logging_level调整SCSI日志等级 SCSI trace events使能SCSI trace events方式一:通过set_event接口方式二:通过enable 跟踪trace信息 相关参考 SCSI日志调试功能 SCSI子系统支持内核选项CONFIG_SCSI_LOGGING配置日志调试…...
【Unity3D】水面特效
1 前言 水波特效 中通过屏幕后处理实现了环形水波效果,本文通过 Shader Graph 实现了模拟水面特效,包含以下特效细节。 深水区和浅水区颜色差异;水面有波纹,并且在移动;水面起伏波动;水面边缘有水泡&#…...
CSS中的flex布局详细讲解
Flex 布局 Flex 布局是一种现代的 CSS 布局模型,用于实现灵活的盒子布局。它提供了强大的布局能力,使得元素可以自动调整大小、对齐和分布,适用于构建响应式和可伸缩的布局。 Flex 布局使用 flex 容器和 flex 项目的概念。容器是一个父元素…...
Python功能制作之简单的音乐播放器
需要导入的库: pip install PyQt5 源码: import os from PyQt5.QtCore import Qt, QUrl from PyQt5.QtGui import QIcon, QPixmap from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent from PyQt5.QtWidgets import QApplication, QMainWind…...
GAN生成对抗模型根据minist数据集生成手写数字图片
文章目录 1.项目介绍2相关网站3具体的代码及结果导入工具包设置超参数定义优化器,以及损失函数训练时的迭代过程训练结果的展示 1.项目介绍 通过用minist数据集进行训练,得到一个GAN模型,可以生成与minist数据集类似的图片。 GAN是一种生成模…...
【K8S源码之Pod漂移】整体概况分析 controller-manager 中的 nodelifecycle controller(Pod的驱逐)
参考 k8s 污点驱逐详解-源码分析 - 掘金 k8s驱逐篇(5)-kube-controller-manager驱逐 - 良凯尔 - 博客园 k8s驱逐篇(6)-kube-controller-manager驱逐-NodeLifecycleController源码分析 - 良凯尔 - 博客园 k8s驱逐篇(7)-kube-controller-manager驱逐-taintManager源码分析 - 良…...
[保研/考研机试] KY212 二叉树遍历 华中科技大学复试上机题 C++实现
题目链接: 二叉树遍历_牛客题霸_牛客网二叉树的前序、中序、后序遍历的定义: 前序遍历:对任一子树,先访问根,然后遍历其左子树,最。题目来自【牛客题霸】https://www.nowcoder.com/share/jump/43719512169…...
CSS笔记
介绍 CSS导入方式 三种方法都将文字设置成了红色 CSS选择器 元素选择器 id选择器 图中div将颜色控制为红色,#name将颜色控制为蓝色,谁控制的范围最小,谁就生效,所以第二个div是蓝色的。id属性值要唯一,否则报错。 clas…...
链栈Link-Stack
0、节点结构体定义 typedef struct SNode{int data;struct SNode *next; } SNode, *LinkStack; 1、初始化 bool InitStack(LinkStack &S) //S为栈顶指针(存数据的头节点) {S NULL;return true; } 2、入栈 bool Push(LinkStack &S, int e) {…...
Ubuntu 20系统WIFI设置静态IP地址,以及断连问题
最近工作需要购置了一台GPU机器,然后搭建了深度学习的运行环境,在工作中将这台机器当做深度学习的服务器来使用,前期已经配置好多用户以及基础环境。但最近通过xshell连接总是不间断的出现断连现象。 补充一点,Ubuntu系统中与网…...
(一)idea连接GitHub的全部流程(注册GitHub、idea集成GitHub、增加合作伙伴、跨团队合作、分支操作)
(二)Git在公司中团队内合作和跨团队合作和分支操作的全部流程(一篇就够)https://blog.csdn.net/m0_65992672/article/details/132336481 4.1、简介 Git是一个免费的、开源的*分布式**版本控制**系统*,可以快速高效地…...
-bash: java: command not found笔记
文章目录 场景解决方案找java的方法find命令进行查找根据java进程找寻具体位置 场景 linux系统执行java命令时报错: -bash: java: command not found。 解决方案 可能是没有安装java(这种情况比较少)或者安装了java但是没有设置环境变量(一般是这种情况)。 找ja…...
C++ typename and .template
https://makecleanandmake.com/2015/07/20/leading-typename-dot-template-and-why-they-are-necessary/ typename Obj<T>::type var;v.template m<int>();...
uniapp,使用canvas制作一个签名版
先看效果图 我把这个做成了页面,没有做成组件,因为之前我是配合uview-plus的popup弹出层使用的,这种组件好像是没有生命周期的,第一次打开弹出层可以正常写字,但是关闭之后再打开就不会显示绘制的线条了,还…...
【大数据】Flink 详解(五):核心篇 Ⅳ
Flink 详解(五):核心篇 Ⅳ 45、Flink 广播机制了解吗? 从图中可以理解 广播 就是一个公共的共享变量,广播变量存于 TaskManager 的内存中,所以广播变量不应该太大,将一个数据集广播后࿰…...
设计模式-建造者模式
核心思想 抽取共同的行为,允许使用者指定复杂对象的类型和内容,不需要了解内部的构建细节使用多个简单的行为构建一个复杂的对象,将对象的构建过程和它的表示分离,同样的构建过程可以创建不同的表示 优缺点 优点 使用者不需要知…...
flutter 设置app图标
使用插件 flutter_launcher_icons 在 pubspec.yaml 配置文件中 加入 dev_dependencies dev_dependencies: flutter_launcher_icons: "^0.13.1" 准备好app得 icon 图标 其中icon的名字为icon.png 创建assets文件夹 和子文件夹icon iamge 配置静态资源路径 完整配置…...
守护网络安全:深入了解DDOS攻击防护手段
ddos攻击防护手段有哪些?在数字化快速发展的时代,网络安全问题日益凸显,其中分布式拒绝服务(DDOS)攻击尤为引人关注。这种攻击通过向目标网站或服务器发送大量合法或非法的请求,旨在使目标资源无法正常处理其他用户的请求,从而达…...
计组 | 寻址方式
目录 一、知识点 1.寻址方式什么? 2.根据操作数所在的位置,都有哪些寻址方式? 3.直接寻址 4.立即寻址 5.隐含寻址 6.相对寻址 7.寄存器 8.寄存器-寄存器型(RR)、寄存器-存储器型(RS)和…...
matlab工具箱Filter Designer设计butterworth带通滤波器
1、在matlab控制界面输入fdatool; 2、在显示的界面中选择合适的参数;本实验中采样频率是200,低通30hz,高通60hz,点击butterworth滤波器。 3、点击设计滤波器按钮后,在生成的界面点击红框按钮,可生成simulink模型到当前…...
如何快速配置HomeAssistant格力空调本地控制组件:完整操作指南
如何快速配置HomeAssistant格力空调本地控制组件:完整操作指南 【免费下载链接】HomeAssistant-GreeClimateComponent Custom Gree climate component written in Python3 for Home Assistant. Controls ACs supporting the Gree protocol. 项目地址: https://git…...
终极Windows文件完整性验证指南:为什么专业开发者都选择HashCheck Shell Extension
终极Windows文件完整性验证指南:为什么专业开发者都选择HashCheck Shell Extension 【免费下载链接】HashCheck HashCheck Shell Extension for Windows with added SHA2, SHA3, and multithreading; originally from code.kliu.org 项目地址: https://gitcode.co…...
别再踩坑PX4Flow了!实测优象LC-302光流模块,手把手教你搞定PX4无人机室内悬停
无人机室内悬停实战指南:优象LC-302光流模块深度评测与PX4调参技巧 当无人机从开阔的室外飞入复杂的室内环境,GPS信号的突然消失往往让飞手们手忙脚乱。这时,一套可靠的光流定位系统就成了"空中救生绳"。本文将带您深入评测市面上主…...
Cadence原理图库‘幽灵版本’冲突全解析:从ORDBLL-1125报错看Cache机制与避坑指南
Cadence原理图库‘幽灵版本’冲突全解析:从ORDBLL-1125报错看Cache机制与避坑指南 在电子设计自动化(EDA)领域,Cadence作为行业标杆工具链,其原理图设计模块被广泛应用于各类复杂电路开发。然而,许多资深用…...
利用Charles实现请求与响应的动态修改:从基础到实战
1. Charles工具简介与基础配置 Charles是一款功能强大的网络抓包工具,它就像是你手机和电脑之间的"透明玻璃",能让你清清楚楚地看到所有进出的网络请求。我第一次接触Charles是在调试一个电商APP的支付接口时,当时遇到一个诡异的bu…...
Linux 配置文件 bashrc
本文详细介绍了Linux系统中配置文件bashrc的作用、使用方法和配置技巧。bashrc文件是bash shell在用户登录时自动执行的脚本,用于定义用户的环境变量和别名等个性化设置。文章首先解释了bashrc文件的重要性,并介绍了如何编辑和修改该文件。接着ÿ…...
从收音机到Wi-Fi:手把手复现经典小信号调谐放大器实验(附Multisim仿真文件)
从矿石收音机到5G射频前端:调谐放大器技术演进与Multisim仿真实践 上世纪二十年代,当业余无线电爱好者们用矿石和线圈组装出最简单的接收装置时,他们可能不会想到,这种基于LC谐振原理的选频技术会延续百年,成为现代无线…...
别被TMOS吓到!拆解沁恒CH579蓝牙例程,看事件驱动如何简化你的代码
别被TMOS吓到!拆解沁恒CH579蓝牙例程,看事件驱动如何简化你的代码 第一次打开沁恒CH579的蓝牙例程,看到满屏的TMOS_前缀函数和eventID定义,是不是瞬间头皮发麻?作为从51单片机转战蓝牙开发的工程师,我完全理…...
Web.py部署环境配置终极指南:Nginx、Gunicorn与Docker容器化全解析
Web.py部署环境配置终极指南:Nginx、Gunicorn与Docker容器化全解析 【免费下载链接】webpy web.py is a web framework for python that is as simple as it is powerful. 项目地址: https://gitcode.com/gh_mirrors/we/webpy Web.py是一款简洁而强大的Pyth…...
高效安全备份QQ空间历史说说:GetQzonehistory全方位使用指南
高效安全备份QQ空间历史说说:GetQzonehistory全方位使用指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 功能价值:为什么选择GetQzonehistory? …...
