[bmwg] Question regarding the updating of RFC 2544 with the usage of pseudorandom IP addresses

Gabor LENCSE <lencse@hit.bme.hu> Sun, 01 October 2023 15:54 UTC

Return-Path: <lencse@hit.bme.hu>
X-Original-To: bmwg@ietfa.amsl.com
Delivered-To: bmwg@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id D01F7C151062 for <bmwg@ietfa.amsl.com>; Sun, 1 Oct 2023 08:54:28 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -6.907
X-Spam-Level:
X-Spam-Status: No, score=-6.907 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_HI=-5, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001] autolearn=ham autolearn_force=no
Received: from mail.ietf.org ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id XiBzYHOg5Arm for <bmwg@ietfa.amsl.com>; Sun, 1 Oct 2023 08:54:24 -0700 (PDT)
Received: from frogstar.hit.bme.hu (frogstar.hit.bme.hu [IPv6:2001:738:2001:4020::2c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 5FC3EC14CF17 for <bmwg@ietf.org>; Sun, 1 Oct 2023 08:54:23 -0700 (PDT)
Received: from [192.168.0.100] (host-79-121-41-73.kabelnet.hu [79.121.41.73]) (authenticated bits=0) by frogstar.hit.bme.hu (8.17.1/8.17.1) with ESMTPSA id 391FsABu089987 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NO) for <bmwg@ietf.org>; Sun, 1 Oct 2023 17:54:16 +0200 (CEST) (envelope-from lencse@hit.bme.hu)
X-Authentication-Warning: frogstar.hit.bme.hu: Host host-79-121-41-73.kabelnet.hu [79.121.41.73] claimed to be [192.168.0.100]
Content-Type: multipart/alternative; boundary="------------khxQmY40hCOapouuAynNThXm"
Message-ID: <7f08f3fd-732c-9495-f100-559020f622a7@hit.bme.hu>
Date: Sun, 01 Oct 2023 17:54:05 +0200
MIME-Version: 1.0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1
Content-Language: en-US
To: "bmwg@ietf.org" <bmwg@ietf.org>
From: Gabor LENCSE <lencse@hit.bme.hu>
X-Virus-Scanned: clamav-milter 0.103.8 at frogstar.hit.bme.hu
X-Virus-Status: Clean
Received-SPF: pass (frogstar.hit.bme.hu: authenticated connection) receiver=frogstar.hit.bme.hu; client-ip=79.121.41.73; helo=[192.168.0.100]; envelope-from=lencse@hit.bme.hu; x-software=spfmilter 2.001 http://www.acme.com/software/spfmilter/ with libspf2-1.2.11;
X-DCC-debian-Metrics: frogstar.hit.bme.hu; whitelist
X-Scanned-By: MIMEDefang 2.86 on 152.66.248.44
Archived-At: <https://mailarchive.ietf.org/arch/msg/bmwg/K4NjNh4_OQW0k5nj9mh4joKMrCc>
Subject: [bmwg] Question regarding the updating of RFC 2544 with the usage of pseudorandom IP addresses
X-BeenThere: bmwg@ietf.org
X-Mailman-Version: 2.1.39
Precedence: list
List-Id: Benchmarking Methodology Working Group <bmwg.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/bmwg>, <mailto:bmwg-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/bmwg/>
List-Post: <mailto:bmwg@ietf.org>
List-Help: <mailto:bmwg-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/bmwg>, <mailto:bmwg-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sun, 01 Oct 2023 15:54:28 -0000

Dear BMWG Members,

Previously I have consulted with the BMWG chairs about the following 
issue and they recommended that I should bring this question to the 
mailing list.

I have encountered with the following issue regarding the benchmarking 
of the packet forwarding performance of routers.

1. RFC 2544 defined a test frame format using fixed IP addresses and 
port numbers: 
https://datatracker.ietf.org/doc/html/rfc2544#appendix-C.2.6.4 (Some old 
network performance testers literally follow the above test frame format 
and they send always the very same test frames.)

2. As time passed by, it became common that routers have multiple 
processing units. (E.g., when a router is implemented by a Linux server, 
it is common that is has 32 or even more CPU cores.) Internet traffic 
contains multiple IP addresses and port numbers and RSS (Receive-Side 
Scaling) uses their entropy to distribute the traffic among the 
processing units.

3. To keep up with the development of the network interconnect devices, 
RFC 4814 recommended the usage of pseudorandom port numbers (using 
uniform distribution over well defined wide ranges): 
https://datatracker.ietf.org/doc/html/rfc4814#section-4.5

Unless multiple destination networks are used, it means that Testers use 
a single IP address pair (e.g. 198.18.0.2 and 198.19.0.2) and a high 
number of pseudorandom source and destination port numbers from the 
ranges recommended by RFC 4814.

In practice, this solution sometimes works well, sometimes not. For 
example, Under Debian Linux (at least from version 9 to version 11), the 
default setting of the RSS is that only the source IP address and 
destination IP address are included in the tuple for hashing.

root@dut:~# ethtool -n eno1 rx-flow-hash udp4
UDP over IPV4 flows use these fields for computing Hash flow key:
IP SA
IP DA

With these settings, the usage of pseudorandom port numbers is 
absolutely useless. However, one can set RSS so that the port number are 
also included in the tuple for hashing:

root@dut:~# ethtool -N eno1 rx-flow-hash udp4 sdfn
root@dut:~# ethtool -n eno1 rx-flow-hash udp4
UDP over IPV4 flows use these fields for computing Hash flow key:
IP SA
IP DA
L4 bytes 0 & 1 [TCP/UDP src port]
L4 bytes 2 & 3 [TCP/UDP dst port]

With the latter settings, the usage of _a single IP address pair and 
pseudorandom port numbers_ works perfectly.

Under OpenBSD, the default behavior is the same (RSS considers only IP 
addresses), but there is no such tool that could be used to change it to 
use also the port numbers: 
https://marc.info/?l=openbsd-misc&m=166581934723445&w=2 
<https://marc.info/?l=openbsd-misc&m=166581934723445&w=2>

It means that pseudorandom port numbers do not help. This RSS 
implementation would require the usage of _pseudorandom IP addresses_.

My suggestion is that we should update RFC 2544 (and RFC 5180 regarding 
IPv6) to support the usage of multiple, pseudorandom IP addresses in a 
similar manner as it was recommended regarding the port numbers by RFC 4814.

I have specific suggestions, and also working code: I have implemented 
the usage of pseudorandom IP addresses in the latest version of 
siitperf: https://github.com/lencsegabor/siitperf

I am planning to submit and Internet Draft about my recommendation, but 
before that I would like to know your opinion.

Do you find this idea meaningful?

It is also an important question, how the different router 
implementations behave. If there are several RSS implementations that 
use only the IP addresses (and not the port numbers) for hashing, then, 
IMHO, it is worth working on this update. However, if OpenBSD is the 
only such exception, then perhaps not.

So, please write me back if you have some knowledge about how commercial 
routers implement RSS.

Thank you very much for your feedback in advance!

Best regards,

Gábor