Re: [PATCH] Performance enhancement for MMCSD when feature CONFIG_MMC_BLOCK_BOUNCE is enabled in the MMC core

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

 



Hi,

On Thu, May 15, 2008 at 10:30 PM, Felipe Balbi
<felipebalbi@xxxxxxxxxxxxxxxxxxxxx> wrote:
> Hi,
>
> this list moved to linux-omap@xxxxxxxxxxxxxxx ;-)
>
> On Thu, May 15, 2008 at 4:25 PM, Kumar, Purushotam <purushotam@xxxxxx> wrote:
>> This patch will increase performance significantly. In my testing with a SD Extreme III high speed 2GB SD card using FAT file system on OMAP35X TI EVM, write speed has improved by 2x whereas read speed has improved by 3 times for MMCSD when CONFIG_MMC_BLOCK_BOUNCE is enabled.  It is supposed that larger/bounce buffers will be used by mmc core if CONFIG_MMC_BLOCK_BOUNCE is defined. But, in the mmc core, size of buffer is set to mmc->max_req_size if mmc->max_req_size is smaller than MMC_QUEUE_BOUNCESZ i.e. bounce buffer size (which is 64KB). By default, mmc->max_req_size is set to 4K. So, buffers of 4K will be used instead of 64K even if CONFIG_MMC_BLOCK_BOUNCE is defined without this patch. This patches forces mmc core to use bounce buffer of size MMC_QUEUE_BOUNCESZ and so performance is increased.
>>
>> Signed-off-by: Purushotam Kumar <purushotam@xxxxxx>
>> ---
>> Index: linux-omap-2.6/drivers/mmc/host/omap_hsmmc.c
>> ===================================================================
>> --- linux-omap-2.6.orig/drivers/mmc/host/omap_hsmmc.c
>> +++ linux-omap-2.6/drivers/mmc/host/omap_hsmmc.c
>> @@ -782,6 +782,15 @@ static int __init omap_mmc_probe(struct
>>                else
>>                        host->dbclk_enabled = 1;
>>
>> +#ifdef CONFIG_MMC_BLOCK_BOUNCE
>> +       mmc->max_phys_segs = 1;
>> +       mmc->max_hw_segs = 1;
>> +#endif
>> +       mmc->max_blk_size = 512;       /* Block Length at max can be 1024 */
>> +       mmc->max_blk_count = 0xFFFF;    /* No. of Blocks is 16 bits */
>> +       mmc->max_req_size = mmc->max_blk_size * mmc->max_blk_count;
>> +       mmc->max_seg_size = mmc->max_req_size;
>> +
>>        mmc->ocr_avail = mmc_slot(host).ocr_mask;
>>        mmc->caps |= MMC_CAP_MULTIWRITE | MMC_CAP_MMC_HIGHSPEED |
>>                                MMC_CAP_SD_HIGHSPEED;
>
> Do you have any measurements results to share :-p
>

similar ways omap.c does, but it's almost same or degraded.
It was tested on apollon (OMAP2420)

Thank you,
Kyungmin Park

# iozone -A -s 128m -q 256k -U /mmc -f /mmc/test -e

% before
131072       4    3014    2317     6577     6575
131072       8    2918    2702     6577     6568
131072      16    2895    2287     6560     6556
131072      32    2839    2430     6567     6551
131072      64    2929    2688     6548     6545
131072     128   2956    2534     6572     6565
131072     256    2861    2356     6571     6569

% after
131072       4    2917    2784     6383     6379
131072       8    2806    2615     6377     6397
131072      16    2834    2953     6383     6379
131072      32    2844    2492     6376     6375
131072      64    2976    2625     6395     6379

Here's patch

diff --git a/drivers/mmc/host/omap.c b/drivers/mmc/host/omap.c
index 549517c..a0c0d38 100644
--- a/drivers/mmc/host/omap.c
+++ b/drivers/mmc/host/omap.c
@@ -1332,12 +1335,17 @@ static int __init mmc_omap_new_slot(struct mmc_omap_host
                mmc->f_max = min(host->pdata->max_freq, mmc->f_max);
        mmc->ocr_avail = slot->pdata->ocr_mask;

+#ifdef CONFIG_MMC_BLOCK_BOUNCE
+       mmc->max_phys_segs = 1;
+       mmc->max_hw_segs = 1;
+#else
        /* Use scatterlist DMA to reduce per-transfer costs.
         * NOTE max_seg_size assumption that small blocks aren't
         * normally used (except e.g. for reading SD registers).
         */
        mmc->max_phys_segs = 32;
        mmc->max_hw_segs = 32;
+#endif
        mmc->max_blk_size = 2048;       /* BLEN is 11 bits (+1) */
        mmc->max_blk_count = 2048;      /* NBLK is 11 bits (+1) */
        mmc->max_req_size = mmc->max_blk_size * mmc->max_blk_count;
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux