From what I understand DIF/DIX is a hardware checksum feature that requires specific support by the storage controller and attached block devices. It's not a software option. It will not work reliably for any buffered I/O and should only be used with applications that support raw devices or use O_DIRECT I/O. The types you mention describe the level of protection and each require a low level format of the device. The controller indicates its DIF and DIX options when it registers with the SCSI layer and the kernel driver can exchange the integrity metadata with a DIF/DIX aware application.
There is a lot of information at https://oss.oracle.com/projects/data-integrity/documentation/
You may also find the following interesting explaining how it works: elx_emc_orcl_wp_T10PI.pdf
I understand the low level requirements but I wanted to know more w.r.t Oracle Database/Linux support. Does the database care what protection types (1, 2, 3) the SCSI device has? Or is there any special configuration required in Linux etc.? I could not find any documentation related to these. Else I would assume the configuration is seamless. Just have a formatted scsi device with type 1 protection and the database will auto-detect it and pass the checksum information to the kernel driver.
T10 PI Type 1 is the only officially supported protection format. Type 2 and Type 3 are for use inside disk arrays.
For DIX to be enabled you need to run a UEK2 or UEK3 kernel. Use of ASMLib and oracleasm is required since that's the only interface that currently allows the protection information to be passed to and from userspace.
There is no data integrity-specific documentation since there really isn't anything to configure. If the HBA is DIX capable and a DIF-capable storage device is found, protected transfers will automatically be enabled. You can verify whether an ASM disk supports data integrity via the oracleasm-discover command:
Using ASMLib from /opt/oracle/extapi/64/asm/orcl/1/libasm.so
[ASM Library - Generic Linux, version 2.0.10 (KABI_V2)]
Discovered disk: ORCL:DIX00 [209715200 blocks (107374182400 bytes), maxio 256, integrity DIX1-512/512-IP]
Discovered disk: ORCL:DIX01 [209715200 blocks (107374182400 bytes), maxio 256, integrity DIX1-512/512-IP]
Discovered disk: ORCL:DIX10 [209715200 blocks (107374182400 bytes), maxio 256, integrity DIX1-512/512-IP]
Discovered disk: ORCL:DIX11 [209715200 blocks (107374182400 bytes), maxio 256, integrity DIX1-512/512-IP]
Martin K. Petersen
Awesome. This is exactly what I was looking for. Thanks so much Martin.