Netdev List
 help / color / mirror / Atom feed
From: Nilay Shroff <nilay@linux.ibm.com>
To: Geliang Tang <geliang@kernel.org>,
	Keith Busch <kbusch@kernel.org>, Jens Axboe <axboe@kernel.dk>,
	Christoph Hellwig <hch@lst.de>, Sagi Grimberg <sagi@grimberg.me>,
	Chaitanya Kulkarni <kch@nvidia.com>,
	Matthieu Baerts <matttbe@kernel.org>,
	Mat Martineau <martineau@kernel.org>,
	"David S. Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	Simon Horman <horms@kernel.org>, Shuah Khan <shuah@kernel.org>
Cc: Geliang Tang <tanggeliang@kylinos.cn>,
	linux-nvme@lists.infradead.org, netdev@vger.kernel.org,
	mptcp@lists.linux.dev, linux-kselftest@vger.kernel.org,
	Hannes Reinecke <hare@suse.de>,
	John Meneghini <jmeneghi@redhat.com>,
	Randy Jennings <randyj@purestorage.com>,
	zhenwei pi <zhenwei.pi@linux.dev>, Hui Zhu <zhuhui@kylinos.cn>,
	Gang Yan <yangang@kylinos.cn>
Subject: Re: [PATCH 11/11] selftests: mptcp: nvme: add iopolicy tests
Date: Sun, 31 May 2026 19:34:07 +0530	[thread overview]
Message-ID: <d23bcec0-70e6-484b-8c41-0174d1b5d09d@linux.ibm.com> (raw)
In-Reply-To: <51f054a6a573b9a771ed927eef34fa5ca083d009.1779934709.git.tanggeliang@kylinos.cn>

On 5/28/26 8:40 AM, Geliang Tang wrote:
> From: Geliang Tang<tanggeliang@kylinos.cn>
> 
> Add NVMe iopolicy testing to mptcp_nvme.sh, with the default set to
> "numa". It can be set to "round-robin" or "queue-depth".
> 
> Test results with 4 NVMe multipath paths and round-robin iopolicy show
> that TCP and MPTCP achieve similar bandwidth:
> 
>   # ./mptcp_nvme.sh tcp 4 round-robin
>     READ: bw=455MiB/s (478MB/s), 455MiB/s-455MiB/s (478MB/s-478MB/s),
> 		io=4665MiB (4891MB), run=10242-10242msec
>    WRITE: bw=455MiB/s (477MB/s), 455MiB/s-455MiB/s (477MB/s-477MB/s),
> 		io=4633MiB (4858MB), run=10184-10184msec
> 
>   # ./mptcp_nvme.sh mptcp 4 round-robin
>     READ: bw=445MiB/s (466MB/s), 445MiB/s-445MiB/s (466MB/s-466MB/s),
> 		io=4575MiB (4797MB), run=10287-10287msec
>    WRITE: bw=445MiB/s (467MB/s), 445MiB/s-445MiB/s (467MB/s-467MB/s),
> 		io=4572MiB (4794MB), run=10267-10267msec
> 
> A "loss" argument is added to simulate network packet loss. When loss=1,
> each veth interface is configured with "delay 5ms loss 0.5%" using tc
> qdisc. Under this scenario, TCP performance is reduced by multiples
> compared to MPTCP:
> 
>   # ./mptcp_nvme.sh tcp 4 round-robin 1
>     READ: bw=144MiB/s (151MB/s), 144MiB/s-144MiB/s (151MB/s-151MB/s),
> 		io=1909MiB (2001MB), run=13231-13231msec
>    WRITE: bw=100.0MiB/s (105MB/s), 100.0MiB/s-100.0MiB/s (105MB/s-105MB/s),
> 		io=1397MiB (1465MB), run=13980-13980msec
> 
>   # ./mptcp_nvme.sh mptcp 4 round-robin 1
>     READ: bw=428MiB/s (449MB/s), 428MiB/s-428MiB/s (449MB/s-449MB/s),
> 		io=4524MiB (4743MB), run=10564-10564msec
>    WRITE: bw=431MiB/s (452MB/s), 431MiB/s-431MiB/s (452MB/s-452MB/s),
> 		io=4513MiB (4732MB), run=10481-10481msec
> 
> These results demonstrate that MPTCP has better resilience against
> packet loss compared to TCP, as it can leverage multiple subflows to
> mitigate network degradation.

There are a few observations I'd like to raise:

1. It is difficult to reason about the throughput results when NVMe native
    multipath is enabled together with MPTCP. In this topology, four NVMe paths
    are created and the round-robin I/O policy is configured. As a result, each
    I/O first goes through the NVMe multipath scheduler, which selects a path,
    and is then further subjected to the MPTCP scheduler, which selects a TCP
    subflow. This means there are two independent schedulers influencing I/O
    placement, making it difficult to attribute the observed throughput
    improvements to either NVMe multipath or MPTCP.

    For throughput comparisons, it may be more meaningful to disable NVMe native
    multipath (e.g., modprobe nvme_core multipath=n) when testing MPTCP. This would
    ensure that all I/O is sent through a single NVMe/TCP path while allowing MPTCP
    alone to distribute traffic across available subflows. Such a setup would
    provide a clearer comparison between TCP and MPTCP.

2. The current test uses only a 128 KiB I/O size. It would be useful to include
    additional I/O sizes as well, such as 4 KiB, 8 KiB, and 32 KiB, since MPTCP and
    NVMe multipath may behave differently under different workload characteristics.

3. The fio runtime is only 10 seconds, which is relatively short for performance
    evaluation. The results may be influenced by startup transients and may not
    accurately reflect steady-state behavior. It would be preferable to run the tests
    for a longer duration, for example 120 seconds, to obtain more stable measurements.

4. The tests are run on the same host by setting up veth interfaces and running
    host and target under different network namespaces. It'd be useful if you could
    run this tests between real host and target systems.

Thanks,
--Nilay


  reply	other threads:[~2026-05-31 14:05 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-28  3:10 [PATCH 00/11] NVMe over MPTCP Geliang Tang
2026-05-28  3:10 ` [PATCH 01/11] nvmet-tcp: define accept tcp_proto struct Geliang Tang
2026-05-28  3:10 ` [PATCH 02/11] nvmet-tcp: implement accept mptcp proto Geliang Tang
2026-05-28 15:23   ` Jakub Kicinski
2026-05-29 14:20     ` Geliang Tang
2026-07-29  5:17       ` Geliang Tang
2026-05-31 14:56   ` Nilay Shroff
2026-05-28  3:10 ` [PATCH 03/11] nvmet-tcp: define listen socket ops Geliang Tang
2026-05-28  3:10 ` [PATCH 04/11] nvmet-tcp: register target mptcp transport Geliang Tang
2026-05-28  3:10 ` [PATCH 05/11] nvmet-tcp: implement mptcp listen socket ops Geliang Tang
2026-05-31 15:01   ` Nilay Shroff
2026-05-28  3:10 ` [PATCH 06/11] nvme-fabrics: compare transport in ip_options_match Geliang Tang
2026-05-28  3:10 ` [PATCH 07/11] nvme-tcp: define host tcp_proto struct Geliang Tang
2026-05-28  3:10 ` [PATCH 08/11] nvme-tcp: register host mptcp transport Geliang Tang
2026-05-28  3:10 ` [PATCH 09/11] nvme-tcp: implement host mptcp proto Geliang Tang
2026-05-31 15:08   ` Nilay Shroff
2026-05-28  3:10 ` [PATCH 10/11] selftests: mptcp: add nvme over mptcp test Geliang Tang
2026-05-28  3:10 ` [PATCH 11/11] selftests: mptcp: nvme: add iopolicy tests Geliang Tang
2026-05-31 14:04   ` Nilay Shroff [this message]
2026-05-31 14:50     ` Nilay Shroff
2026-05-28  8:42 ` [PATCH 00/11] NVMe over MPTCP Christoph Hellwig
2026-05-29 14:31   ` Geliang Tang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=d23bcec0-70e6-484b-8c41-0174d1b5d09d@linux.ibm.com \
    --to=nilay@linux.ibm.com \
    --cc=axboe@kernel.dk \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=geliang@kernel.org \
    --cc=hare@suse.de \
    --cc=hch@lst.de \
    --cc=horms@kernel.org \
    --cc=jmeneghi@redhat.com \
    --cc=kbusch@kernel.org \
    --cc=kch@nvidia.com \
    --cc=kuba@kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-nvme@lists.infradead.org \
    --cc=martineau@kernel.org \
    --cc=matttbe@kernel.org \
    --cc=mptcp@lists.linux.dev \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=randyj@purestorage.com \
    --cc=sagi@grimberg.me \
    --cc=shuah@kernel.org \
    --cc=tanggeliang@kylinos.cn \
    --cc=yangang@kylinos.cn \
    --cc=zhenwei.pi@linux.dev \
    --cc=zhuhui@kylinos.cn \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox