Overview
谈Logical block provisioning之前,介绍一下thin LUN的概念。所谓thin LUN,就是LUN的LBA和实际物理块映射还没有确定。比如这个LUN的逻辑大小是1000G,但是这个LUN实际上只有500G的LBA是有实际物理块映射的,另外500G是没有映射的。等到LUN的用户真的将已经分配的500G空间用完的时候,需要更多的空间,那么这时候可以考虑将没有映射的500G LBA空间也建立到物理块的映射,然后可用的空间就扩大了,这就是thin LUN的原理。这样可以做到LUN的实际物理空间按需分配,达到节省资源的目的。有Thin LUN就有Thick LUN,相对的,thick LUN就是所有的LBA都和实际的物理块对应,这样读写性能可能会相对好一些(因为不需要动态创建映射),也不会有后续的创建映射失败的问题。但是这样做的缺点就是,资源的利用率可能会低点。
所以每个LUN的LBA,要么是map状态,要么是unmap状态。mapped状态就是LBA到PB的映射是确定的。unmapped状态就是LBA到PB的映射是不确定的。
LBA映射状态unmapped又细分为两种状态:
- anchored:针对anchored的LBA的写操作,不需要分配额外的映射资源。说白了对于anchored的LBA,随时可以和具体的PB对应上。
- deallocated:针对deallocated的LBA的写操作,可能需要分配额外的映射资源。
对于mapped状态和anchored状态的LBA,可以认为映射资源都是保留的。而deallocated的映射资源是不保留的。
LUN一共有3种 logical block provisioning:
不同类型的logical block provisioning
- Fully provisioned: 所有的LBA和PB的映射都是确定的,且不支持 logical block provisioning management,LBA的状态也只有mapped。
- Resource provisioned: LUN有足够的资源来映射所有的LBAs,这些LBAs由READ CAPACITY返回。
- Thin provisioned: 精简配置。LUN未必有足够的资源来映射所有的LBAs。必须至少支持mapped和deallocated两种状态。另外Resource provisioned和thin provisioned并非固定的,两种状态是可以转变的。例如如果资源不足,那么LUN可能从resource provisioned变成thin provisioned,同时需要建立一个unit attention,additional sense code 设置为 INQUIRY DATA HAS CHANGED。
Resource provisioned和Thin provisioned LUN,都需要支持 logical block provisioning management操作:
- shall support the Logical Block Provisioning VPD page
- may supply a provisioning group designation descriptor as defined in the Logical Block Provisioning VPD page;
- may support logical block provisioning thresholds ;
- may support the GET LBA STATUS (16) command;
- may support the GET LBA STATUS (32) command
- should support the Block Limits VPD page; and
- shall support at least one of the following unmap mechanisms:
- the UNMAP command;
- the UNMAP bit in the WRITE SAME (10) command;
- the UNMAP bit in the WRITE SAME (16) command; or
- the UNMAP bit in the WRITE SAME (32) command.
查看LUN是否支持 logical block provisioning management
通过inquiry 命令查询VPD page 0xb2(logical block provision页),例如:
[root@node100 ~]# sg_vpd --page=lbpv /dev/sdc
Logical block provisioning VPD page (SBC):
Unmap command supported (LBPU): 0 # 不支持unmap
Write same (16) with unmap bit supported (LBWS): 0 # 不支持scsi命令write same(16)with unmap bit
Write same (10) with unmap bit supported (LBWS10): 0 # scsi命令write same(10)with unmap bit
Logical block provisioning read zeros (LBPRZ): 0
Anchored LBAs supported (ANC_SUP): 0
Threshold exponent: 0
Descriptor present (DP): 0
Provisioning type: 0
[root@node100 ~]#
字段含义:
- LBPU(logical block provision unmap):是否支持unmap命令。0代表不支持,1代表支持。
- LBPWS(logical block provision write same):1代表支持scsi命令write same(16)with unmap bit,0代表不支持。
- LBPWS10(logical block provision write same 10):1代表支持scsi命令write same(10)with unmap bit,0代表不支持。如果一个设备即支持write same 16 with unmap和write same 10 with unmap,且它支持write same 32,那么它一定得支持write same 32 with unmap
- LBPRZ(logical block provision read zero):从处于provison的logical block读出的数据为0(如果设置为xx1),或者预设值(此字段设置为010b)。如果lbprz为000,那么设备不能保证从unmap block读取的数据。
- ANC_SUP:1表示支持anchored LBAs,0表示不支持。
- Provisioning type:0表示fully provisioned,1表示resource provisioned,2表示thin provisioned。
参考资料
SCSI Block Commands – 4
网友评论