bufx 结构

用途

根据性能和 RAS 原因的需要,扩展 布夫 结构以容纳新字段。

描述

布夫克斯 结构可由 64 位内核扩展和 64 位内核扩展使用。 32 位内核扩展和 32 位内核扩展仅具有使用 布夫 结构的选项。

bufx 块 I/O 的结构变量

/usr/include/sys/buf.h 文件中定义的 bufx 结构包含以下字段:

描述
b_flags 标志位。 此字段的值由逻辑 OR 操作构造为具有 0 中的 0 个或更多个:
写 (_WRITE)
此操作是写操作。
读取 (_READ)
此操作是读数据操作。
已完成 (_D)
缓冲区上的 I/O 操作已完成,因此缓冲区信息比其他版本更最新。
错误 (_ERROR)
发生传输错误,事务已异常中止。
B_BUSY
该块不在空闲列表上。
B_INFLGHT
此 I/O 请求已发送至物理设备驱动程序以进行处理。
年龄 (_AGE)
数据不太可能很快被复用,因此首选此缓冲区进行复用。 此标志建议缓冲区位于空闲列表的头,而不是位于末尾。
B_ASYNC
正在此块上执行异步 I/O。 完成 I/O 后,释放该块。
B_DELWRI
仍然需要写出此缓冲区的内容,然后才能复用此缓冲区,即使此块可能在空闲列表中也是如此。 当系统期望另一个对同一块的写操作很快发生时, 子例程将使用此方法。
B_NOHIDE
指示在直接存储器存取 (DMA) 传输期间不应隐藏该数据页。
统计信息 (_S)
由于 I/O 错误,该数据与磁盘上的数据冲突。
B_MORE_DONE
设置时,向此 布夫克斯 结构的接收方指示在 IODONE 级别中有更多结构排队。 这允许设备驱动程序在处理任何新请求之前处理所有已完成的请求。
B_SPLIT
设置后,指示传输可以在数据缓冲区中的任何位置开始。
B_BUFX
如果满足以下所有条件,那么会将缓冲区标识为扩展的 布夫 结构:
  • B_BUFX 位设置在以下值中:b_flags:NONE.
  • 通过重新组合该系统bx_refptrtopbx_refptrbot字段将指向结构的开头。
  • bx_eyecatcher字段 (用于标识 布夫 结构是否已扩展) 等于 ASCII 字符串 " bufx"。
B_BUFX_initial
当设置时,指示 布夫 已扩展。
b_forw 正向繁忙块指针。
b_back 向后繁忙的块指针。
av_forw 驱动程序请求队列的前转指针。
av_back 用于驱动程序请求队列的反向指针。
b_iodone 调用 策略 例程的任何人都必须将此字段设置为指向其 I/O 完成例程。 当 I/O 完成时,将在 INTIODONE 中断 级别上调用此例程。
b_dev 主要和次要设备号。
b_bcount 数据传输的字节计数。
b_un.b_addr 这是数据缓冲区的内存地址。
b_blkno 设备上的块号。
b_resid 发生错误后未传输的数据量。
b_event 事件列表的锚点。
b_xmemd 这是跨内存描述符。
bx_refptrtop 参考指针的上半部分。
bx_refptrbot 参考指针的下半部分。
bx_version 这是 布夫克斯 结构的版本。
bx_eyecatcher 该字段包含字符串 "bufx" ,允许在转储数据时轻松识别 KDB 中的 布夫克斯 结构,并且除了使用 BUFX_VALIDATE 宏外,还允许进行结构验证。
bx_flags 布夫克斯 标志具有 64 位字段,该字段可用于特定于 布夫克斯的标志,这些标志尚未定义。
bx_io_priority 如果底层存储设备不支持 I/O 优先级,那么将忽略此值。 该bx_io_priority必须是以下值之一:IOPRIORITY_UNSET(0) 或 1 到 15 之间的值。 较低的 I/O 优先级值被认为比较大的值更重要。 例如,值为 1 将被视为最高优先级,值为 15 将被视为最低优先级。 以下项的值:IOPRIORITY_UNSETsys/extendio.h 文件中定义。
bx_io_cache_hint 如果底层存储设备不支持 I/O 高速缓存提示,那么将忽略此值。 该bx_io_cache_hint必须是以下值之一:CH_AGE_OUT_FAST或其值CH_PAGE_WRITE(在 sys/extendio.h 文件中定义)。 这些值是互斥的。 如果CH_AGE_OUT_FAST设置好,可以快速从存储设备缓冲区高速缓存中调出 I/O 缓冲区。 这在以下情况下很有用: 应用程序已在对 I/O 缓冲区进行高速缓存,并且可以避免在存储层中进行冗余高速缓存。 如果CH_PAGE_WRITE设置, I/O 缓冲区仅写至存储设备高速缓存,而不写至磁盘。