23.2. 사용자 공간 액세스
항상 올바르게 정렬되고 크기가 지정된 I/O를 사용해야 합니다. 이는 직접 I/O 액세스에 특히 중요합니다. 직접 I/O는 logical_block_size 경계 및 logical_block_size 의 복수에 맞아야 합니다.
네이티브 4K 장치(예: logical_block_size 는 4K)를 사용하는 경우 애플리케이션이 장치의 logical_block_size 를 여러 개에서 직접 I/O를 수행하는 것이 중요합니다. 즉, 4k 정렬 I/O 대신 512바이트 맞춤 I/O를 수행하는 기본 4K 장치로 애플리케이션이 실패합니다.
이를 방지하려면 애플리케이션에서 적절한 I/O 정렬 및 크기를 사용하도록 장치의 I/O 매개 변수를 참조해야 합니다. 앞에서 언급했듯이, I/O 매개변수는 sysfs 및 블록 장치 ioctl 인터페이스를 통해 노출됩니다.
자세한 내용은 man libblkid 를 참조하십시오. 이 도움말 페이지는
libblkid-devel
패키지에서 제공합니다.
23.2.1. sysfs 인터페이스
- /sys/block/
disk
/alignment_offset또는/sys/block/disk
/partition
/alignment_offset참고파일 위치는 디스크가 물리적 디스크인지(로컬 디스크, 로컬 RAID 또는 다중 경로 LUN)인지에 따라 다릅니다. 첫 번째 파일 위치는 물리 디스크에 적용되고 두 번째 파일 위치는 가상 디스크에 적용됩니다. 그 이유는 virtio-blk가 항상 파티션의 정렬 값을 보고하기 때문입니다. 물리 디스크는 정렬 값을 보고하거나 보고하지 않을 수 있습니다. - /sys/block/
disk
/queue/physical_block_size - /sys/block/
disk
/queue/logical_block_size - /sys/block/
disk
/queue/minimum_io_size - /sys/block/
disk
/queue/optimal_io_size
커널은 I/O 매개변수 정보를 제공하지 않는 "레거시" 장치에 대한 이러한 sysfs 속성을 계속 내보냅니다. 예를 들면 다음과 같습니다.
예 23.1. sysfs 인터페이스
alignment_offset: 0 physical_block_size: 512 logical_block_size: 512 minimum_io_size: 512 optimal_io_size: 0
23.2.2. 블록 장치 ioctls
- BLKALIGNOFF:
alignment_offset
- BLKPBSZGET:
physical_block_size
- BLKSSZGET:
logical_block_size
- BLKIOMIN:
minimum_io_size
- BLKIOOPT:
optimal_io_size