[parted-devel] Parted PED_DEFAULT_ALIGNMENT is no more effective for SCSI disks in recent kernel

Mike Fleetwood mike.fleetwood at googlemail.com
Wed Oct 8 08:38:48 BST 2025


On Mon, 6 Oct 2025 at 19:26, Butenko, Anton <abutenko at akamai.com> wrote:
> Hello team,
>
> After the relatively recent kernel update:
> https://github.com/torvalds/linux/commit/a23634644afc2f7c1bac98776440a1f3b161819e
> and some fixe after that:
> https://github.com/torvalds/linux/commit/9c0ba14828d64744ccd195c610594ba254a1a9ab
This second commit says:
  Note that the optimal I/O size may be set by the DMA
  engines or SCSI controllers and they have no knowledge about the disks
  attached to them, so the situation with optimal I/O not aligned to
  physical block size may happen.

> /sys/block/<dev_labeL>/queue/optimal_io_size contains now much bigger values for SCSI disks
> (actaully equal to the maximum DMA buffer size as I get it).
>
> For example, I have a setup
> # cat /sys/block/sdp/queue/optimal_io_size
> 16773120
> # cat /sys/block/sdp/queue/minimum_io_size
> 4096
Aligning partitions to your optimal_io_size of 16773120 (=4095*4096)
seems dubious.

> A that, actually leads us to the next questions:
> 1. PED_DEFAULT_ALIGNMENT (1MiB) used in linux_get_optimum_alignment function is not effective for SCSI disks, as SCSI hosts now seem to have bigger maximum DMA buffer sizes.
>    Is this needed to be revisited in parted? Like, having bigger alignment blocks can lead to some tricky behavior (like obvious thing partitions creation by user in MiBs will often lead to unaligned partitions)
> 2. We faced suboptimal behavior in our environment (at least it looks so), that can be easily reproduced with scsi_debug driver:
>
> # Load scsi_debug with desired geometry (logical=512, physical=4096=512*2^3)
> sudo modprobe scsi_debug dev_size_mb=160 sector_size=512 physblk_exp=3
>
> # Identify the created device (e.g., /dev/sdb)
> lsscsi -g | grep scsi_debug
> [3:0:0:0]    disk    Linux    scsi_debug       0190  /dev/sdb   /dev/sg2
>
> # Verify geometry
> cat /sys/block/sdb/queue/minimum_io_size
> 4096
> cat /sys/block/sdb/queue/optimal_io_size
> 524288
> blockdev --getsize64 /dev/sdb
> 167772160
>
> sudo ./parted --script /dev/sdb unit KiB mklabel gpt mkpart primary 256 100% print
> Warning: The resulting partition is not properly aligned for best performance: 512s % 2048s != 0s
> Model: Linux scsi_debug (scsi)
> Disk /dev/sdb: 163840kiB
> Sector size (logical/physical): 512B/4096B
> Partition Table: gpt
> Disk Flags:
>
> Number  Start   End        Size       File system  Name     Flags
> 1      256kiB  163823kiB  163568kiB               primary
>
> echo $?
> 0
>
> And then we tried to create enctypted partition with optimized block size:
> sudo cryptsetup luksFormat --type luks2 --sector-size 4096 /dev/sdb1
>
> With this parted prints just warning and leaves partition unaligned:
> Warning: The resulting partition is not properly aligned for best performance: 512s % 2048s != 0s
> But, I think we can optimize the behavior aligning the first block to the optimal sector size (if optimal sector size is bigger).
>
> And, instead of creating unaligned partition, provide user with the properly aligned one. This looks better to me as a "best effort" action.
> What do you think?
Creating a setup where you align a partition to something other than MiB
and get a warning for not using the recommended MiB alignment is not
evidence of an issue.

Optimal I/O size is not storage alignment.  Previously when tools
aligned partitions to the optimal I/O size it resulted in misaligned
partitions [1].  Let's not do that again.  All the tools now align to
MiBs, even thoses on other OSs.

Mike Fleetwood
(GParted Developer)


[1] Partitions Misaligned to 33553920 Bytes and Invalid Optimal
Transfer Size Warning
    [The list of tools which I previously identified as misaligning
    partitions when I looked into it back in 2019]
    https://web.archive.org/web/20201024195647/http://gparted-forum.surf4.info/viewtopic.php?id=17839



More information about the parted-devel mailing list