From nobody Sun Feb 8 19:30:24 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=crudebyte.com ARC-Seal: i=1; a=rsa-sha256; t=1576681833; cv=none; d=zohomail.com; s=zohoarc; b=GI1yGxZwWGhxIToCROReXRGyjx2z43DG4Bq8gelESKtx5/N7bgv3uT2QdbZ3Q7kv1UrZLFgMMkScUeS9wooHlcmgml3GJcpsmNJ9yYw2UMUnnc7pd08/90vjfeQksPEjY8+jVNzM/7BPvkuoH75m9SWa1+JNv1jLDq5UU7HB2sw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1576681833; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=PrslkhuesGKKMdjjO00pl3IBF8eqlXsPArsnSI4/mCw=; b=ID6lKckZ3aROmF5YWlBPvEwCSLu/K9f3RgJHOEqmrILVI/VUG6XGfrdMs4ax5v+OxO0CW1Ou2o4BEwe8wjsHZTPm6+iYmbufa/yFMafEbespWA7dTYhxLZqr+VERBfK5875Tie/EtkDf1IUAM1ck8tA5yttkBHlMiJw5G710uw4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1576681833914400.76925346825294; Wed, 18 Dec 2019 07:10:33 -0800 (PST) Received: from localhost ([::1]:55454 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ihay8-0005DW-Ij for importer@patchew.org; Wed, 18 Dec 2019 10:10:32 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:40235) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ihaxE-0004Np-KN for qemu-devel@nongnu.org; Wed, 18 Dec 2019 10:09:37 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ihaxD-0001i2-EW for qemu-devel@nongnu.org; Wed, 18 Dec 2019 10:09:36 -0500 Received: from lizzy.crudebyte.com ([91.194.90.13]:51709) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1ihaxD-0003Tt-4t for qemu-devel@nongnu.org; Wed, 18 Dec 2019 10:09:35 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=crudebyte.com; s=lizzy; h=Subject:Date:Cc:To:From:References:In-Reply-To: Message-Id:Content-Type:Content-Transfer-Encoding:MIME-Version:Content-ID: Content-Description; bh=PrslkhuesGKKMdjjO00pl3IBF8eqlXsPArsnSI4/mCw=; b=mDM26 sRXzAy2xvhAaMbMUM5gV8ceKbIdRhCoHD0MH6QkSudJr9BERfZ2B775BFDHrFY17jiju3uGmfzSLr rq0r2jSogCql06HU2VMGxD7usjf63pLjWbB2iVp9E4V6h+HqcrBKpOYfH93orGlPe/z8Ejs6yVgaU YcFEFYEJfGAUW3vV+y5I1aV6AE9sKdkgBSJ8wsEPFyQfIpcP2Q2BUXlPu4f2zjslOXECT1HvpbzdR qZcmXfed3ZVTM1UVRlFTa1gUNhrM62FA3p57RmjlO5PnBpg2SV0v1itadMoK2jGx3896xkPCFTyMG 0xXJDU+evbJ7E/H2tJW1lOtmDu6xw==; Message-Id: In-Reply-To: References: From: Christian Schoenebeck To: qemu-devel@nongnu.org Cc: Greg Kurz Date: Wed, 18 Dec 2019 14:52:03 +0100 Subject: [PATCH v2 7/9] hw/9pfs/9p-synth: avoid n-square issue in synth_readdir() X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 91.194.90.13 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @crudebyte.com) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This patch is just a temporary benchmark hack, not intended to be merged! 9pfs synth driver's readdir() implementation has a severe n-square performance problem. This patch is a quick and dirty hack to prevent that performance problem from tainting the readdir() benchmark results. In its current form, this patch is not useful for anything else than for an isolated readdir benchmark. Signed-off-by: Christian Schoenebeck --- hw/9pfs/9p-synth.c | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/hw/9pfs/9p-synth.c b/hw/9pfs/9p-synth.c index 7eb210ffa8..54dc30f37b 100644 --- a/hw/9pfs/9p-synth.c +++ b/hw/9pfs/9p-synth.c @@ -225,7 +225,8 @@ static void synth_direntry(V9fsSynthNode *node, } =20 static struct dirent *synth_get_dentry(V9fsSynthNode *dir, - struct dirent *entry, off_t of= f) + struct dirent *entry, off_t off, + V9fsSynthNode **hack) { int i =3D 0; V9fsSynthNode *node; @@ -243,16 +244,38 @@ static struct dirent *synth_get_dentry(V9fsSynthNode = *dir, /* end of directory */ return NULL; } + *hack =3D node; synth_direntry(node, entry, off); return entry; } =20 static struct dirent *synth_readdir(FsContext *ctx, V9fsFidOpenState *fs) { - struct dirent *entry; + struct dirent *entry =3D NULL; V9fsSynthOpenState *synth_open =3D fs->private; V9fsSynthNode *node =3D synth_open->node; - entry =3D synth_get_dentry(node, &synth_open->dent, synth_open->offset= ); + + /* + * HACK: This is just intended for benchmark, to avoid severe n-square + * performance problem of synth driver's readdir implementation here w= hich + * would otherwise unncessarily taint the benchmark results. By simply + * caching (globally) the previous node (of the previous synth_readdir= () + * call) we can simply proceed to next node in chained list efficientl= y. + * + * not a good idea for any production code ;-) + */ + static struct V9fsSynthNode *cachedNode; + + if (!cachedNode) { + entry =3D synth_get_dentry(node, &synth_open->dent, synth_open->of= fset, + &cachedNode); + } else { + cachedNode =3D cachedNode->sibling.le_next; + if (cachedNode) { + entry =3D &synth_open->dent; + synth_direntry(cachedNode, entry, synth_open->offset + 1); + } + } if (entry) { synth_open->offset++; } --=20 2.20.1