硬盘Write Cache设置效果差异之谜!

news2024/10/5 14:36:32

Write Cache这个概念对于大家应该不陌生,主要是机械HDD中会有很明显的效果。

  • Write Cache Enable,WCE:数据不会直接落盘,而是写入DRAM缓存后就直接返回了,对于随机写和顺序写的性能都会有所改善。这个场景,对于数据保护的要求可能存在一定的风险,如果数据在cache中还未刷入落盘,掉电数据也会丢失

  • Write Cache Disable,WCD:数据需要完全落入碟片后才算写入成功,性能会有下降,但是数据安全是可靠的,即使断电,数据可以保证落盘。

小编曾经在研究HBA-Expander-HDD架构性能相关问题时遇到过一个有趣的现象,在linux系统下用两个工具:sdparm和hdparm去修改HDD的write cache,发现在系统下write cache设置的效果有差异

按照官网(https://wiki.archlinux.org/title/Hdparm)的定义,两个工具都是针对sata/sas盘进行参数读取的工具,而且相辅相成,是对好兄弟,为何在设置write cache过程表现的不一样呢?这个就是本文主要的趣事分解。

图片

首先,我们先来看hdparm修改write cache的方式和原理。

查看write cache的状态:hdparm -W /dev/sdX

打开write cache:hdparm -W 1 /dev/sdX

关闭write cache:hdparm -W 0 /dev/sdX

hdparm源码中设置write cache的代码:

/* prototypes and stuff for ATA command ioctls */#include <linux/types.h>enum {  ...  ATA_OP_SETFEATURES    = 0xef,  ...};



if (set_wcache) {if (get_wcache) {printf(" setting drive write-caching to %d", wcache);      on_off(wcache);    }if (!wcache)      err = flush_wcache(fd);if (ioctl(fd, HDIO_SET_WCACHE, wcache)) {      __u8 setcache[4] = {ATA_OP_SETFEATURES,0,0,0}; #通过ATA set feature命令完成设置      setcache[2] = wcache ? 0x02 : 0x82;if (do_drive_cmd(fd, setcache, 0)) {        err = errno;        perror(" HDIO_DRIVE_CMD(setcache) failed");      }    }if (!wcache)      err = flush_wcache(fd);  }

基于上面的代码,我们也可以看到hdparm通过kernel libata ATA set feature命令完成设置与硬盘完成交互,最终完成write cache的设置。

那么,sdparm又是怎么修改WCE的呢?

打开write cache:sdparm --set=WCE --save /dev/sdX

关闭write cache:sdparm --clear=WCE --save /dev/sdX

sdparm源码中设置write cache的代码:

for (k = 0; k < num_devices; ++k) {        r = 0;        pdt = -1;if (op->verbose > 1)            pr2serr(">>> about to open device name: %s\n",                    device_name_arr[k]);        sg_fd = open_and_simple_inquiry(device_name_arr[k], rw, &pdt,                                        &protect, op);if (sg_fd < 0) {if (0 == ret)                ret = -sg_fd;continue;        }
if (op->inquiry) {if (op->examine)                r = examine_vpd_page(sg_fd, pn, spn, op, req_pdt, protect);else                r = sdp_process_vpd_page(sg_fd, pn, ((spn < 0) ? 0: spn), op,                                         req_pdt, protect, NULL, 0, NULL, 0);        } else {if (cmd_str && scmdp)   /* process command */                r = sdp_process_cmd(sg_fd, scmdp, cmd_arg, pdt, op);else {                  /* mode page */if (op->examine)                    r = examine_mode_page(sg_fd, pn, op, req_pdt);
else                    r = process_mode_page(sg_fd, &mp_settings, pn, spn,                                          set_clear, (NULL != get_str), op,                                          pdt);            }}

基于上面的代码,我们也可以看到sdparm基于SCSI协议交互,通过SCSI mode pages, 实现write cache设置。

图片

通过上面代码,我们可以看到hdparm和sdparm命令走的通道不完全一样,结合linux storage stack看可能会更加容易对比理解:

  • hdparm走的是libata的通道。也就是在HBA+Expander的架构中,在系统通过hdparm修改write cache时,HBA和expander都不会感知write cache的设置,设置write cache的命令会直接透传HDD。

  • sdparm走的是SCSI+mpt3sas驱动的通道。当系统需要修改write cache时,会先经过SATL转换层翻译成ATA命令,这时HBA和expander都会感知write cache的设置。

图片

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

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

相关文章

el-table 对循环产生的空白列赋默认值

1. el-table 空白列赋值 对el-table中未传数据存在空白的列赋默认值0。使用el-table 提供的插槽 slot-scope&#xff1a;{{ row || ‘0’ }} 原数据&#xff1a; <el-table-column label"集镇" :propcity ><template slot-scope"{row}">{{…

机器学习-笔记

绪论 参考期刊 ICCV 偏向视觉CVPR 偏向MLIAAA AI原理ICML 参考链接 CSDN 机器学习知识点全面总结 课堂内容学习-0912-N1 对于特征提取&#xff0c;简而言之就是同类聚得紧&#xff0c;异类分得开&#xff1b;   detection研究的是样本二分类问题&#xff0c;即分为正样本…

【ArcGIS Pro微课1000例】0033:ArcGIS Pro处理cad数据(格式转换、投影变换)

文章目录 一、cad dwg转shp1. 导出为shp2. cad至地理数据库3. data interoperability tools二、shp投影变换一、cad dwg转shp 1. 导出为shp 加载cad数据,显示如下: 选择需要导出的数据,如面状,右键→数据→导出要素: 导出要素参数如下,点击确定。 导出的要素不带空间参…

“非旺玖原装的PL2303,.........“解决办法

"非旺玖原装的PL2303&#xff0c;…"解决办法 windows安装PL2303串口驱动提示“非旺玖原装的PL2303&#xff0c;请联系您的供货商”的解决办法&#xff1a; 主要原因&#xff1a;驱动版本无法兼容&#xff0c;需要降低使用版本 解决办法&#xff1a; 1.插好串口线&…

某60区块链安全之不安全的随机数实战二学习记录

区块链安全 文章目录 区块链安全不安全的随机数实战二实验目的实验环境实验工具实验原理实验内容EXP利用 不安全的随机数实战二 实验目的 学会使用python3的web3模块 学会以太坊不安全的随机数漏洞分析及利用 实验环境 Ubuntu18.04操作机 实验工具 python3 实验原理 由…

Vue - Router

一、概述 路由 所谓路由&#xff0c;就是决定起点到终点的路径的进程。而在前端工程中&#xff0c;路由指的是根据不同的访问路径&#xff0c;展示不同组件的内容 Vue官方提供的路由功能叫 Vue-Router 二、如何使用 步骤 1、安装vue-router npm install router4 4是指第四个…

网络安全涉及哪些方面?

1.系统安全&#xff1a;运行系统安全即保证信息处理和传输系统的安全。它侧重于保证系统正常运行&#xff0c;避免因为系统的损坏而对系统存储、处理和传输的消息造成破坏和损失&#xff0c;避免由于电磁泄露&#xff0c;产生信息泄露&#xff0c;干扰他人或受他人干扰。 2. 网…

表内容的操作(增删查改)【MySQL】

文章目录 表的 CRUDCreate&#xff08;增加&#xff09;插入记录插入冲突则更新记录替换记录 Retrieve&#xff08;查找&#xff09;查找记录指定表达式的别名为结果去重WHERE 子句运算符条件查询区间查询模糊查询空值查询 对结果排序筛选分页结果 Update&#xff08;修改&…

golang学习笔记——日志记录

文章目录 日志与错误log包记录到文件记录框架Contextual LoggingLeveled LoggingSetting Global Log Level Error Logging 日志与错误 通常&#xff0c;发生错误时&#xff0c;最终用户只会看到一条消息&#xff0c;指示程序出现问题。日志是简单错误消息以外的更多信息。 lo…

助力制造企业降本增效,生成式AI技术大有可为

对于2023年的科技领域来说&#xff0c;生成式AI&#xff08;Artificial Intelligence Generated Content&#xff0c;也称AIGC&#xff09;绝对是最热门的焦点话题&#xff0c;没有之一。 那么对于制造行业来说&#xff0c;他们应该怎样从生成式AI这项新兴技术中获益&#xff1…

python爬虫SHA案例:某直播大数据分析平台

声明&#xff1a; 该文章为学习使用&#xff0c;严禁用于商业用途和非法用途&#xff0c;违者后果自负&#xff0c;由此产生的一切后果均与作者无关 一、找出需要加密的参数 js运行 atob(‘aHR0cDovL3d3dy5oaDEwMjQuY29tLyMvc2VhcmNoL3NlYXJjaA’) 拿到网址&#xff0c;F12打…

VS2019编译安装GDAL(C++)程序库

一、GDAL简介 GDAL&#xff0c;全称Geospatial Data Abstraction Library&#xff0c;即地理空间数据抽象库&#xff0c;是一个在X/MIT许可协议下读写空间数据的开源库&#xff0c;可以通过命令行工具来进行数据的转换和处理。而在调用中我们常用的OGR&#xff08;OpenGIS Simp…

11.20 知识总结(choices参数、MVC和MTV的模式、Django与Ajax技术)

一、 choices参数的使用 1.1 作用 针对某个可以列举完全的可能性字段&#xff0c;我们应该如何存储 .只要某个字段的可能性是可以列举完全的&#xff0c;那么一般情况下都会采用choices参数 1.2 应用场景 应用场景&#xff1a; 学历&#xff1a; 小学 初中 高中 本科 硕士…

【旅游行业】Axure旅游社交平台APP端原型图,攻略门票酒店民宿实战模板

作品概况 页面数量&#xff1a;共 110 页 兼容软件&#xff1a;Axure RP 9/10&#xff0c;不支持低版本 应用领域&#xff1a;旅游平台&#xff0c;酒店住宿 作品申明&#xff1a;页面内容仅用于功能演示&#xff0c;无实际功能 作品特色 本作品为「旅游社交平台」移动端…

什么是希尔伯特空间?

照片由 丹克里斯蒂安佩杜雷什 on Unsplash 一、说明 在本文中&#xff0c;我们将探讨希尔伯特空间这个非常重要的主题。希尔伯特空间由于其特性而经常出现在物理和工程中。为了理解希尔伯特空间&#xff0c;我们从度量空间的定义开始。 二、基础概念 集合是定义明确的元素的集合…

【MySQL】聚合函数、group by、update、delete

聚合函数、group by、update、delete 前言正式开始update将孙悟空同学的数学成绩变更为 80 分将曹孟德同学的数学成绩变更为 60 分&#xff0c;语文成绩变更为 70 分将总成绩倒数前三的 3 位同学的数学成绩加上 30 分将所有同学的语文成绩更新为原来的 2 倍 delete删除孙悟空同…

【miniQMT实盘量化4】获取实时行情数据

前言 上篇&#xff0c;我们介绍了如何获取历史数据&#xff0c;有了历史数据&#xff0c;我们可以进行分析和回测。但&#xff0c;下一步&#xff0c;我们更需要的是实时数据&#xff0c;只有能有效的监控实时行情数据&#xff0c;才能让我们变成市场上的“千里眼&#xff0c;…

手机照片误删解决方法分享

几个要点 1.检查回收站&#xff1a;一些情况下&#xff0c;我们会在删除文件时将它们移动到回收站中&#xff0c;查看回收站中是否有被删除的照片&#xff0c;这样可以直接恢复文件。 2.使用手机自带的恢复功能&#xff1a;一些手机自带照片恢复功能&#xff0c;可尝试在相册…

Sentinel 热点规则 (ParamFlowRule)

Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 SpringbootDubboNacos 集成 Sentinel&…

二分查找——34. 在排序数组中查找元素的第一个和最后一个位置

文章目录 1. 题目2. 算法原理2.1 暴力解法2.2 二分查找左端点查找右端点查找 3. 代码实现4. 二分模板 1. 题目 题目链接&#xff1a;34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣&#xff08;LeetCode&#xff09; 给你一个按照非递减顺序排列的整数数组 nums&#…