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

>
>
>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