• Xiubo Li's avatar
    tcmu: Recalculate the tcmu_cmd size to save cmd area memories · fe25cc34
    Xiubo Li authored
    For the "struct tcmu_cmd_entry" in cmd area, the minimum size
    will be sizeof(struct tcmu_cmd_entry) == 112 Bytes. And it could
    fill about (sizeof(struct rsp) - sizeof(struct req)) /
    sizeof(struct iovec) == 68 / 16 ~= 4 data regions(iov[4]) by
    default.
    
    For most tcmu_cmds, the data block indexes allocated from the
    data area will be continuous. And for the continuous blocks they
    will be merged into the same region using only one iovec. For
    the current code, it will always allocates the same number of
    iovecs with blocks for each tcmu_cmd, and it will wastes much
    memories.
    
    For example, when the block size is 4K and the DATA_OUT buffer
    size is 64K, and the regions needed is less than 5(on my
    environment is almost 99.7%). The current code will allocate
    about 16 iovecs, and there will be (16 - 4) * sizeof(struct
    iovec) = 192 Bytes cmd area memories wasted.
    
    Here adds two helpers to calculate the base size and full size
    of the tcmu_cmd. And will recalculate them again when it make sure
    how many iovs is needed before insert it to cmd area.
    Signed-off-by: default avatarXiubo Li <lixiubo@cmss.chinamobile.com>
    Acked-by: default avatarMike Christie <mchristi@redhat.com>
    Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
    fe25cc34
target_core_user.c 42.1 KB