From 5b526f4533bda42b51326c3b60fd771bc1cd88e7 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Mon, 13 Dec 2021 17:49:51 +0100 Subject: [PATCH] tdb: Raw performance torture to beat tdb_increment_seqnum Running this on sn-devel-184 takes ~14 seconds with the atomic ops. Without them I did not wait for it to finish. After reducing NPROCS from 500 to 50 it still ran for more than a minute. Signed-off-by: Volker Lendecke Reviewed-by: Jeremy Allison Autobuild-User(master): Jeremy Allison Autobuild-Date(master): Wed Dec 15 01:03:56 UTC 2021 on sn-devel-184 --- lib/tdb/tools/tdbtortseq.c | 123 +++++++++++++++++++++++++++++++++++++ lib/tdb/wscript | 5 ++ 2 files changed, 128 insertions(+) create mode 100644 lib/tdb/tools/tdbtortseq.c diff --git a/lib/tdb/tools/tdbtortseq.c b/lib/tdb/tools/tdbtortseq.c new file mode 100644 index 00000000000..9423b46d996 --- /dev/null +++ b/lib/tdb/tools/tdbtortseq.c @@ -0,0 +1,123 @@ +/* + * Unix SMB/CIFS implementation. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "replace.h" +#include "system/filesys.h" +#include +#include +#include +#include "system/wait.h" + +#define NPROCS 500 +#define NUMOPS 1000000 + +int main(void) +{ + pid_t pids[NPROCS]; + struct tdb_context *tdb = NULL; + int i; + uint32_t seqnum_before, seqnum_after; + + tdb = tdb_open("seqnum_test.tdb", + 10000, + TDB_CLEAR_IF_FIRST| + TDB_SEQNUM| + TDB_INCOMPATIBLE_HASH| + TDB_MUTEX_LOCKING, + O_CREAT|O_RDWR, + 0644); + if (tdb == NULL) { + perror("tdb_open failed"); + return 1; + } + seqnum_before = tdb_get_seqnum(tdb); + + for (i=0; i