Re: [PATCH] block: reorder bio::__bi_remaining for better packing

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 10/24/19 11:31 AM, David Sterba wrote:
> Simple reordering of __bi_remaining can reduce bio size by 8 bytes that
> are now wasted on padding (measured on x86_64):
> 
> struct bio {
>          struct bio *               bi_next;              /*     0     8 */
>          struct gendisk *           bi_disk;              /*     8     8 */
>          unsigned int               bi_opf;               /*    16     4 */
>          short unsigned int         bi_flags;             /*    20     2 */
>          short unsigned int         bi_ioprio;            /*    22     2 */
>          short unsigned int         bi_write_hint;        /*    24     2 */
>          blk_status_t               bi_status;            /*    26     1 */
>          u8                         bi_partno;            /*    27     1 */
> 
>          /* XXX 4 bytes hole, try to pack */
> 
>          struct bvec_iter   bi_iter;                      /*    32    24 */
> 
>          /* XXX last struct has 4 bytes of padding */
> 
>          atomic_t                   __bi_remaining;       /*    56     4 */
> 
>          /* XXX 4 bytes hole, try to pack */
> [...]
>          /* size: 104, cachelines: 2, members: 19 */
>          /* sum members: 96, holes: 2, sum holes: 8 */
>          /* paddings: 1, sum paddings: 4 */
>          /* last cacheline: 40 bytes */
> };
> 
> Now becomes:
> 
> struct bio {
>          struct bio *               bi_next;              /*     0     8 */
>          struct gendisk *           bi_disk;              /*     8     8 */
>          unsigned int               bi_opf;               /*    16     4 */
>          short unsigned int         bi_flags;             /*    20     2 */
>          short unsigned int         bi_ioprio;            /*    22     2 */
>          short unsigned int         bi_write_hint;        /*    24     2 */
>          blk_status_t               bi_status;            /*    26     1 */
>          u8                         bi_partno;            /*    27     1 */
>          atomic_t                   __bi_remaining;       /*    28     4 */
>          struct bvec_iter   bi_iter;                      /*    32    24 */
> 
>          /* XXX last struct has 4 bytes of padding */
> [...]
>          /* size: 96, cachelines: 2, members: 19 */
>          /* paddings: 1, sum paddings: 4 */
>          /* last cacheline: 32 bytes */
> };

This is great, obviously been too long since this kind of thing was
looked at by myself. Thanks, applied.

-- 
Jens Axboe




[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux