Write Zeroes

WriteZeroes命令用于将逻辑块范围填充为零,影响包括数据、元数据和保护信息。根据CDW12中的DEAC位,可能涉及逻辑块的释放。如果DEAC位设置为1,控制器在完成命令前会写入数据和元数据,并可能释放逻辑块。保护信息依据CDW12的PRINFO字段和端到端保护设置更新。如果DEAC位为0,逻辑块不会被释放,但数据仍会被清除。完成命令后,控制器会在I/O完成队列中发布状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

6.17 Write Zeroes command

    “Write Zeroes”命令用于将逻辑块范围设置为零。该命令相关的NON-PI metadata(存在保护信息以外的元数据。)应将所有字节清为0h。写入到介质的逻辑块的保护信息会基于CDW12.PRINFO更新。若Protection Information Action bit (PRACT)被清除为“ 0”,则该命令的保护信息应全为零。如果Protection Information Action bit (PRACT)设置为“ 1”,则保护信息应基于“Identify Namespace”数据结构中的End-to-end Data Protection Type Settings(DPS)字段(请参见图245),以及“write zeroes”命令中的CDW15.EILBRT,CDW15.ELBATM和CDW15.ELBAT字段。

    成功完成此命令后,此范围内逻辑块的后续读取返回的值应全部清除为0h,直到对该LBA范围进行写操作为止。

    如果在Write Zeroes命令中将Deallocate位(CDW12.DEAC)设置为“ 1”,并且命名空间支持将从已释放的逻辑块及其元数据(不包括保护信息)读的值(例如DLFEAT字段中的位2:0设置为001b)中的所有字节清除为0h,然后对于每个指定的逻辑块,控制器:

        •可以释放该逻辑块;

        •应返回从以下读取的值中所有清零的字节:

          o该逻辑块;

          o该逻辑块的元数据(不包括保护信息);

        •应基于该Write Zeroes命令中的CDW12.PRINFO在该逻辑块中返回保护信息。

    如果在Write Zeroes命令中将Deallocate位清除为'0',从释放的Logical block读到的值和它的metadata, namespace支持清空所有的bytes为0(例如,将DLFEAT字段中的位2:0设置为001b) 及其元数据(不包括保护信息),然后对于每个指定的逻辑块,控制器:

        •可以释放该逻辑块;

        •应返回从以下值读取的值中所有清零的字节:

          o该逻辑块;

          o逻辑阻止元数据(不包括保护信息);

        •应基于该Write Zeroes命令中的CDW12.PRINFO在该逻辑块中返回保护信息。

    对于由Write Zeroes命令指定范围内的每个逻辑块,如果namespace不支持该逻辑块,则将从该逻辑块读取的值及其元数据(不包括保护信息)的所有字节清除为0h,控制器 不得释放该逻辑块。

    使用的字段是“Command Dword10”,“Command Dword11”,“Command Dword 12”,“Command Dword 14”和“Command Dword 15”字段。

Figure 410:Write Zeroes – Command Dword 10 and Command Dword 11

Bits

描述

63:00

Starting LBA(SLBA):这个字段指示了要作为操作一部分写入的第一个逻辑块的64位地址。

Command Dword 10 contains bits 31:00; Command Dword 11 contains bits 63:32.

Figure 411:Write Zeroes – Command Dword 12

Bits

描述

31

Limited Retry (LR):

如果设置为“ 1”,则控制器应进行有限的重试。 如果将其清除为“ 0”,则控制器将应用所有可用的错误恢复手段将数据写入NVM。

30

Force Unit Access (FUA): 如果设置为“ 1”,则控制器应在指示命令完成之前将数据和元数据(如有)写入非易失性介质。

其他命令没有隐含的顺序。 如果清除为0,则该位无效。

29:26

Protection Information Field (PRINFO): 指定保护信息操作和检查字段,如355中所定义。保护信息检查(PRCHK)字段应清除为000b。

25

Deallocate (DEAC): 如果设置为“ 1”,则主机正在请求控制器释放指定的逻辑块。 如果将其清除为“ 0”,则主机不请求控制器释放指定的逻辑块。

24:16

保留字段

15:00

Number of Logical Blocks (NLB):

该字段指示要写入的逻辑块的数量。 这是一个基于0的值。

Figure 412:Write Zeroes – Command Dword 14

Bits

描述

31:00

nitial Logical Block Reference Tag (ILBRT):

该字段指示初始

Logical Block Reference Tag

值。 仅当namespace的格式设置为使用端到端保护信息时,才使用此字段。 请参阅第8.3节。

Figure 413:Write Zeroes – Command Dword 15

Bits

描述

31:16

Logical Block Application Tag Mask (LBATM):

表示Application Tag Mask 的值,仅当namespace的格式设置为使用端到端保护信息时,才使用此字段。 请参阅第8.3节。

15:00

Logical Block Application Tag (LBAT):

表示Application Tag 值,仅当namespace的格式设置为使用端到端保护信息时,才使用此字段。 请参阅第8.3节。

6.17.1 Command Completion

完成“Write Zeroes”命令后,控制器应将完成队列条目发布到关联的I / O完成队列中,以指示该命令的状态。

Write Zeroes命令的特定状态值在图414中定义。

Figure 214:Write Zeroes – Command Specific Status Values

Bits

描述

81h

Invalid Protection Information:

该命令中指定的Protection Information Field (PRINFO)(请参阅图411)设置对于格式化了namespace的保护信息无效(请参阅图328中的PI字段和图245中的DPS字段)或ILBRT无效 字段无效(请参阅第8.3.1.5节)。

82h

Attempted Write to Read Only Range:

指定的LBA范围包含只读块。 如果介质上的只读是名称空间的写保护状态更改的结果,则控制器不得返回此状态值(请参阅第8.19节)。

### 回答1: Jackknife方法是一种统计学中的抽样技术,用于评估统计量估计值的偏差和方差。下面是一份用MATLAB编写的Jackknife方法的示例代码: 假设您已经有一个向量data,其中包含要计算统计量的数据: ``` % 定义向量 data data = [1 2 3 4 5 6 7 8 9 10]; % 计算向量data的平均值 n = length(data); % 向量data的长度 xbar = mean(data); % 向量data的平均值 % 采用 Jackknife 方法计算平均值的偏差和方差 xbar_jk = zeros(n,1); for i = 1:n data_jk = data([1:i-1 i+1:n]); % 从数据中剔除第 i 个样本 xbar_jk(i) = mean(data_jk); % 计算剩余样本的平均值 end bias_jk = (n-1) * (xbar - xbar_jk); % 计算偏差 var_jk = (n-1) / n * sum((xbar_jk - mean(xbar_jk)).^2); % 计算方差 ``` 上述代码将计算原始数据向量的平均值,并使用Jackknife方法计算平均值的偏差和方差。该方法通过循环迭代删除每个数据点,以产生多个留存数据集,每个留存数据集都用于计算统计量的值。最终,偏差和方差可以通过使用这些留存数据集的统计量值来计算得出。 ### 回答2: 杰克刀(Jackknife)方法在统计学中用于评估估计量的准确性和稳定性。它通过重复地从样本中删除一个观测值来生成一系列删除抽样样本,并在每个样本中应用估计量,以便得到样本估计的分布。以下是用MATLAB编写的Jackknife方法的代码示例: ```matlab % 通过Jackknife方法估计样本均值的标准差 % 示例输入样本数据 data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; n = length(data); % 样本大小 jackknife_means = zeros(1, n); % 初始化储存样本均值的数组 for i = 1:n jackknife_data = data; jackknife_data(i) = []; % 删除第i个观测值 jackknife_means(i) = mean(jackknife_data); % 计算删除抽样样本的均值 end jackknife_std = sqrt((n-1)/n * sum((jackknife_means - mean(data)).^2)); % 计算均值的标准差 disp(['样本均值的标准差为:', num2str(jackknife_std)]); ``` 在上面的示例代码中,我们首先提供了一个样本数据`data`。然后,我们使用一个循环遍历样本中的每个观测值,并在每次迭代中删除一个观测值。接下来,我们将删除一个观测值后的样本均值存储在`jackknife_means`数组中。最后,我们使用这些删除抽样样本的均值计算样本均值的标准差,并通过`disp`函数将结果显示出来。 请注意,这只是Jackknife方法的一个简单示例。具体应用取决于你想要评估的估计量和用到的统计函数。你可以根据自己的需求进行修改和扩展。 ### 回答3: 在MATLAB中实现Jackknife方法的代码如下: ```matlab function [estimate, std_error] = jackknife(data, statistic) n = length(data); estimates = zeros(n, 1); % 计算每个样本被删除后的估计值 for i = 1:n aux_data = data; aux_data(i) = []; estimates(i) = statistic(aux_data); end % 计算原始数据的估计值和标准误差 estimate = statistic(data); bias = (n - 1) * (mean(estimates) - estimate); std_error = sqrt((n - 1) * var(estimates) - bias^2); end ``` 使用方法: 1. 准备好包含要估计的数据的向量或数组`data`和计算统计量的函数句柄`statistic`。 2. 调用`jackknife(data, statistic)`函数,将返回估计值`estimate`和标准误差`std_error`。 邮件:dl4j-zh@openai.org
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值