Am 16. Oktober 2026 14:28:18 UTC schrieb Bernhard Beschow <[email protected]>:
>
>
>Am 6. Oktober 2026 09:44:39 UTC schrieb Bernhard Beschow <[email protected]>:
>>This patch series improves the performance of read/write/erase operations
>>
>>on sdcards.
>>
>>
>>
>>This is done by increasing the maximum buffer size that is worked on.
>>
>>From 1 byte (master) to 512 bytes (commit 1-3) to larger than 512
>>
>>(adma commit).
>>
>>
>>
>>Testing on my system with fio I see the following rough performance
>>
>>values in MiB/s.
>>
>>
>>
>>              read write readwrite
>>
>>       master:   6     6     3/  3
>>
>> first commit:  51    43    23/ 23
>>
>>second commit: 392   180   144/143
>>
>>
>>
>>Tested on a 2GiB raw image with:
>>
>>  fio --filename=/dev/mmcblk0 --direct=1 --runtime=60 --time_based --bs=128k 
>> --rw={mode}
>>
>>
>>
>>The adma values are somewhat unstable but always >100MiB/s, I'm not sure
>>
>>why but I guess it has something to do with the host side caching.
>>
>>
>>
>>The fifth commit fixes the DATA_STAT_AFTER_ERASE bit in SCR and
>>
>>introduces an option to allow to erase blocks to 0x00.
>>
>>
>>
>>The sixth commit optimizes block erase when erase-blocks-as-zero=true
>>
>>is used, by passing the zeroing request down the to the block device.
>>
>>Erasing 2GiB now takes 0.1s instead of 26s.
>>
>>
>>
>>Signed-off-by: Christian Speich <[email protected]>
>>
>>
>>
>>I'm picking up this series with the changes indicated in v5 below. Please let
>>
>>me know how I could improve attribution to Christian in case I missed 
>>something.
>>
>>
>>
>>The last two patches are new and are small cleanups.
>>
>>
>>
>>---
>>
>>Changes in v5:
>>
>>- Rebase onto master
>>
>>- Split patch "hw/sd/sd: Use multi-byte/block writes for block path" into 
>>three
>>
>>  (first three patches)
>>
>>- Use sd_blk_{read,write} with additional parameter directly rather than 
>>having
>>
>>  sd_blk_{read,write}_bounce_buffer
>>
>>- Drive limits and write protect groups are preserved to be checked on block
>>
>>  boundaries only since these checks are redundant in case the SD host
>>
>>  transfers one byte at a time.
>>
>>- WP_VIOLATION is only raised once the first protected block shall be written,
>>
>>  rather than immediately at the beginning of a multiple block write which
>>
>>  starts with allowed blocks.
>>
>>- An off-by-one error has been fixed in the same case where one bye too less
>>
>>  had been written if a write protected block had been detected.
>>
>>- There are only two rather than three code paths each handling the multiple
>>
>>  block optimization.
>>
>
>Ping

Ping^2

>
>>
>>
>>Changes in v4:
>>
>>- Rebase onto master, no changes needed.
>>
>>- Renames:
>>
>>  - sd_blk_{read,write} -> sd_blk_{read,write}_bounce_buffer
>>
>>  - sd_blk_{read,write}_direct -> sd_blk_{read,write}
>>
>>  - to_erase -> erase_len
>>
>>- Extract erase logic into sd_blk_erase helper
>>
>>- Enable erase-blocks-as-zero by default. Add compat for 11.0 and below
>>
>>  to keep it disabled.
>>
>>- Add cleanup commit to update trace events.
>>
>>- Link to v3: 
>>https://lore.kernel.org/qemu-devel/[email protected]
>>
>>
>>
>>Changes in v3:
>>
>>- Rebase onto master, updating read/write path for newly added RBMP
>>
>>- Split up commit 1 into multiple commits
>>
>>  - change interface to allow "short" read/writes that are continued
>>
>>    by the core later by calling again
>>
>>- Link to v2: 
>>https://lore.kernel.org/qemu-devel/[email protected]
>>
>>
>>
>>Changes in v2:
>>
>>- Properly set DATA_STAT_AFTER_ERASE in SCR
>>
>>- Add erase-blocks-as-zero option to allow the user to switch between
>>
>>  0x00 and 0xFF for erased blocks.
>>
>>- Link to v1: 
>>https://lore.kernel.org/qemu-devel/[email protected]
>>
>>
>>
>>Bernhard Beschow (5):
>>
>>  hw/sd/sd: Transfer up to one block in case of multi-block commands
>>
>>  hw/sd/sd: Add buffer argument to sd_blk_{read,write}
>>
>>  hw/sd/sd: Use multi-byte/block writes for block path
>>
>>  hw/sd/sd: Retype state attribute to SDCardStates
>>
>>  hw/sd/sd: Remove unneeded forward declaration
>>
>>
>>
>>Christian Speich (3):
>>
>>  hw/sd/sdhci: Don't use bounce buffer for ADMA
>>
>>  hw/sd/sd: Add erase-blocks-as-zero option.
>>
>>  hw/sd/sd: Optimize erase blocks as zero.
>>
>>
>>
>> hw/core/machine.c |   1 +
>>
>> hw/sd/sd.c        | 230 ++++++++++++++++++++++++++++++++++------------
>>
>> hw/sd/sdhci.c     | 102 ++++++++++----------
>>
>> 3 files changed, 225 insertions(+), 108 deletions(-)
>>
>>
>>
>>-- >
>>2.56.0
>>
>>
>>

Reply via email to