Opened 8 years ago

Last modified 7 years ago

#8864 new enhancement

DriveSetup should detect disk physical block sizes.

Reported by: Bouncer Owned by: stippi
Priority: normal Milestone: R1
Component: Applications/DriveSetup Version: R1/Development
Keywords: Cc:
Blocked By: Blocking:
Has a Patch: no Platform: All


SSD's have an internal 4K block size. But DriveSetup always 'recommends' the user initialize the Partition with 2K blocks.

This block size mismatch results in poorer performance and faster wear on SSD drives. E.g.: two 4K blocks get used when attempting to write a total of 4K worth of data to the device. (eg: 1 4K block used for the first 2K write. It is then discarded and another 4K block used for the second 2K write).

DriveSetup should check if the drive is an SSD and make adjustments to its 'recommended' block size for the partition. Also, it should attempt to enforce a policy of aligning the partition to a 4K boundary when the drive is an SSD.

Change History (3)

comment:1 by luroh, 7 years ago

Component: Partitioning Systems/IntelApplications/DriveSetup
Owner: changed from bonefish to stippi

comment:2 by kallisti5, 7 years ago

Summary: DriveSetup should recognize SSD's.DriveSetup should detect disk physical block sizes.

I changed the description to better represent the issue. More then just SSD's use larger block sizes. (some newer drives do as well)

Changing the BFS format dialog to include the following may be a good change as well:

  • Block Size (radio buttons)
    • Recommended (2048)
    • Custom
      • <text box, custom size>

Maybe DriveSetup could pass block size recommendations to each file system creation add-on?

comment:3 by korli, 7 years ago

Theorically this would involve checking the value of bytes_per_sector on the device_geometry structure of the device.

Now, how should it happen in src/add-ons/disk_systems/bfs? Could it begin by adding a BPartitionParameterEditor::PartitionBlockSizeChanged() in BPartitionParameterEditor?

Though a TODO in headers/private/storage/PartitionParameterEditor.h indicates it shouldn't be done this way ( GenericPartitionParameterChanged(partition_parameter_type, const BVariant&) )

Note: See TracTickets for help on using tickets.