13. *
TCMU -- ring buffer 架构与现状
从代码可以看出,当前,ring buffer size固定为
(256+16)* 4096 = 1M + 64 K。
其中,
sizeof(Mailbox + Command Ring) = 64K,
sizeof( Data Area) = 1M。
Command Ring 是通过伪数组的形式进行管理,
每个元素具有 length 属性。
Data Area 是通过 bitmap 架构进行管理。
14. *
TCMU -- Ring 之 Data Area 优化
结合 TCMU & UIO 的框架实现,增加 Ring 的 Data Area 的动态调整特性。
针对于单个 Target Ring:
? Data Area 区域最大 size 限制为256 * 1024 Pages,4K page size 下为 1G。
? Data Area 区域初始 size 为 128 Pages,4K page size 下为 1M。
? Data Area 根据实际需求进行动态的 grow 或者 shrink。
介于系统本身内存的限制,如果不对 TCMU 下所有 Targets 的 Ring 的 D
ata Area 进行限制,则会造成系统内存的耗尽,解决方案:
? 对 TCMU 下所有 Ring 的 Data Area 区域大小总和进行限制,比如当前的2G,
然后建立一个缓冲池 GDAP(Global Data Area Pool)。
? 任何一个 Target Ring 的 Data Area 进行动态 grow 时候,会从GDAP中申请和
释放。
优化后效果:读写 IOPS 分别提升约 100 ~700%,应用压力越大,提升越明显。
以上方案的相关补丁目前已经进入内核主线。
15. *
TCMU -- Ring 之 Cmd Area 优化
Cmd Area 存放的相关 SCSI 命令头控制信息,相对于 SCSI 传输的 Data 数据大
小,所占空间是很小的,所以在设定最大 1G Data Area 情况下,根据估算
Cmd Area 不超过 8M(Cmd Area:Data Area ~= 8:1024),所以目前设定单
个 Target Cmd Area 大小为 8M。
8M Cmd Area 相对于大多数情况下,能够配合 1G Data Area 工作的很好,但
是针对于 SCSI 大量的小数据量的传输情况下,8M还是会造成性能瓶颈。
根据 SCSI 命令下 DMA Segments Scatter/Gatter <--> iovec 区域转换合并的特点,
对 Cmd Area 下 各个SCSI entry 进行瘦身优化,优化后能够使得每个 SCSI entry
节省约一半以上的内存空间,使得 8M 大小的 Cmd Area 显得绰绰有余。
优化后效果:节省 Cmd Area 约一半的内存。
以上瘦身优化补丁目前已经进入内核主线。