68 struct [[gnu::packed]] {
81 struct [[gnu::packed]] {
231 struct [[gnu::packed]] {
constexpr size_t kDeviceIdMaxLen
@ kGetLifetime
获取设备生命周期信息 (VIRTIO_BLK_T_GET_LIFETIME)
@ kGetId
获取设备 ID (VIRTIO_BLK_T_GET_ID)
@ kOut
写入 (VIRTIO_BLK_T_OUT)
@ kIn
读取 (VIRTIO_BLK_T_IN)
constexpr size_t kSectorSize
标准扇区大小(字节)
BlkConfigOffset
块设备配置空间字段偏移量
@ kSecureEraseSectorAlignment
@ kDiscardSectorAlignment
@ kUnsupp
不支持的操作 (VIRTIO_BLK_S_UNSUPP)
@ kIoErr
IO 错误 (VIRTIO_BLK_S_IOERR)
@ kOk
操作成功 (VIRTIO_BLK_S_OK)
@ kSegMax
设备配置空间中 seg_max 字段有效 (VIRTIO_BLK_F_SEG_MAX)
@ kWriteZeroes
设备支持 write zeroes 命令 (VIRTIO_BLK_F_WRITE_ZEROES)
@ kDiscard
设备支持 discard 命令 (VIRTIO_BLK_F_DISCARD)
@ kTopology
设备配置空间中 topology 字段有效 (VIRTIO_BLK_F_TOPOLOGY)
@ kMq
设备支持多队列 (VIRTIO_BLK_F_MQ)
@ kRo
设备为只读设备 (VIRTIO_BLK_F_RO)
@ kConfigWce
设备可在回写和直写缓存模式间切换 (VIRTIO_BLK_F_CONFIG_WCE)
@ kSizeMax
设备配置空间中 size_max 字段有效 (VIRTIO_BLK_F_SIZE_MAX)
@ kBlkSize
设备配置空间中 blk_size 字段有效 (VIRTIO_BLK_F_BLK_SIZE)
@ kFlush
设备支持缓存刷新命令 (VIRTIO_BLK_F_FLUSH)
@ kSecureErase
设备支持 secure erase 命令 (VIRTIO_BLK_F_SECURE_ERASE)
@ kGeometry
设备配置空间中 geometry 字段有效 (VIRTIO_BLK_F_GEOMETRY)
@ kLifetime
设备支持提供存储生命周期信息 (VIRTIO_BLK_F_LIFETIME)
uint32_t max_write_zeroes_seg
write zeroes 命令的最大段数(如果 VIRTIO_BLK_F_WRITE_ZEROES 被协商)
uint32_t max_secure_erase_sectors
secure erase 命令的最大扇区数(如果 VIRTIO_BLK_F_SECURE_ERASE 被协商)
uint32_t size_max
任意单个段的最大字节数(如果 VIRTIO_BLK_F_SIZE_MAX 被协商)
uint16_t min_io_size
建议的最小 I/O 大小(块数)
uint32_t max_write_zeroes_sectors
write zeroes 命令的最大扇区数(如果 VIRTIO_BLK_F_WRITE_ZEROES 被协商)
uint32_t blk_size
块大小(字节),用于性能优化(如果 VIRTIO_BLK_F_BLK_SIZE 被协商)
uint32_t opt_io_size
建议的最优 I/O 大小(块数)
uint64_t capacity
设备容量(以 512 字节扇区为单位)
uint32_t max_discard_seg
discard 命令的最大段数(如果 VIRTIO_BLK_F_DISCARD 被协商)
uint32_t secure_erase_sector_alignment
secure erase 扇区对齐要求(如果 VIRTIO_BLK_F_SECURE_ERASE 被协商)
uint8_t write_zeroes_may_unmap
write zeroes 是否可能导致 unmap(如果 VIRTIO_BLK_F_WRITE_ZEROES 被协商)
uint16_t num_queues
请求队列数(如果 VIRTIO_BLK_F_MQ 被协商)
uint32_t max_discard_sectors
discard 命令的最大扇区数(如果 VIRTIO_BLK_F_DISCARD 被协商)
uint32_t max_secure_erase_seg
secure erase 命令的最大段数(如果 VIRTIO_BLK_F_SECURE_ERASE 被协商)
uint32_t seg_max
单个请求中的最大段数(如果 VIRTIO_BLK_F_SEG_MAX 被协商)
uint32_t discard_sector_alignment
discard 扇区对齐要求(如果 VIRTIO_BLK_F_DISCARD 被协商)
uint8_t physical_block_exp
每个物理块包含的逻辑块数 (log2)
uint8_t alignment_offset
第一个对齐逻辑块的偏移
Discard/Write Zeroes/Secure Erase 请求段
uint32_t reserved
保留位,必须为 0
uint32_t num_sectors
扇区数(以 512 字节为单位)
uint64_t sector
起始扇区(以 512 字节为单位)
uint16_t device_lifetime_est_typ_b
uint16_t pre_eol_info
预 EOL (End-Of-Life) 信息
uint16_t device_lifetime_est_typ_a
uint64_t interrupts_handled
已处理的中断次数
uint64_t queue_full_errors
队列满导致入队失败的次数
uint64_t kicks_elided
借助 Event Index 省略的 Kick 次数
uint64_t bytes_transferred
已传输字节数