浅析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模型到当前…...
别再只用rand()了!Qt 5.10+ 的 QRandomGenerator 让你的随机数更安全、更高效
别再只用rand()了!Qt 5.10 的 QRandomGenerator 让你的随机数更安全、更高效 在开发过程中,随机数生成是一个看似简单却暗藏玄机的功能。许多开发者习惯性地使用C标准库中的rand()函数,殊不知这种做法在现代软件开发中已经显得力不从心。rand…...
为什么你的学术论文格式转换总是失败?docx2tex 3步解决方案
为什么你的学术论文格式转换总是失败?docx2tex 3步解决方案 【免费下载链接】docx2tex Converts Microsoft Word docx to LaTeX 项目地址: https://gitcode.com/gh_mirrors/do/docx2tex 还在为Word到LaTeX的格式转换头痛吗?每次提交学术论文、技术…...
开源贡献者如何优雅管理上游补丁:隔离、消毒与自动化工作流实践
1. 项目概述:一个开源贡献者的“清洁”工作流如果你和我一样,长期维护着一些开源项目,同时又基于这些项目进行深度定制和二次开发,那你一定遇到过这个经典难题:如何优雅地管理那些你为上游项目(即原始开源项…...
明末:渊虚之羽加修改器2026.5.12最新破解版免费下载 转存后自动更新 (看到请立即转存 资源随时失效)pc手机通用
游戏本体下载链接 修改器链接 由成都灵泽科技(Leenzee Games)开发,505 Games发行的动作角色扮演游戏《明末:渊虚之羽》(WUCHANG: Fallen Feathers)在近年来备受动作游戏玩家的关注。作为一款扎根于中国历…...
从锂电池热失控到锡须短路:高可靠性系统安全工程实践
1. 从“工程恐怖故事”到系统安全文化的反思最近在整理资料时,翻到一篇十多年前的旧文,标题叫《工程恐怖:机毁人亡》。文章汇集了几位航空与国防领域工程师亲历的、令人脊背发凉的真实事故案例。这些故事没有出现在主流新闻的头条,…...
基于适配器模式构建跨平台待办事项聚合器:设计、实现与实战
1. 项目概述:一个跨平台待办事项聚合器的诞生最近在整理自己的效率工具时,发现了一个挺普遍但又很恼人的问题:我的待办事项散落在各处。工作上的任务在公司的Jira里,个人学习计划在滴答清单,一些临时想法随手记在手机备…...
解决 Claude Code 频繁封号问题之转向 Taotoken 稳定服务
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 解决 Claude Code 频繁封号问题之转向 Taotoken 稳定服务 对于依赖 Claude Code 进行开发的工程师而言,账号访问权限的…...
【Midjourney Gouache风格终极指南】:20年AI绘画专家亲授7大参数黄金组合与3类易踩翻车点
更多请点击: https://intelliparadigm.com 第一章:Gouache风格的本质解构与AI绘画语境迁移 Gouache(水粉画)并非简单意义上的“不透明水彩”,其本质在于颜料颗粒的物理遮盖性、媒介乳化稳定性与干湿叠压响应的三重耦合…...
【OpenClaw从入门到精通】第78篇:OpenClaw安全防护实测——360龙虾保 vs 奇安信安全伴侣全维度对比(2026万字实战版)
摘要:2026年OpenClaw爆发式普及,全球公网暴露实例超58万个,7个高危CVE漏洞接踵而至,企业私自部署的“裸奔”智能体成为内网安全重灾区。在此背景下,360与奇安信两大安全巨头同步推出专属防护方案——360龙虾保与奇安信安全伴侣。本文从技术架构、核心能力、部署实操、场景…...
Cursor AI技能库一键部署指南:提升开发效率的标准化配置方案
1. 项目概述:当AI助手Cursor遇上Everything技能库如果你和我一样,日常开发重度依赖Cursor这款AI驱动的IDE,那你肯定也遇到过这样的场景:想让它帮你写个单元测试,得先花几分钟描述TDD流程;想让它重构一段代码…...
