跳转到主内容

NetApp_Insight_2020.png 

什么是未对齐的 I/O ?

Views:
21
Visibility:
Public
Votes:
0
Category:
data-ontap-8
Specialty:
core
Last Updated:

可不使用  

适用于

  • 集群模式 Data ONTAP 8
  • SAN
  • FlexPod
  • Data ONTAP 7 及更早版本

解答

要解释 I/O 对齐方式、是否首先需要解释主机操作系统如何将 LUN 用作存储设备。LUN 和硬盘作为块提供存储,其中块是以字节为单位的可寻址存储单元。硬盘通告的传统块大小为 512 字节。高级格式驱动器和 NetApp LUN 等新硬盘使用较大的块大小存储数据,同时继续向主机通告较小的 512 字节块以实现兼容性。通告的块称为逻辑块,而底层存储块称为物理块。NetApp LUN 将数据存储在 4 KB 物理块中、每个物理块产生 8 个 512 字节逻辑块。

logical_blocs_1.png

主机操作系统可能会在任何逻辑块上开始读或写( I/O )操作。但是,当 I/O 从不在物理块开头的逻辑块开始时、 I/O 被认为未对齐。

未对齐 IO.png

I/O 仅在从逻辑块开始时才对齐;这是物理块中的第一个逻辑块。也就是说, I/O 与物理块边界保持一致。

已对齐 IO.png

确定 LUN 的 I/O 对齐 

Data ONTAP 包含一种启发式检测机制、可自动识别 LUN 的未对齐 I/O 。启发式通过观察 I/O 开始处物理块内的位置以及 I/O 长度来检查工作。启发式输出将是以下内容之一:不确定、对齐、未对齐或部分写入。只有当 LUN 未收到足够的 I/O 来决定对齐时,才会应用不确定状态。对于经常使用的 LUN 、此状态将会持续很短时间、启发式将标识其他状态之一。“部分写入”状态标识接收大多数 I/O 小于 4 KB 的 LUN 。通常情况下,此状态将应用于数据库事务或重做日志使用的 LUN 。此状态并不表示存在问题;它用于将此情况与未对齐状态分开。随着工作负载的变化、可能需要通过运行lun stats –z 命令来重置对齐启发。 

以下示例显示了一个 LUN 、其中的启发式已将 I/O 标识为未对齐。读取和写入对齐直方图记录从物理块中的八个位置中的每个位置开始的 I/O 百分比。此假设示例显示, 100% 的读写 I/O 从第八个位置开始,也称为直方图储段。 

*> lun alignment show /vol/luns/my_lun

Multiprotocol type: linux

Alignment: misaligned

Write alignment histogram percentage: 0, 0, 0, 0, 0, 0, 0, 100

Read alignment histogram percentage: 0, 0, 0, 0, 0, 0, 0, 100

Partial writes percentage: 0

     Partial reads percentage: 0 

下一个示例显示了一个 LUN 、其中的启发式已将 I/O 标识为已对齐。读取和写入对齐直方图显示 100% 的 I/O 从与物理块边界对齐的第一个位置开始。 

*> lun alignment show /vol/luns/my_lun

     Multiprotocol type: windows

     Alignment: aligned

     Write alignment histogram percentage: 100, 0, 0, 0, 0, 0, 0, 0

     Read alignment histogram percentage: 100, 0, 0, 0, 0, 0, 0, 0

     Partial writes percentage: 0

     Partial reads percentage: 0 

最后一个示例显示 LUN 上的部分写入状态。在此处,您将看到部分写入和部分读取字段中占 I/O 总数的一定百分比。部分写入和读取的确切数量取决于执行 I/O 的应用程序以及该应用程序上工作负载的性质。百分比可能不会增加到 100 ,这是预期的,并不表示启发式计算存在问题。 

*> lun alignment show /vol/luns/my_lun

     Multiprotocol type: linux

     Alignment: partial-writes

     Write alignment histogram percentage: 0, 0, 0, 0, 0, 0, 0, 0

     Read alignment histogram percentage: 1, 6, 1, 3, 0, 4, 6, 6

     Partial writes percentage: 0

     Partial reads percentage: 68 

对于 7 模式节点:

lun show -v all

/vol/Luns/Luns 2.0t (2198989880250) (r/w, online, mapped)
Comment: "Z: drive"
Serial#: xxxxxxxxxxxx
Share: none
Space Reservation: enabled
Multiprotocol Type: windows_2008
Maps: xxxxx=0
Occupied Size: 1.8t (2000000000000)
Creation Time: Tue Oct 14 00:00:00 EST 2014
Alignment: misaligned
Cluster Shared Volume Information: 0x0
Space_alloc: disabled
report-physical-size: enabled

导致 LUN I/O 对齐的因素 

主机操作系统使用 LUN 的方式因操作系统类型、分区方案、文件系统和应用程序而异。对于 I/O 未对齐的大多数情况、关键因素是主机操作系统使用的分区方案、并且还会受到文件系统或应用程序(如数据库)的影响。作为经验法则、您应该选择与主机操作系统最匹配的 Data ONTAP LUN 操作系统类型和操作系统类型。下表提供了其他指导。在某些情况下,可能需要自定义分区表。某些 Data ONTAP LUN 操作系统类型使用称为前缀的偏移来对齐关联主机操作系统使用的默认分区方案。对于前缀值大于 0 的 LUN 、自定义分区可能会创建未对齐的 I/O 

注: Data ONTAP 可能会报告正确对齐 LUN 上的 I/O 不对齐。通常情况下,只要您确信 LUN 已正确配置且分区表正确无误、就可以忽略这些未对齐警告。
示例:引导 LUN 是各种日志和其他较小写入的目标。所执行的小写入将类似于部分写入,而部分写入则类似于未对齐的 IO 。可以安全地忽略它们。大多数引导 LUN 都有一定数量的部分写入,因此即使 LUN 的几何结构和 LUN 类型正确,也可能会出现未对齐的情况。如果您知道 LUN 几何形状正确,请忽略未对齐。

数据库日志 LUN

用作数据库应用程序日志位置的 LUN (例如 Oracle (重做日志)或 Microsoft 的 SQL Server (事务日志))可以在对齐直方图中看到不对齐的写入 I/O 的随机分布。这是此类 I/O 的正常和预期行为也就是说,如果我们知道 LUN 用作数据库日志位置、并且已确认使用了正确的 LUN 类型和偏移量、则不可能或不需要进一步的更正操作。

LUN ostype

前缀(字节数)

前缀(扇区数)

操作系统

windows

32,256

63

Windows 2000、2003(MBR 格式)

windows_gpt

17,408

34

Windows 2003(GPT 格式)

windows_2008

0

0

Windows 2008 及更高版本

hyper_v

0

0

Windows 2008 Hyper-V ABD 更新

linux

0

0

所有 Linux 发行版 *

xen

0

0

Citrix XenServer

vmware

0

0

VMware ESX*

solaris

1 MB

2048

Solaris*

solaris_efi

17,408

34

Solaris*

hpux

0

0

HP-UX

aix

0

0

AIX

* 表示可能需要额外考虑,请参见以下信息。 

Linux 的其他注意事项 

Linux 发行版提供了多种使用 LUN 的方法、包括将 LUN 用作数据库、卷管理器和文件系统的原始设备。当用作原始设备或用作卷管理器中的物理卷时,无需在 LUN 上创建分区。如果不使用卷管理器使用 LUN 、则最好对 LUN 进行分区、使其具有一个以对齐偏移开始的分区、即八个逻辑块中的偶数个扇区。有关创建对齐的 Linux 分区的详细信息、请参阅 How to Create aligned partitions in Linux for use with NetApp LUNs 、 VMDK 、 VHD 和其他虚拟磁盘容器。  

VMware ESX/ESXi 的其他注意事项

通常情况下,在类型 VMware LUN 上看到的未对齐 I/O 将是由于其磁盘的客户操作系统分区引入的 VMDK 对齐问题造成的。

Solaris 的其他注意事项 

Solaris 提供了多种使用 LUN 的方式、包括许多不同的文件系统和卷管理器。Solaris 不需要特殊分区;但是,了解何时使用 Solaris 或 Solaris_EFI LUN OSType 非常重要。您应该仅对将使用 UFS 格式化的大于 990GB 的 LUN 使用 Solaris_EFI LUN OSType 。solaris_efiLUN OSType 用于在 EFI 磁盘标签(即扇区 34 )后偏移第一个分区的默认起始位置。对于所有其他配置(包括小于 990GB 的 SVM 、 VxVM 、 ZFS 和 UFS ),应使用 Solaris LUN OSType 。在使用 ZFS 的 Solaris 版本 10u8 和更高版本上、应使用 Solaris 的 LUN OSType 以及在主机sd.conf文件中添加物理块大小: 4096 (ssd.conf用于 Solaris x86 )。

文件的 I/O 对齐 

文件的 I/O 对齐与 LUN 的工作方式完全相同。文件的 I/O 通常与通过 NAS 协议访问的用作虚拟磁盘或磁盘映像的文件不一致。因此,虚拟磁盘的分区必须与文件块边界对齐、以获得最佳 I/O 吞吐量非常重要。

其他信息

不适用