From owner-dev-commits-src-all@freebsd.org Thu Apr 1 09:35:30 2021 Return-Path: Delivered-To: dev-commits-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 588385C63DA; Thu, 1 Apr 2021 09:35:30 +0000 (UTC) (envelope-from zec@fer.hr) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0629.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe1e::629]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mail.protection.outlook.com", Issuer "DigiCert Cloud Services CA-1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4F9yhy0PKWz3HHv; Thu, 1 Apr 2021 09:35:29 +0000 (UTC) (envelope-from zec@fer.hr) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=l4cZeiPa2IeQJBMPBGrgMuAE63iwJvHtgKIdUCANgNk4FUydvBQtpmNgC/ltVSJweIdJ8uwo5MYN1Yuml7a02z2D9GMy/iModbxYomV2BbhSZqG0GvgfNcYsFhN6erZppk9a4x/KMnhu2CxjJiMVcOSC+FgKuoHcv4F9rYMnOJOTTNlvdyOyGuYs1fag8aiXio4/k4xzLZujZZzVJy4vbW2r4Gl3zZ089C/e1rfnrv5pfGMM8LbGAgmPeqDgzWUKeJ7cnep4f4fHxHboLx0UiI01wvJcWT6xlQAWf5z5saLZtxh6CNZ1GYda4IyXn6vkf3tPVXtAYnnMFZFztOEKqA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=K/Fd0BrPhfPl475KFybRCDbWDbHK6F8MKzqD0ZV21Nw=; b=LDWyZLjMLGigrmC/CBfEQ6AnodWOQJSEzg9B0rE401AshY+V5gjdOJF337GeuAV1cOr8CK6Xs1/OG8yK3U4FCM0gnQieo8Y43XLZAoyWe+NF+zIa88emdw8aSuRYsxE5xyXqxW3rDcLTVo6Iga3gbzE7zHnfTjbPQVxKBHCLQvL6cHubcxQt77AWFuwYfqEckv4BYA/fgbr7tYB1RBuhPDEW91yzY4eRbcfxmyjiXWUPxKrAk0wmpuUywKdQxa6560orMpvbaOWwNGbsS1IBtUfRC1VP6h9/gQCbyWp6rUwKkLtOjAZWl/kAgs0WhZHm9DMesMyqvli8p/V/XgHzCw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=fer.hr; dmarc=pass action=none header.from=fer.hr; dkim=pass header.d=fer.hr; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ferhr.onmicrosoft.com; s=selector2-ferhr-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=K/Fd0BrPhfPl475KFybRCDbWDbHK6F8MKzqD0ZV21Nw=; b=i19wu11h14I6+dUkEG+s8rm4MbD/nxz8UPoY2gzHgxQpEyJikN6TC/R5zCnj+Jo/WvlPQkEfbtfhvcgVykbKMveYY9b7VCH/T50LB6Kk8dWprCM9vq0PTChNYMthN2qyXyxPjn4yixZgAX4Kwsqx6uF0eVrcogybWwZfXl6Fso8= Received: from VE1PR08MB4783.eurprd08.prod.outlook.com (2603:10a6:802:a9::16) by VI1PR08MB5375.eurprd08.prod.outlook.com (2603:10a6:803:130::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3999.27; Thu, 1 Apr 2021 09:35:26 +0000 Received: from VE1PR08MB4783.eurprd08.prod.outlook.com ([fe80::2033:5b9c:c1fa:e9a1]) by VE1PR08MB4783.eurprd08.prod.outlook.com ([fe80::2033:5b9c:c1fa:e9a1%7]) with mapi id 15.20.3999.027; Thu, 1 Apr 2021 09:35:26 +0000 Date: Thu, 1 Apr 2021 11:35:27 +0200 From: Marko Zec To: Michael Tuexen Cc: Richard Scheffenegger , src-committers@freebsd.org, dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org Subject: Re: git: 529a2a0f2765 - main - tcp: For hostcache performance, use atomics instead of counters Message-ID: <20210401113527.4ff81a4c@x23> In-Reply-To: <9F675C09-14B6-4117-A079-90068E1D1E65@macmic.franken.de> References: <202104010803.13183vQe043756@gitrepo.freebsd.org> <20210401102035.19636bea@x23> <9F675C09-14B6-4117-A079-90068E1D1E65@macmic.franken.de> X-Mailer: Claws Mail 3.17.8 (GTK+ 2.24.33; amd64-portbld-freebsd11.4) Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Originating-IP: [31.147.109.165] X-ClientProxiedBy: VE1PR03CA0007.eurprd03.prod.outlook.com (2603:10a6:802:a0::19) To VE1PR08MB4783.eurprd08.prod.outlook.com (2603:10a6:802:a9::16) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from x23 (31.147.109.165) by VE1PR03CA0007.eurprd03.prod.outlook.com (2603:10a6:802:a0::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3999.26 via Frontend Transport; Thu, 1 Apr 2021 09:35:25 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a724bfb2-9a4a-4d34-bce4-08d8f4f17ade X-MS-TrafficTypeDiagnostic: VI1PR08MB5375: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:6108; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: CWN4rciT27XuksYmbIFnldauC6Be0He536SAHyM/r7E5SKaIKLrcm55C43Vr+GQD0TtC0482nePPLiFUMMZkTyYdfUDySr5sYuAadXJD8v9d2r7ZBLUv9NufZT5KFcDbR4Ut0A+aC7g4yDxVytfzqEx1o2cLcI0bsdkxqifU/7wVyQd8AbHZIEKWyJwVnRouc8u8N63o3mZQmKtXmRLwlhs0FKrk5jT2xooxUyAIrpWe3dyuQ3zz2B2ODLDnIm9b9tEy5lEZIFtoR8e252K/Y0w6N043vWGRn33RZ7Rg1qq2wwuUdpOREkYgRpVHbMJa87+/lx0wmD0XslD/Dh1n+63U56Z/ec29pB1TTaq0FP4tRAaOwggXMAZSAY8cMnbPvwktEs23GV3YKm5FjdzQmFFVWFHVzDBAyqWoEbe7PijLfeUlvCh8TTFexmSwb3ZwR3xRGGoqpea7qr+6P3Un6d9vBrgYsnQ7ogH7olWqBBn0++lQU1cHH2cVwHswR1Pu6a4liRjBI+wQrWto5Ey00zjlfqpL0xqW+DhqMKtjBNBL+gYq3f8DhunI6p5WAikI5KUOblvtM4l4/BdaFcPOeqbfLGTS8ANpR9uLQPbOlP57lYZizHk3Vo82w96GkZs8hvG3R09ajhmqFDjPjEEZTYWvCeVuoaq6S8vVxqTZl69nCSv9O0rOgyB1Pt2dExNk9m4E56tRMiX3Wl3VUyQfmxOlDasTDk64GXV6PRBFbIc= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VE1PR08MB4783.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(376002)(39850400004)(396003)(136003)(346002)(6916009)(38100700001)(86362001)(66556008)(83380400001)(316002)(956004)(478600001)(1076003)(786003)(966005)(4326008)(2906002)(33716001)(6496006)(9576002)(66476007)(5660300002)(52116002)(9686003)(26005)(55016002)(8676002)(16526019)(66946007)(186003)(8936002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?us-ascii?Q?TkglHJN6W7Zx7oLVwBrN8DhpYmRUvzAOKruP0b2oZOJMwHBRKTwDFth7z1Bl?= =?us-ascii?Q?KzhxwD8HVrUPty3LLSDIqkWrzCFfZ3vgUkdVGvn68f+addxbRLa3vgdolEO0?= =?us-ascii?Q?ZxNk3aul8HYz9vnYvegFHRY3gT1KvIV+q121yIedBie4kSONTeGbQDFD6ute?= =?us-ascii?Q?xQDRcAxWDI9YTHQN0XzjMFj8b6/dh+gDLWJQOycaLH8R+P646I2RNMWBfJXa?= =?us-ascii?Q?D2R5lRPyrmpogxllO+U23Ohh2cnKCWLFsErIgL+3PVd97IFQN8x8V6ONBW2U?= =?us-ascii?Q?/sj2dwjD4CN/x7JgRPqq8a/ezQVKlyO5iPYuXZ3iKHyIJxjz1YHT85J5Xeon?= =?us-ascii?Q?fQIXBkicFejBRtbpcWfQRdIOJn70pO9HgyfjkEls/6IAWDA0f7Ry2vfDVFc/?= =?us-ascii?Q?MP4RFBoZkKuo4oFyblSGOnNslZ8sOgtF3IiMLn3XPeouOB4jaqdMDZbiWL3t?= =?us-ascii?Q?A/3jGproRLr0aFQkguCnEGonLUMlU58tGl0y3fq8EKPcU26wW7rnVXqMM6bS?= =?us-ascii?Q?zGAPVL6mAL4d3wya/5TMaQE9xa/L7EPvJ3WPjSCkfHPMLaOEsCubghfKv5FX?= =?us-ascii?Q?qlbYWEDcTr1C7Y+/sAMOm22TUnde0B05PbbhnC6ZIliPKZHUWc9tB8xp0agn?= =?us-ascii?Q?MGszkktxazw22TDytJPm6uy2scqJm5nQ1fequonFaCKuxaWHdE8LLtA+xdaN?= =?us-ascii?Q?NG9Di0hpogUDFBQcVmOHLK1o3sBWNMD24lH16ENXf4ImPEFkaTirsKDek/1H?= =?us-ascii?Q?dqIOb+B7s5ucunReFO+lLV5lH3vils0qiRWF9xPKnZHmN1amc+mk0ag+rdIM?= =?us-ascii?Q?o8AAzq7rjL4qY0+bC5zHuSrYPHQlQpoRM226FhkP54Zn1kcuUcM6GV+QyxsV?= =?us-ascii?Q?gaKpkx/mULnKNBhphPMPzNMigprI17pqiu8o/Qi16KyPwOFNUh/ms/fEwzNC?= =?us-ascii?Q?RBxJfrJGKiucC+NQrT7tS+38YUAzoY4qPkqxNMFwApJAUYwsCyRUF+ys3DMa?= =?us-ascii?Q?asr1quN49PGMVRirAAdVUgcIW0y1LrA5m7GnrBP9oEOicmq6+coKF+Zqtc9y?= =?us-ascii?Q?vX8rPVvOjULMzE3v+D6uLqbV+x3yy1ayBywnIJCT3OcXy4Wk9Csql9y4w2jL?= =?us-ascii?Q?8zrhhMzn2VNDQ6U7fDbZ3dsDnEWhK0rhK2R2ijxuduipKhKO402sLByZcJnq?= =?us-ascii?Q?hlFhPL9un1OzRpwrSCQlWLvFyUJzBLv/fZk+w37407v/cuCLiAxLrrm2fLfU?= =?us-ascii?Q?hpDLeJx3XCzuzg1y6iknCwr/gvpqj3Wc0Sn9w15LkWCqo797K6pQEL88Z+Dx?= =?us-ascii?Q?AMcegy5nDF6E+Z0v8xaB8L/T?= X-OriginatorOrg: fer.hr X-MS-Exchange-CrossTenant-Network-Message-Id: a724bfb2-9a4a-4d34-bce4-08d8f4f17ade X-MS-Exchange-CrossTenant-AuthSource: VE1PR08MB4783.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Apr 2021 09:35:26.1287 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: ca71eddc-cc7b-4e5b-95bd-55b658e696be X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: /Nh1W98w6/Vd+W1VAvz+eeQP937A3N/BUrX7eUuZN/+lsJoIw3cblKKFn1UkhONr X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB5375 X-Rspamd-Queue-Id: 4F9yhy0PKWz3HHv X-Spamd-Bar: ---- Authentication-Results: mx1.freebsd.org; none X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[] X-BeenThere: dev-commits-src-all@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Commit messages for all branches of the src repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 01 Apr 2021 09:35:30 -0000 On Thu, 1 Apr 2021 11:11:39 +0200 Michael Tuexen wrote: > > On 1. Apr 2021, at 10:20, Marko Zec wrote: > > > > On Thu, 1 Apr 2021 08:03:57 GMT > > Richard Scheffenegger wrote: > > > >> The branch main has been updated by rscheff: > >> > >> URL: > >> https://cgit.FreeBSD.org/src/commit/?id=529a2a0f2765f6c57c50a5af6be242c03bf714e3 > >> > >> commit 529a2a0f2765f6c57c50a5af6be242c03bf714e3 > >> Author: Richard Scheffenegger > >> AuthorDate: 2021-04-01 08:00:32 +0000 > >> Commit: Richard Scheffenegger > >> CommitDate: 2021-04-01 08:03:30 +0000 > >> > >> tcp: For hostcache performance, use atomics instead of counters > >> > > > > Is that an April 1st joke, or for real, since it appears to have hit > > the tree? > > > >> As accessing the tcp hostcache happens frequently on some > >> classes of servers, it was recommended > > > > Recommended by whom? > See https://reviews.freebsd.org/D29510#661680 OK thanks... Perhaps if the commit note stated that it aims to eliminate counter_u64_fetch() from a hot path that would have spared the list from the noise from me... Cheers, Marko > > Best regards > Michael > > > >> to use atomic_add/subtract > >> rather than (per-CPU distributed) counters, which have to be > >> summed up at high cost to cache efficiency. > > > > Numbers? > > > >> > >> PR: 254333 > >> MFC after: 2 weeks > >> Sponsored by: NetApp, Inc. > >> Reviewed By: #transport, tuexen, jtl > >> Differential Revision: https://reviews.freebsd.org/D29522 > >> --- > >> sys/netinet/tcp_hostcache.c | 24 +++++++++++------------- > >> sys/netinet/tcp_hostcache.h | 2 +- > >> 2 files changed, 12 insertions(+), 14 deletions(-) > >> > >> diff --git a/sys/netinet/tcp_hostcache.c > >> b/sys/netinet/tcp_hostcache.c index 67da97405c3f..87023cc1a760 > >> 100644 --- a/sys/netinet/tcp_hostcache.c > >> +++ b/sys/netinet/tcp_hostcache.c > >> @@ -147,8 +147,8 @@ SYSCTL_UINT(_net_inet_tcp_hostcache, OID_AUTO, > >> bucketlimit, CTLFLAG_VNET | CTLFLAG_RDTUN, > >> &VNET_NAME(tcp_hostcache.bucket_limit), 0, "Per-bucket hash limit > >> for hostcache"); > >> -SYSCTL_COUNTER_U64(_net_inet_tcp_hostcache, OID_AUTO, count, > >> CTLFLAG_VNET | CTLFLAG_RD, > >> - &VNET_NAME(tcp_hostcache.cache_count), > >> +SYSCTL_UINT(_net_inet_tcp_hostcache, OID_AUTO, count, > >> CTLFLAG_VNET | CTLFLAG_RD, > >> + &VNET_NAME(tcp_hostcache.cache_count), 0, > >> "Current number of entries in hostcache"); > >> > >> SYSCTL_INT(_net_inet_tcp_hostcache, OID_AUTO, expire, CTLFLAG_VNET > >> | CTLFLAG_RW, @@ -199,8 +199,7 @@ tcp_hc_init(void) > >> /* > >> * Initialize hostcache structures. > >> */ > >> - V_tcp_hostcache.cache_count = counter_u64_alloc(M_WAITOK); > >> - counter_u64_zero(V_tcp_hostcache.cache_count); > >> + atomic_store_int(&V_tcp_hostcache.cache_count, 0); > >> V_tcp_hostcache.hashsize = TCP_HOSTCACHE_HASHSIZE; > >> V_tcp_hostcache.bucket_limit = TCP_HOSTCACHE_BUCKETLIMIT; > >> V_tcp_hostcache.expire = TCP_HOSTCACHE_EXPIRE; > >> @@ -268,9 +267,6 @@ tcp_hc_destroy(void) > >> /* Purge all hc entries. */ > >> tcp_hc_purge_internal(1); > >> > >> - /* Release the counter */ > >> - counter_u64_free(V_tcp_hostcache.cache_count); > >> - > >> /* Free the uma zone and the allocated hash table. */ > >> uma_zdestroy(V_tcp_hostcache.zone); > >> > >> @@ -378,7 +374,7 @@ tcp_hc_insert(struct in_conninfo *inc) > >> * If the bucket limit is reached, reuse the least-used > >> element. */ > >> if (hc_head->hch_length >= V_tcp_hostcache.bucket_limit || > >> - counter_u64_fetch(V_tcp_hostcache.cache_count) >= > >> V_tcp_hostcache.cache_limit) { > >> + atomic_load_int(&V_tcp_hostcache.cache_count) >= > >> V_tcp_hostcache.cache_limit) { hc_entry = > >> TAILQ_LAST(&hc_head->hch_bucket, hc_qhead); /* > >> * At first we were dropping the last element, just > >> to @@ -395,7 +391,7 @@ tcp_hc_insert(struct in_conninfo *inc) > >> } > >> TAILQ_REMOVE(&hc_head->hch_bucket, hc_entry, > >> rmx_q); V_tcp_hostcache.hashbase[hash].hch_length--; > >> - counter_u64_add(V_tcp_hostcache.cache_count, -1); > >> + atomic_subtract_int(&V_tcp_hostcache.cache_count, > >> 1); TCPSTAT_INC(tcps_hc_bucketoverflow); > >> #if 0 > >> uma_zfree(V_tcp_hostcache.zone, hc_entry); > >> @@ -428,7 +424,7 @@ tcp_hc_insert(struct in_conninfo *inc) > >> */ > >> TAILQ_INSERT_HEAD(&hc_head->hch_bucket, hc_entry, rmx_q); > >> V_tcp_hostcache.hashbase[hash].hch_length++; > >> - counter_u64_add(V_tcp_hostcache.cache_count, 1); > >> + atomic_add_int(&V_tcp_hostcache.cache_count, 1); > >> TCPSTAT_INC(tcps_hc_added); > >> > >> return hc_entry; > >> @@ -644,7 +640,8 @@ sysctl_tcp_hc_list(SYSCTL_HANDLER_ARGS) > >> > >> /* Optimize Buffer length query by sbin/sysctl */ > >> if (req->oldptr == NULL) { > >> - len = > >> (counter_u64_fetch(V_tcp_hostcache.cache_count) + 1) * linesize; > >> + len = > >> (atomic_load_int(&V_tcp_hostcache.cache_count) > >> + 1) * > >> + linesize; > >> return (SYSCTL_OUT(req, NULL, len)); > >> } > >> > >> @@ -654,7 +651,8 @@ sysctl_tcp_hc_list(SYSCTL_HANDLER_ARGS) > >> } > >> > >> /* Use a buffer sized for one full bucket */ > >> - sbuf_new_for_sysctl(&sb, NULL, > >> V_tcp_hostcache.bucket_limit > >> * linesize, req); > >> + sbuf_new_for_sysctl(&sb, NULL, > >> V_tcp_hostcache.bucket_limit * > >> + linesize, req); > >> > >> sbuf_printf(&sb, > >> "\nIP address MTU SSTRESH RTT > >> RTTVAR " @@ -716,7 +714,7 @@ tcp_hc_purge_internal(int all) > >> hc_entry, rmx_q); > >> uma_zfree(V_tcp_hostcache.zone, > >> hc_entry); V_tcp_hostcache.hashbase[i].hch_length--; > >> - > >> counter_u64_add(V_tcp_hostcache.cache_count, -1); > >> + > >> atomic_subtract_int(&V_tcp_hostcache.cache_count, 1); } else > >> hc_entry->rmx_expire -= > >> V_tcp_hostcache.prune; } > >> diff --git a/sys/netinet/tcp_hostcache.h > >> b/sys/netinet/tcp_hostcache.h index b5237392acc2..2f7035c0c6af > >> 100644 --- a/sys/netinet/tcp_hostcache.h > >> +++ b/sys/netinet/tcp_hostcache.h > >> @@ -74,7 +74,7 @@ struct tcp_hostcache { > >> u_int hashsize; > >> u_int hashmask; > >> u_int bucket_limit; > >> - counter_u64_t cache_count; > >> + u_int cache_count; > >> u_int cache_limit; > >> int expire; > >> int prune; > > >