Re: [IPsec] Discussion of draft-pwouters-ipsecme-multi-sa-performance

Paul Wouters <paul@nohats.ca> Mon, 17 October 2022 21:46 UTC

Return-Path: <paul@nohats.ca>
X-Original-To: ipsec@ietfa.amsl.com
Delivered-To: ipsec@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id A8BC7C1524A1 for <ipsec@ietfa.amsl.com>; Mon, 17 Oct 2022 14:46:10 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -7.105
X-Spam-Level:
X-Spam-Status: No, score=-7.105 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_HI=-5, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01, URIBL_BLOCKED=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=nohats.ca
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 jrrV6ObkJ_2H for <ipsec@ietfa.amsl.com>; Mon, 17 Oct 2022 14:46:06 -0700 (PDT)
Received: from mx.nohats.ca (mx.nohats.ca [IPv6:2a03:6000:1004:1::85]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 69D20C1522C0 for <ipsec@ietf.org>; Mon, 17 Oct 2022 14:46:06 -0700 (PDT)
Received: from localhost (localhost [IPv6:::1]) by mx.nohats.ca (Postfix) with ESMTP id 4MrrCb3dh2z40F; Mon, 17 Oct 2022 23:46:03 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nohats.ca; s=default; t=1666043163; bh=xWR80EzKcOmm7atl6Ek3DU/lMoTbmiYP4avX/bdIJAA=; h=Date:From:To:cc:Subject:In-Reply-To:References; b=Gjl7xZfSL+uwbyCm0NgXnCryF6jvrysd/236rLH0jZJUvJRb/nVn3xJyVhXPXXfpS jyxuAvz7alQphz5Wqg+UW7jY6aQ4qoEjGbit5SgRr2PvouLJ8hGErFQuJvbIlGFBI8 mGextLyDxtyZcfmO1Qvt3Ti1dJ+9051++CBL9GSk=
X-Virus-Scanned: amavisd-new at mx.nohats.ca
Received: from mx.nohats.ca ([IPv6:::1]) by localhost (mx.nohats.ca [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id tHH8w3YQuOHQ; Mon, 17 Oct 2022 23:46:02 +0200 (CEST)
Received: from bofh.nohats.ca (bofh.nohats.ca [193.110.157.194]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx.nohats.ca (Postfix) with ESMTPS; Mon, 17 Oct 2022 23:46:02 +0200 (CEST)
Received: by bofh.nohats.ca (Postfix, from userid 1000) id 312E93F6310; Mon, 17 Oct 2022 17:46:01 -0400 (EDT)
Received: from localhost (localhost [127.0.0.1]) by bofh.nohats.ca (Postfix) with ESMTP id 2DEE33F630F; Mon, 17 Oct 2022 17:46:01 -0400 (EDT)
Date: Mon, 17 Oct 2022 17:46:01 -0400
From: Paul Wouters <paul@nohats.ca>
To: Valery Smyslov <smyslov.ietf@gmail.com>
cc: 'Steffen Klassert' <steffen.klassert@secunet.com>, 'IPsecME WG' <ipsec@ietf.org>
In-Reply-To: <03ca01d8e232$3bbace10$b3306a30$@gmail.com>
Message-ID: <3c58c2e0-f022-15fb-2ebb-658fa51275a6@nohats.ca>
References: <15eb01d8dd7e$fdf158e0$f9d40aa0$@gmail.com> <20221014111548.GJ2602992@gauss3.secunet.de> <03ca01d8e232$3bbace10$b3306a30$@gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="US-ASCII"; format="flowed"
Archived-At: <https://mailarchive.ietf.org/arch/msg/ipsec/FsZUVC4-eY4x9zoI-0n3cYUxy2o>
Subject: Re: [IPsec] Discussion of draft-pwouters-ipsecme-multi-sa-performance
X-BeenThere: ipsec@ietf.org
X-Mailman-Version: 2.1.39
Precedence: list
List-Id: Discussion of IPsec protocols <ipsec.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/ipsec>, <mailto:ipsec-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/ipsec/>
List-Post: <mailto:ipsec@ietf.org>
List-Help: <mailto:ipsec-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/ipsec>, <mailto:ipsec-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 17 Oct 2022 21:46:10 -0000

On Mon, 17 Oct 2022, Valery Smyslov wrote:

> implementation with say 10 CPUs. Does it make any difference for this implementation
> If it receives CPU_QUEUES with 100 or with 1000? It seems to me that in both cases
> it will follow its own local policy for limiting the number of per-CPU SAs,
> most probably capping it to 10.

That would be a mistake. You always want to allow a few more than the
CPUs you have. The maximum is mostly to protect against DoS attacks.
If you only have 10 CPUs, but the other end has 50, there shouldn't
be much issue to install 50 SA's. Not sure if we said so in the draft,
but you could even omit installing 40 of the outgoing SA's since you
would never be expected to use them anyway. but you have to install all
50 incoming ones because the peer might use them.

> Or do you want to say that the logic would
> be: well my peer has 1000 CPUs, it's not good for me to have more than 10,
> but let's be friendly and install 100, so that both of us are suffer...

At that point, it really also matters what the differences are between
the CPUs. An embedded device with 4 cpus at 800mhz vs a mega supercomputer
with 250 5ghz cpus. Already, counting CPUs is an approximation. Already,
the application needs proper threading to use multiple CPUs without a
single CPU bottleneck at the application layer. There might very well be
situations where multi-sa doesn't really help you at all.

But the simple use case is clear. I have a database cluster of 10 nodes
talking to eachother with lots of CPUs and most are idle because I have
one fully loaded CPU because my SA is bound to one CPU only.

> I don't think this logic is credible in real life, but even in this case
> there is already a mechanism that allows to limit the number of
> per-CPU SAs - it is the TS_MAX_QUEUE notify.

> So why we need CPU_QUEUES?

TS_MAX_QUEUE is conveying an irrecoverable error condition. It should
never happen. Where as CPU_QUEUES tells you how many per-CPU child SAs
you can do. This is meant to reduce the number of in-flight CREATE_CHILD_SA's
that will never become successful.

>>> I'm also not convinced that CPU_QUEUE_INFO is really needed, it mostly exists
>>> for debugging purposes (again if we get rid of Fallback SA). And I don't think we need
>>> a new error notify TS_MAX_QUEUE, I believe TS_UNACCEPTABLE can be used instead.

We did it to distinquish between "too many of the same child sa" versus
other errors in cases of multiple subnets / child SAs under the same IKE
peer. Rethinking it, I am no longer able to reproduce why we think it
was required :)

>>> there is no SA, this CPU requests IKE to create one for it. Meanwhile,
>>> the packet triggered this action can be 1) dropped 2) retained waiting for the SA to be ready
>>> or 3) re-steered to the CPU that already has an appropriate SA (it is indicated in the stub entry).
>>
>> On a preemptive system, the scheduler might migrate applications
>> from one cpu to another from time to time. So 1 and 2 are IMO not
>> appropriate as the application would stuck until a SA is created.
>> 3 has its own problems as discussed in the other mail.
>
> OK, but also see my considerations there.

The idea of the fallback SA is that you always have at least one child
SA guaranteed to be up that can encrypt and send a packet. It can be
installed to not be per-CPU. It's a guarantee that you will never need
to wait (and cache?) 1 RTT's time worth of packets, which can be a lot
of packets. You don't want dynamic resteering. Just have the fallback
SA "be ready" in case there is no per-cpu SA.

> I think it depends. I'd like to see optimization efforts to influence
> the protocol as less as possible. Ideally this should be local matter
> for implementations. This would allow them to interoperate
> with unsupporting implementations (and even to benefit from
> multi-SAs even in these situations).

Those that don't support this don't see notifies ? Or do you mean to
somehow install multiple SA's for the same thing on "unsupported"
systems? The problem currently is that when an identical child SA
is successfully negotiated, implementations differ on what they do.
Some allow this, some delete the older one. The goal of this draft
is to make the desire for multple idential child SAs very explicit.

Paul