From: Sergey Ryazanov <ryazanov.s.a@gmail.com>
To: Sabrina Dubroca <sd@queasysnail.net>,
Antonio Quartulli <antonio@openvpn.net>
Cc: Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Donald Hunter <donald.hunter@gmail.com>,
Shuah Khan <shuah@kernel.org>, Andrew Lunn <andrew@lunn.ch>,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-kselftest@vger.kernel.org
Subject: Re: [PATCH net-next v11 06/23] ovpn: introduce the ovpn_peer object
Date: Wed, 13 Nov 2024 03:37:13 +0200 [thread overview]
Message-ID: <e543a3de-44f1-4a2d-90ef-1786e222f0d8@gmail.com> (raw)
In-Reply-To: <ZzORATd5hG614dta@hog>
On 12.11.2024 19:31, Sabrina Dubroca wrote:
> 2024-11-10, 15:38:27 +0200, Sergey Ryazanov wrote:
>> On 29.10.2024 12:47, Antonio Quartulli wrote:
>>> An ovpn_peer object holds the whole status of a remote peer
>>> (regardless whether it is a server or a client).
>>>
>>> This includes status for crypto, tx/rx buffers, napi, etc.
>>>
>>> Only support for one peer is introduced (P2P mode).
>>> Multi peer support is introduced with a later patch.
>>
>> Reviewing the peer creation/destroying code I came to a generic question.
>> Did you consider keeping a single P2P peer in the peers table as well?
>>
>> Looks like such approach can greatly simply the code by dropping all these
>> 'switch (ovpn->mode)' checks and implementing a unified peer management. The
>> 'peer' field in the main private data structure can be kept to accelerate
>> lookups, still using peers table for management tasks like removing all the
>> peers on the interface teardown.
>
> It would save a few 'switch(mode)', but force every client to allocate
> the hashtable for no reason at all. That tradeoff doesn't look very
> beneficial to me, the P2P-specific code is really simple. And if you
> keep ovpn->peer to make lookups faster, you're not removing that many
> 'switch(mode)'.
Looking at the done review, I can retrospectively conclude that I
personally do not like short 'switch' statements and special handlers :)
Seriously, this module has a highest density of switches per KLOC from
what I have seen before and a major part of it dedicated to handle the
special case of P2P connection. What together look too unusual, so it
feels like a flaw in the design. I racked my brains to come up with a
better solution and failed. So I took a different approach, inviting
people to discuss item pieces of the code to find a solution
collectively or to realize that there is no better solution for now.
The problem is that all these hash tables become inefficient with the
single entry (P2P case). I was thinking about allocating a table with a
single bin, but it still requires hash function run to access the
indexed entry.
And back to the hashtable(s) size for the MP mode. 8k-bins table looks a
good choice for a normal server with 1-2Gb uplink serving up to 1k
connections. But it sill unclear, how this choice can affect
installations with a bigger number of connections? Or is this module
applicable for embedded solutions? E.g. running a couple of VPN servers
on a home router with a few actual connections looks like a waste of
RAM. I was about to suggest to use rhashtable due to its dynamic sizing
feature, but the module needs three tables. Any better idea?
--
Sergey
next prev parent reply other threads:[~2024-11-13 1:36 UTC|newest]
Thread overview: 117+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-29 10:47 [PATCH net-next v11 00/23] Introducing OpenVPN Data Channel Offload Antonio Quartulli
2024-10-29 10:47 ` [PATCH net-next v11 01/23] netlink: add NLA_POLICY_MAX_LEN macro Antonio Quartulli
2024-10-29 10:47 ` [PATCH net-next v11 02/23] net: introduce OpenVPN Data Channel Offload (ovpn) Antonio Quartulli
2024-11-06 0:31 ` Sergey Ryazanov
2024-11-15 9:56 ` Antonio Quartulli
2024-11-19 1:49 ` Sergey Ryazanov
2024-10-29 10:47 ` [PATCH net-next v11 03/23] ovpn: add basic netlink support Antonio Quartulli
2024-11-08 23:15 ` Sergey Ryazanov
2024-11-15 10:05 ` Antonio Quartulli
2024-11-19 2:05 ` Sergey Ryazanov
2024-11-19 8:12 ` Antonio Quartulli
2024-11-08 23:31 ` Sergey Ryazanov
2024-11-15 10:19 ` Antonio Quartulli
2024-11-19 2:23 ` Sergey Ryazanov
2024-11-19 8:16 ` Antonio Quartulli
2024-10-29 10:47 ` [PATCH net-next v11 04/23] ovpn: add basic interface creation/destruction/management routines Antonio Quartulli
2024-11-09 1:01 ` Sergey Ryazanov
2024-11-12 16:47 ` Sabrina Dubroca
2024-11-12 23:56 ` Sergey Ryazanov
2024-11-14 8:07 ` Antonio Quartulli
2024-11-14 22:57 ` Sergey Ryazanov
2024-11-15 13:45 ` Antonio Quartulli
2024-11-15 13:00 ` Antonio Quartulli
2024-11-10 20:42 ` Sergey Ryazanov
2024-11-15 14:03 ` Antonio Quartulli
2024-11-19 3:08 ` Sergey Ryazanov
2024-11-19 8:45 ` Antonio Quartulli
2024-10-29 10:47 ` [PATCH net-next v11 05/23] ovpn: keep carrier always on Antonio Quartulli
2024-11-09 1:11 ` Sergey Ryazanov
2024-11-15 14:13 ` Antonio Quartulli
2024-10-29 10:47 ` [PATCH net-next v11 06/23] ovpn: introduce the ovpn_peer object Antonio Quartulli
2024-10-30 16:37 ` Sabrina Dubroca
2024-10-30 20:47 ` Antonio Quartulli
2024-11-05 13:12 ` Sabrina Dubroca
2024-11-12 10:12 ` Antonio Quartulli
2024-11-10 13:38 ` Sergey Ryazanov
2024-11-12 17:31 ` Sabrina Dubroca
2024-11-13 1:37 ` Sergey Ryazanov [this message]
2024-11-13 10:03 ` Sabrina Dubroca
2024-11-10 19:52 ` Sergey Ryazanov
2024-11-14 14:55 ` Antonio Quartulli
2024-10-29 10:47 ` [PATCH net-next v11 07/23] ovpn: introduce the ovpn_socket object Antonio Quartulli
2024-11-10 18:26 ` Sergey Ryazanov
2024-11-15 14:28 ` Antonio Quartulli
2024-11-19 13:44 ` Antonio Quartulli
2024-10-29 10:47 ` [PATCH net-next v11 08/23] ovpn: implement basic TX path (UDP) Antonio Quartulli
2024-10-30 17:14 ` Sabrina Dubroca
2024-10-30 20:58 ` Antonio Quartulli
2024-11-10 22:32 ` Sergey Ryazanov
2024-11-12 17:28 ` Sabrina Dubroca
2024-11-14 15:25 ` Antonio Quartulli
2024-11-10 23:54 ` Sergey Ryazanov
2024-11-15 14:39 ` Antonio Quartulli
2024-11-20 11:45 ` Sabrina Dubroca
2024-10-29 10:47 ` [PATCH net-next v11 09/23] ovpn: implement basic RX " Antonio Quartulli
2024-10-31 11:29 ` Sabrina Dubroca
2024-10-31 13:04 ` Antonio Quartulli
2024-11-11 1:54 ` Sergey Ryazanov
2024-11-15 15:02 ` Antonio Quartulli
2024-11-12 0:16 ` Sergey Ryazanov
2024-11-15 15:05 ` Antonio Quartulli
2024-10-29 10:47 ` [PATCH net-next v11 10/23] ovpn: implement packet processing Antonio Quartulli
2024-10-29 10:47 ` [PATCH net-next v11 11/23] ovpn: store tunnel and transport statistics Antonio Quartulli
2024-10-31 11:37 ` Sabrina Dubroca
2024-10-31 13:12 ` Antonio Quartulli
2024-10-29 10:47 ` [PATCH net-next v11 12/23] ovpn: implement TCP transport Antonio Quartulli
2024-10-31 14:30 ` Antonio Quartulli
2024-10-31 15:25 ` Sabrina Dubroca
2024-11-16 0:33 ` Antonio Quartulli
2024-10-29 10:47 ` [PATCH net-next v11 13/23] ovpn: implement multi-peer support Antonio Quartulli
2024-10-29 10:47 ` [PATCH net-next v11 14/23] ovpn: implement peer lookup logic Antonio Quartulli
2024-11-04 11:26 ` Sabrina Dubroca
2024-11-12 1:18 ` Sergey Ryazanov
2024-11-12 12:32 ` Antonio Quartulli
2024-10-29 10:47 ` [PATCH net-next v11 15/23] ovpn: implement keepalive mechanism Antonio Quartulli
2024-11-05 18:10 ` Sabrina Dubroca
2024-11-12 13:20 ` Antonio Quartulli
2024-11-13 10:36 ` Sabrina Dubroca
2024-11-14 8:12 ` Antonio Quartulli
2024-11-14 9:03 ` Sabrina Dubroca
2024-10-29 10:47 ` [PATCH net-next v11 16/23] ovpn: add support for updating local UDP endpoint Antonio Quartulli
2024-10-29 10:47 ` [PATCH net-next v11 17/23] ovpn: add support for peer floating Antonio Quartulli
2024-11-04 11:24 ` Sabrina Dubroca
2024-11-12 13:52 ` Antonio Quartulli
2024-11-12 10:56 ` Sabrina Dubroca
2024-11-12 14:03 ` Antonio Quartulli
2024-11-13 11:25 ` Sabrina Dubroca
2024-11-14 8:26 ` Antonio Quartulli
2024-10-29 10:47 ` [PATCH net-next v11 18/23] ovpn: implement peer add/get/dump/delete via netlink Antonio Quartulli
2024-11-04 15:14 ` Sabrina Dubroca
2024-11-12 14:19 ` Antonio Quartulli
2024-11-13 16:56 ` Sabrina Dubroca
2024-11-14 9:21 ` Antonio Quartulli
2024-11-20 11:12 ` Sabrina Dubroca
2024-11-20 11:34 ` Antonio Quartulli
2024-11-11 15:41 ` Sabrina Dubroca
2024-11-12 14:26 ` Antonio Quartulli
2024-11-13 11:05 ` Sabrina Dubroca
2024-11-14 10:32 ` Antonio Quartulli
2024-10-29 10:47 ` [PATCH net-next v11 19/23] ovpn: implement key add/get/del/swap " Antonio Quartulli
2024-11-05 10:16 ` Sabrina Dubroca
2024-11-12 15:40 ` Antonio Quartulli
2024-10-29 10:47 ` [PATCH net-next v11 20/23] ovpn: kill key and notify userspace in case of IV exhaustion Antonio Quartulli
2024-11-05 10:33 ` Sabrina Dubroca
2024-11-12 15:44 ` Antonio Quartulli
2024-11-13 14:28 ` Sabrina Dubroca
2024-11-14 10:38 ` Antonio Quartulli
2024-10-29 10:47 ` [PATCH net-next v11 21/23] ovpn: notify userspace when a peer is deleted Antonio Quartulli
2024-10-29 10:47 ` [PATCH net-next v11 22/23] ovpn: add basic ethtool support Antonio Quartulli
2024-10-29 10:47 ` [PATCH net-next v11 23/23] testing/selftests: add test tool and scripts for ovpn module Antonio Quartulli
2024-10-31 10:00 ` [PATCH net-next v11 00/23] Introducing OpenVPN Data Channel Offload Antonio Quartulli
2024-11-01 2:12 ` Jakub Kicinski
2024-11-01 2:20 ` patchwork-bot+netdevbpf
2024-11-06 1:18 ` Sergey Ryazanov
2024-11-14 15:33 ` Antonio Quartulli
2024-11-14 22:10 ` Sergey Ryazanov
2024-11-15 15:08 ` Antonio Quartulli
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=e543a3de-44f1-4a2d-90ef-1786e222f0d8@gmail.com \
--to=ryazanov.s.a@gmail.com \
--cc=andrew@lunn.ch \
--cc=antonio@openvpn.net \
--cc=donald.hunter@gmail.com \
--cc=edumazet@google.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sd@queasysnail.net \
--cc=shuah@kernel.org \
/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