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]

 



* Kumar, Purushotam <purushotam@xxxxxx> [080515 23:50]:
> 
> 
> > -----Original Message-----
> > From: kyungmin78@xxxxxxxxx [mailto:kyungmin78@xxxxxxxxx] On Behalf Of Kyungmin Park
> > Sent: Friday, May 16, 2008 6:34 AM
> > To: Felipe Balbi
> > Cc: Kumar, Purushotam; linux-omap-open-source@xxxxxxxxxxxxxx; Gole, Anant; linux-omap@xxxxxxxxxxxxxxx
> > Subject: Re: [PATCH] Performance enhancement for MMCSD when feature CONFIG_MMC_BLOCK_BOUNCE is
> > enabled in the MMC core
> >
> > 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;
> 
> 
> 
> In my test environment, write and Read speed without this patch was 2.6Mbytes/sec and 2.7Mbytes/sec respectively whereas write and read performance with this patch has jumped to 4.4Mbytes/sec and 5MBytes/sec, respectively. This testing has been done on SD Extreme III high speed 2GB SD card using FAT file system with help of dd command.
> 
> This patch is for OMAP35X and not for OMAP2420. In the case of OMAP2420, number of maximum phys_segs and hw_segs is set to 32 when CONFIG_MMC_BLOCK_BOUNCE is not enabled and so speeds are better in OMAP2420 even if CONFIG_MMC_BLOCK_BOUNCE is not defined. But in the case of OMAP35X, setting of 32 to phys_segs and hw_segs is not supported currently by OMAP35X mmc controller driver. It means that phys_segs and hw_segs has to be 1 for OMAP35X mmc controller driver and so this patch increases performance.

Purushotam, can you please refresh your patch so I can apply it?
It currently does not apply, and it's sent with MIME quoted-printable
encoding, and the description should be wrapped to look nice in git
logs.

Thanks,

Tony

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