Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp1616922ybv; Thu, 6 Feb 2020 07:02:40 -0800 (PST) X-Google-Smtp-Source: APXvYqwAMIikpNLqmvOONWGMBY/vfRuX8gFGOA1QSW1CMhGD61SmzznYBgp2FNMedC4avnsqdY3w X-Received: by 2002:a9d:6a06:: with SMTP id g6mr7974901otn.305.1581001360654; Thu, 06 Feb 2020 07:02:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1581001360; cv=none; d=google.com; s=arc-20160816; b=xFnrkpU5vzll78O4CTCMO+X48P1zpszQKvKhvWBNvUArM+sNsmPcfnNIAujLNJflXn pGQHT0O5WXcfjsBOc5zULOmlnhjVzEetTU4yWDtXSNU2ClwB9F808Yl5Q5Yp+UHbU0ky /9gbRqabtJOml11tgnTX3/AoQnxgsN3uMEpXeo1b/UmNiuUcavFbaTlzo+KfNssTgrRp acJvMuqgqpzaeeRwxuCC7visToniWrcOzxqOzsGLPe0uog2xTSSITElTMXG6WNrQf2i0 1YliG/uv62nDYTRZi8ouA25acfbRqUgomfGpzJHqD6ER2yT2DJG+J23q1FXwJQHjy6W8 oVDA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=5bn6Z0tEmYSYiP5ekRTcql1YRUrIf7ErEcnd7v1rFqs=; b=aByZi9XPoV1GxiPerMeH/UmZs0aj1vofAepJmvk0muYz7hJufRvKacmFRS0hMXqMYn 1SIoGGPaxZKAlt5592ZYOlRi3cEiUPCh6DwjO8O8ZFnryh98cgC2L+Vmuy4DH/bt7M43 RTyhPCy80pN4V1CbyP2lxKEVHXTyH5gQ7MODhZNcXgX0IXStqCwpp5DXHMSPcU8sY7hb gxYF0cFzIhc7Xxm8AssBP7QzKQp909H+mQE3K89jHOe4yEyxKtbq3bnnXUZGSgS8KHuM WxAhaSmOLm+2ilEvOXycb4lwtC6tci77630h6mQwnGrBtJ6U4MLOgPU+oIgG2tP8ggsi +Y8Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=ZTu7xjS4; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t22si2116078oth.211.2020.02.06.07.02.13; Thu, 06 Feb 2020 07:02:40 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=ZTu7xjS4; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727440AbgBFPAm (ORCPT + 99 others); Thu, 6 Feb 2020 10:00:42 -0500 Received: from mail-ua1-f68.google.com ([209.85.222.68]:44252 "EHLO mail-ua1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726744AbgBFPAm (ORCPT ); Thu, 6 Feb 2020 10:00:42 -0500 Received: by mail-ua1-f68.google.com with SMTP id a33so2342414uad.11 for ; Thu, 06 Feb 2020 07:00:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=5bn6Z0tEmYSYiP5ekRTcql1YRUrIf7ErEcnd7v1rFqs=; b=ZTu7xjS41E5rd7ZLWl4pHh3WIdZ8cMv8is5he7ZZaT1N8AZoYQ0vPcQSfP0I1rBcZL x/ARjTCZxr5agXVHUAGmeYGVfDi/3SwjGUg5aY9K/Gi9LV42pCWD+NLAZzo0mn7Z9xnm La/23kfbsg/jwKib5oWLQwy7Ym8oYaOHq8ivfHZA7srtdcse2HdKNr50hxPpSXllLwwd YGEM05tjqe+w/DQzYVw0KDXfu11soUd87apC1M+xDfzkZ+2tnekepvrPsBFWmSnnHO3E G5aTOiIo9utawIPz2X4sfmNV6h93PFTAgwL1YaA5QLDNYoZ8/JULkEf+94CDJJD5jKMe niPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=5bn6Z0tEmYSYiP5ekRTcql1YRUrIf7ErEcnd7v1rFqs=; b=lXGgS2VHroho/r/dODF9GnduEQ6Ath746snB0ccxwDIg7MRWAhtDLsm9+R5gI2eBUS U5HkrS6vsJdSY/lzRrgVrHVmpqGhLXI2lZrNyeUs3ib6oxGi2m+v95qNV1cqHP48dDh6 HFaTDFLJH2jjBBx2pAKgaybxK3iW/jsmJ5s6BhJdhMmv36pdsO1XG8JI2GUsKFWhp+xl CBBm20oc9pGix8ltpyIGIz3s31Gblck9CusmHMw4x5aqr+qJYeeOztwvrXC1C9CUtEuf q4TTzGr39bLEKaya/dufx+duRrYRfI0ZsgVNGd9PMWVPBn7kCavUa39Rxoa+ITIkmqJF 2qPw== X-Gm-Message-State: APjAAAUyTVwsl+o8UhTZXhoBDNkpd3Vd76I3etdC0woZiQ5ioJaUrunw Qy2hpX0XyWX9wGgVUKc73viyA/pQjDGv6m+gn1XW+Q== X-Received: by 2002:ab0:7802:: with SMTP id x2mr1853436uaq.100.1581001240406; Thu, 06 Feb 2020 07:00:40 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Ulf Hansson Date: Thu, 6 Feb 2020 16:00:04 +0100 Message-ID: Subject: Re: [PATCH v8 0/5] Add MMC software queue support To: Baolin Wang Cc: Adrian Hunter , Asutosh Das , Orson Zhai , Chunyan Zhang , Arnd Bergmann , Linus Walleij , Baolin Wang , "linux-mmc@vger.kernel.org" , Linux Kernel Mailing List Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, 5 Feb 2020 at 13:51, Baolin Wang wrote: > > Hi All, > > Now the MMC read/write stack will always wait for previous request is > completed by mmc_blk_rw_wait(), before sending a new request to hardware, > or queue a work to complete request, that will bring context switching > overhead, especially for high I/O per second rates, to affect the IO > performance. In the regular request path (non CQE), we call mmc_blk_card_busy() to complete a request. For write I/O, this leads to calling card_busy_detect(), which starts to poll the card by sending a CMD13. At least one CMD13 will be sent to the card, before we exit the polling loop and a new I/O request can get submitted. However, in many cases, depending on the controller/host/card/request-size, my best guess is that *one* CMD13 might not be sufficient. At least, that is what I have observed on those platforms I recently have been working on. That said, I am wondering if you have done some measurement/profiling on this particular behaviour for your controller/driver? For example, how many CMD13 gets sent for random small writes during polling? Why am I asking this? Because, unless I am mistaken, when using the new hsq path that you introduce in $subject series, based on the cqe ops, then mmc_blk_card_busy() is not being called at all. In other words, you rely on HW busy detection from the controller/driver, rather than polling with CMD13. Is that correct? This seems like an additional reason to why you achieve significant improvements for the random write case. Don't you think? > > Thus this patch set will introduce the MMC software command queue support > based on command queue engine's interfaces, and set the queue depth as 64 > to allow more requests can be be prepared, merged and inserted into IO > scheduler, but we only allow 2 requests in flight, that is enough to let > the irq handler always trigger the next request without a context switch, > as well as avoiding a long latency. > > Moreover we can expand the MMC software queue interface to support > MMC packed request or packed command instead of adding new interfaces, > according to previosus discussion. > > Below are some comparison data with fio tool. The fio command I used > is like below with changing the '--rw' parameter and enabling the direct > IO flag to measure the actual hardware transfer speed in 4K block size. > > ./fio --filename=/dev/mmcblk0p30 --direct=1 --iodepth=20 --rw=read --bs=4K --size=1G --group_reporting --numjobs=20 --name=test_read > > My eMMC card working at HS400 Enhanced strobe mode: > [ 2.229856] mmc0: new HS400 Enhanced strobe MMC card at address 0001 > [ 2.237566] mmcblk0: mmc0:0001 HBG4a2 29.1 GiB > [ 2.242621] mmcblk0boot0: mmc0:0001 HBG4a2 partition 1 4.00 MiB > [ 2.249110] mmcblk0boot1: mmc0:0001 HBG4a2 partition 2 4.00 MiB > [ 2.255307] mmcblk0rpmb: mmc0:0001 HBG4a2 partition 3 4.00 MiB, chardev (248:0) > > 1. Without MMC software queue > I tested 5 times for each case and output a average speed. > > 1) Sequential read: > Speed: 59.4MiB/s, 63.4MiB/s, 57.5MiB/s, 57.2MiB/s, 60.8MiB/s > Average speed: 59.66MiB/s > > 2) Random read: > Speed: 26.9MiB/s, 26.9MiB/s, 27.1MiB/s, 27.1MiB/s, 27.2MiB/s > Average speed: 27.04MiB/s > > 3) Sequential write: > Speed: 71.6MiB/s, 72.5MiB/s, 72.2MiB/s, 64.6MiB/s, 67.5MiB/s > Average speed: 69.68MiB/s > > 4) Random write: > Speed: 36.3MiB/s, 35.4MiB/s, 38.6MiB/s, 34MiB/s, 35.5MiB/s > Average speed: 35.96MiB/s > > 2. With MMC software queue > I tested 5 times for each case and output a average speed. > > 1) Sequential read: > Speed: 59.2MiB/s, 60.4MiB/s, 63.6MiB/s, 60.3MiB/s, 59.9MiB/s > Average speed: 60.68MiB/s > > 2) Random read: > Speed: 31.3MiB/s, 31.4MiB/s, 31.5MiB/s, 31.3MiB/s, 31.3MiB/s > Average speed: 31.36MiB/s > > 3) Sequential write: > Speed: 71MiB/s, 71.8MiB/s, 72.3MiB/s, 72.2MiB/s, 71MiB/s > Average speed: 71.66MiB/s > > 4) Random write: > Speed: 68.9MiB/s, 68.7MiB/s, 68.8MiB/s, 68.6MiB/s, 68.8MiB/s > Average speed: 68.76MiB/s > > Form above data, we can see the MMC software queue can help to improve some > performance obviously for random read and write, though no obvious improvement > for sequential read and write. > > Any comments are welcome. Thanks a lot. > > Changes from v7: > - Add reviewed tag from Arnd. > - Use the 'hsq' acronym for varibles and functions in the core layer. > - Check the 'card->ext_csd.cmdq_en' in cqhci.c to make sure the CQE > can work normally. > - Add a new patch to enable the host software queue for the SD card. > - Use the default MMC queue depth for host software queue. It would be nice to also have some measurements for an SD card, now that the series supports this. Is that possible for you test as well? [...] Kind regards Uffe