From: Mikhail Sennikovsky <mikhail.sennikovskii@ionos.com>
To: Pablo Neira Ayuso <pablo@netfilter.org>
Cc: netfilter-devel@vger.kernel.org, mikhail.sennikovsky@gmail.com
Subject: Re: [PATCH 1/1] conntrack: use same modifier socket for bulk ops
Date: Wed, 8 Jun 2022 13:02:30 +0200 [thread overview]
Message-ID: <CALHVEJZbcASEfTn4Qc0uAf6PpHLZZb_wHgfmMsjdEkaLSRHyQA@mail.gmail.com> (raw)
In-Reply-To: <YqA/RNP5jQzIRpon@salvia>
Hi Pablo,
IIRC we never had a code that was using nfct_mnl_socket_check_open for
CT_EVENT and friends, because it is not needed there, as they can not
be used in the bulk operations.
Regards,
Mikhail
On Wed, 8 Jun 2022 at 08:18, Pablo Neira Ayuso <pablo@netfilter.org> wrote:
>
> Hi Mikhail,
>
> On Thu, Jun 02, 2022 at 06:34:29PM +0200, Mikhail Sennikovsky wrote:
> > For bulk ct entry loads (with -R option) reusing the same mnl
> > modifier socket for all entries results in reduction of entries
> > creation time, which becomes especially signifficant when loading
> > tens of thouthand of entries.
> >
> > Signed-off-by: Mikhail Sennikovsky <mikhail.sennikovskii@ionos.com>
> > ---
> > src/conntrack.c | 31 +++++++++++++++++++++++++------
> > 1 file changed, 25 insertions(+), 6 deletions(-)
> >
> > diff --git a/src/conntrack.c b/src/conntrack.c
> > index 27e2bea..be8690b 100644
> > --- a/src/conntrack.c
> > +++ b/src/conntrack.c
> > @@ -71,6 +71,7 @@
> > struct nfct_mnl_socket {
> > struct mnl_socket *mnl;
> > uint32_t portid;
> > + uint32_t events;
> > };
> >
> > static struct nfct_mnl_socket _sock;
> > @@ -2441,6 +2442,7 @@ static int nfct_mnl_socket_open(struct nfct_mnl_socket *socket,
> > return -1;
> > }
> > socket->portid = mnl_socket_get_portid(socket->mnl);
> > + socket->events = events;
> >
> > return 0;
> > }
> > @@ -2470,6 +2472,25 @@ static void nfct_mnl_socket_close(const struct nfct_mnl_socket *sock)
> > mnl_socket_close(sock->mnl);
> > }
> >
> > +static int nfct_mnl_socket_check_open(struct nfct_mnl_socket *socket,
> > + unsigned int events)
> > +{
> > + if (socket->mnl != NULL) {
> > + assert(events == socket->events);
> > + return 0;
> > + }
> > +
> > + return nfct_mnl_socket_open(socket, events);
> > +}
> > +
> > +static void nfct_mnl_socket_check_close(struct nfct_mnl_socket *sock)
> > +{
> > + if (sock->mnl) {
> > + nfct_mnl_socket_close(sock);
> > + memset(sock, 0, sizeof(*sock));
> > + }
> > +}
> > +
> > static int __nfct_mnl_dump(struct nfct_mnl_socket *sock,
> > const struct nlmsghdr *nlh, mnl_cb_t cb, void *data)
> > {
> > @@ -3383,19 +3404,17 @@ static int do_command_ct(const char *progname, struct ct_cmd *cmd,
> > break;
> >
> > case CT_UPDATE:
> > - if (nfct_mnl_socket_open(modifier_sock, 0) < 0)
> > + if (nfct_mnl_socket_check_open(modifier_sock, 0) < 0)
> > exit_error(OTHER_PROBLEM, "Can't open handler");
> >
> > nfct_filter_init(cmd);
> > res = nfct_mnl_dump(sock, NFNL_SUBSYS_CTNETLINK,
> > IPCTNL_MSG_CT_GET, mnl_nfct_update_cb,
> > cmd, NULL);
> > -
> > - nfct_mnl_socket_close(modifier_sock);
> > break;
> >
> > case CT_DELETE:
> > - if (nfct_mnl_socket_open(modifier_sock, 0) < 0)
> > + if (nfct_mnl_socket_check_open(modifier_sock, 0) < 0)
>
> No events needed anymore?
>
> nfct_mnl_socket_check_open() is now only used by CT_UPDATE and CT_DELETE,
> right?
>
> > exit_error(OTHER_PROBLEM, "Can't open handler");
> >
> > nfct_filter_init(cmd);
> > @@ -3418,8 +3437,6 @@ static int do_command_ct(const char *progname, struct ct_cmd *cmd,
> > cmd, filter_dump);
> >
> > nfct_filter_dump_destroy(filter_dump);
> > -
> > - nfct_mnl_socket_close(modifier_sock);
> > break;
> >
> > case EXP_DELETE:
> > @@ -3857,6 +3874,7 @@ static const char *ct_unsupp_cmd_file(const struct ct_cmd *cmd)
> > int main(int argc, char *argv[])
> > {
> > struct nfct_mnl_socket *sock = &_sock;
> > + struct nfct_mnl_socket *modifier_sock = &_modifier_sock;
> > struct ct_cmd *cmd, *next;
> > LIST_HEAD(cmd_list);
> > int res = 0;
> > @@ -3900,6 +3918,7 @@ int main(int argc, char *argv[])
> > free(cmd);
> > }
> > nfct_mnl_socket_close(sock);
> > + nfct_mnl_socket_check_close(modifier_sock);
> >
> > return res < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
> > }
> > --
> > 2.25.1
> >
next prev parent reply other threads:[~2022-06-08 11:02 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-02 16:34 [PATCH 0/1] Reusing modifier socket for bulk ct loads Mikhail Sennikovsky
2022-06-02 16:34 ` [PATCH 1/1] conntrack: use same modifier socket for bulk ops Mikhail Sennikovsky
2022-06-08 6:18 ` Pablo Neira Ayuso
2022-06-08 11:02 ` Mikhail Sennikovsky [this message]
2022-06-08 11:08 ` Pablo Neira Ayuso
2022-06-08 11:19 ` Pablo Neira Ayuso
2022-06-08 14:16 ` Mikhail Sennikovsky
2022-06-09 10:20 ` Pablo Neira Ayuso
2022-06-09 10:42 ` Mikhail Sennikovsky
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=CALHVEJZbcASEfTn4Qc0uAf6PpHLZZb_wHgfmMsjdEkaLSRHyQA@mail.gmail.com \
--to=mikhail.sennikovskii@ionos.com \
--cc=mikhail.sennikovsky@gmail.com \
--cc=netfilter-devel@vger.kernel.org \
--cc=pablo@netfilter.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;
as well as URLs for NNTP newsgroup(s).