From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-oln040092066061.outbound.protection.outlook.com [40.92.66.61]) by sourceware.org (Postfix) with ESMTPS id 24B9B39730F4 for ; Fri, 8 Jan 2021 15:24:14 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 24B9B39730F4 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=m4fub6hpVF7gTyB1r9ccVMrCXjy7EkDgghSg1SouqBtimoaETOBIQp8Gcy29fwhfks2n2pECXvPDNuRr6jHpcjGwVPJZId4X6v/cSHArMUxX42+BXb29/cSYhJ7cMjOQQEW6LvmaeOD0gh6Eo6XE0ym2J14h15liGlDIMbhcu160CxpDnmUf1DkGfzgjEKI4DIoczwtPlcwYCp6js1yy/qk3cYTV+KaTCV/FX4zzrhEChR86B7bW0VkPjuVPha40UHqv7YVAOWWMvn0YBKF5KsRLY0FopWeXMGatQz6PRYPOFTRt5bqq2B0zHuRO2uATICyq7pNBktoBM8H08gsYgg== 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=51as8jv3nI8sZ9+dJCk6+/aWCx381dekhsSXqrspjMg=; b=Yd3+85Rw4AELvRrVgszd8aoD2BocYGSGkCJgHu9zwP1s93sxelNMXZrxS0pl4DSFjdW6vTvnhjXtHXFtjF8hMgdHaWXy2RG5zKFUMet7ihpVit8NXR0QWWrCoWSMXnIuq0HQH6UGXeLrqwAdxvnHNXAwrHdzrvQmhyTms70ib3SFIRWThxy/NkYzsp2+/ZEmKBSM2mZMKGouhnfoQaa/WiZOE+NU/aMPDNRsNPzsOgClywvTbbnhHtziNC+RY9zwKnpXmLd/kxR7WoQvrPndsKo6cXA8Kx8nCVTcJW3IP1BgAZYskybwjY9PnGZUt9koMAsF/IjVSXPOFqoZT1+wcw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none Received: from VE1EUR01FT013.eop-EUR01.prod.protection.outlook.com (2a01:111:e400:7e19::52) by VE1EUR01HT225.eop-EUR01.prod.protection.outlook.com (2a01:111:e400:7e19::260) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3742.6; Fri, 8 Jan 2021 15:24:12 +0000 Received: from DB7PR02MB3996.eurprd02.prod.outlook.com (2a01:111:e400:7e19::4d) by VE1EUR01FT013.mail.protection.outlook.com (2a01:111:e400:7e19::215) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3742.6 via Frontend Transport; Fri, 8 Jan 2021 15:24:12 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:45AFA05F8528B408AD4A2F6A0A0F7D1D7310D2B4FD22FCABD707E6DF686C7629; UpperCasedChecksum:6F7E23FF94509671A439CAFF041665B5B38A5776564D386067C1BA9399271415; SizeAsReceived:12002; Count:46 Received: from DB7PR02MB3996.eurprd02.prod.outlook.com ([fe80::586a:4fdf:ce4c:6c51]) by DB7PR02MB3996.eurprd02.prod.outlook.com ([fe80::586a:4fdf:ce4c:6c51%7]) with mapi id 15.20.3742.009; Fri, 8 Jan 2021 15:24:12 +0000 Subject: Re: Optimising cygwin fork performance To: cygwin-apps@cygwin.com References: <7b8fa633-8342-9b45-98a3-8777e2f1af88@SystematicSw.ab.ca> From: Hamish McIntyre-Bhatty Autocrypt: addr=hamishmb@live.co.uk; prefer-encrypt=mutual; keydata= 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 SgyH5sOHagLQDdneBm4EJIs0MeQOrTDb Message-ID: Date: Fri, 8 Jan 2021 15:24:10 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 In-Reply-To: <7b8fa633-8342-9b45-98a3-8777e2f1af88@SystematicSw.ab.ca> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="z8M900M2qX8UTAtzECvprqxqwvVgSmwQW" X-TMN: [U/Gm2BmZShioGgfA/hPZcjxMqOQv52K1] X-ClientProxiedBy: LNXP123CA0002.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:d2::14) To DB7PR02MB3996.eurprd02.prod.outlook.com (2603:10a6:10:43::18) X-Microsoft-Original-Message-ID: <8c1199e8-34ca-2a97-f3af-44a3b4da0bf7@live.co.uk> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from [192.168.1.212] (86.149.41.50) by LNXP123CA0002.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:d2::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3742.6 via Frontend Transport; Fri, 8 Jan 2021 15:24:11 +0000 X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 46 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: f25ec5c5-b809-4d3d-9e05-08d8b3e973b9 X-MS-TrafficTypeDiagnostic: VE1EUR01HT225: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: TDxZVx59z5vlHZ1VpXVzhTHQhMRA3sceIi/rwV0q/DoLrsBQniOZMdqjV3q8mfTut/+oChUKcL7ZfYvLmmlVg9oiZuH49JuyDgsQ23cv82EO4htKxh66RzZ/kDfhsGGOppbcLoem/0rkw/XIxl95NK5WMKUZTwD8nrGXX6QZeUV2+U0rk6uENao33zQyOZHRswmeIpFFnAbjqdjJattr5pII2ZlkdSr5l2qGrwsyuPMQbl8A+vvSWCOcMCfiAohw3jCABFJxWQVpM7cPYmnAiB6B6x0EwuPSKJRGBtVW8lk= X-MS-Exchange-AntiSpam-MessageData: LgZcehm/Ug6djP6GadP/CzKLeQc18BtAFWmtNnaQ6u35fEA+XmRpkt4IlRMP1cZcc7W9vZ+DYm8z7FAN1Ws/X0ptl07EPR/vvC96PfE01jk9RJbi2Lr6u+T8c3eIEdSYK7taJUcirVqD75fUiqMxlw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jan 2021 15:24:12.2891 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-Network-Message-Id: f25ec5c5-b809-4d3d-9e05-08d8b3e973b9 X-MS-Exchange-CrossTenant-AuthSource: VE1EUR01FT013.eop-EUR01.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1EUR01HT225 X-Spam-Status: No, score=-3028.8 required=5.0 tests=BAYES_00, BODY_8BITS, FORGED_MUA_MOZILLA, KAM_COUK, KAM_DMARC_STATUS, MSGID_FROM_MTA_HEADER, NICE_REPLY_A, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=no autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: cygwin-apps@cygwin.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Cygwin package maintainer discussion list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 08 Jan 2021 15:24:16 -0000 --z8M900M2qX8UTAtzECvprqxqwvVgSmwQW Content-Type: multipart/mixed; boundary="7gQsCeo9KzXnD0LvLNt0vivIY3PgEKXwM" --7gQsCeo9KzXnD0LvLNt0vivIY3PgEKXwM Content-Type: multipart/mixed; boundary="------------B8E43C0EFE2981B46E2CF7F1" Content-Language: en-GB This is a multi-part message in MIME format. --------------B8E43C0EFE2981B46E2CF7F1 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 16/12/2020 20:37, Brian Inglis wrote: > On 2020-12-16 10:36, Marco Atzeri via Cygwin-apps wrote: >> On 16.12.2020 13:13, Hamish McIntyre-Bhatty via Cygwin-apps wrote: >>> So I know it's been mentioned a lot that fork is slow on Cygwin, but >>> compared to other people's machines, eg when building, it seems way >>> slower for me. >>> >>> First I'd like to know if there's a good way to measure this that >>> anyone >>> has found, because I'm not sure how to measure it. If I print multipl= e >>> lines with echo in a script, I can see it printing maybe 2-3 a second= - >>> it's very slow. >>> >>> I think this might be because I'm using a Virtual Machine with >>> VirtualBox, and QEMU/KVM might be quicker. I'm using Avira Antivurus,= >>> with exceptions for the cygwin install folders (C:\cygwin64, >>> C:\cygwin). >>> >>> It might be nice if we could so some comparisons so I can figure out >>> what's wrong. > > Running strace on your forking executable should give you accurate > numbers in the output, with some work to extract the relevant values. > >> Same AV here, W10 64bit (no VM), 2 year old Laptop >> >> model name=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 : Intel(R) Core(TM) i5-8250U = CPU @ 1.60GHz >> 4 cores >> >> https://github.com/mondalaci/fork-benchmark >> it seems there is a aging effect >> >> $ ./fork-benchmark.exe 1000 >> Forked, executed and destroyed 1000 processes in 39.928576 seconds. >> >> $ ./fork-benchmark.exe 1000 >> Forked, executed and destroyed 1000 processes in 42.701295 seconds. >> >> $ ./fork-benchmark.exe 1000 >> Forked, executed and destroyed 1000 processes in 49.890909 seconds. >> >> $ ./fork-benchmark.exe 1000 >> Forked, executed and destroyed 1000 processes in 61.657031 seconds. > > It's all part of your current process tree. > Running cygserver may help this with appropriate process settings: > > $ grep -C1 'kern\.srv\..*_.*' /etc/cygserver.conf > > # kern.srv.cleanup_threads: No. of cygserver threads used for cleanup > tasks. > # Default: 2, Min: 1, Max: 16, command line option -c, --cleanup-thread= s > #kern.srv.cleanup_threads 2 > kern.srv.cleanup_threads 16 > > # kern.srv.request_threads: No. of cygserver threads used to serve > #=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 application requests. > # Default: 10, Min: 1, Max: 310, command line option -r, > --request-threads > #kern.srv.request_threads 10 > kern.srv.request_threads 310 > > # kern.srv.process_cache_size: No. of concurrent processes which can > be handled > #=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 by Cygserver concurrently. > # Default: 62, Min: 1, Max: 310, command line option -p, --process-cach= e > #kern.srv.process_cache_size 62 > kern.srv.process_cache_size 310 > > $ ./fork-benchmark 1000 > Forked, executed and destroyed 1000 processes in 33.397727 seconds. > $ ./fork-benchmark 1000 > Forked, executed and destroyed 1000 processes in 34.70389 seconds. > $ ./fork-benchmark 1000 > Forked, executed and destroyed 1000 processes in 34.186709 seconds. > $ ./fork-benchmark 1000 > Forked, executed and destroyed 1000 processes in 33.65649 seconds. > $ sed -En '/^model name|^cpu MHz/p;/MHz/q' /proc/cpuinfo > model name=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 : AMD A10-9700 RADEON R7, 10 C= OMPUTE CORES 4C+6G > cpu MHz=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 : 3500.000 > > $ strace -o fork-benchmark.strace ./fork-benchmark 10 > $ egrep '^--- Process [0-9]+ (crea|\(pid: [0-9]+\) exi)ted|dwProcessId > [0-9]+|ExitProcess n 0x' fork-benchmark.strace > fork-benchmark.log > $ awk '/ [0-9]+! pinfo::exit: /{t+=3D$2};END{print t/10000"ms"}' > fork-benchmark.log > 34.1855ms > > Faster CPUs, faster memory, bigger caches, SSD drive may help. Just running in KVM seems to have helped me. My times are more like 13 seconds for 1000 forks now. There appears to be drop-off, but after a big package build and some idling, it then gets back down to 13 seconds. Is there a way for me to check that the cygserver options are working? Either way, my package builds are about twice as quick as they were before now, possibly just from a reinstall and using KVM. Hamish --------------B8E43C0EFE2981B46E2CF7F1 Content-Type: application/pgp-keys; name="0x87B761FE07F548D6.asc" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="0x87B761FE07F548D6.asc" -----BEGIN PGP PUBLIC KEY BLOCK----- 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 =3DyyBL -----END PGP PUBLIC KEY BLOCK----- --------------B8E43C0EFE2981B46E2CF7F1-- --7gQsCeo9KzXnD0LvLNt0vivIY3PgEKXwM-- --z8M900M2qX8UTAtzECvprqxqwvVgSmwQW Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEyW7IVaVv58cBDxXdh7dh/gf1SNYFAl/4eRoACgkQh7dh/gf1 SNZpwBAAxxgGYaO05MHsciu8up1a6fRe6UiAvGhMJTXPptabjg7Uc9BzntqXNmGU eUD7TNDSxd0AuWj5jh58Xwp5cu1Huqwpxf3/Ein8/w5nC5psWG8hWO2Cb5sCBQTz 1noPfm6SPZ3bTrJPwL0FTxulmRPFRcs7OCXKYo890lJvkoGZhOMmntxgS8SyMb9R 1gtxzxXtzhOgRZFVyczNJW+9W+o/LMKXzQvOhjqpzvTUGnOQTl4pOGSNZ+YySV2X R18x9OoiG0vWp6uow67pxi4izunjq3K30wETpY1kDv9VTxvkR0riiZZGcymjffr0 wLQyP+MF0EUuk/sjBf1+IAx60ZXrn4xUCHV/DczL/MNx++T6qMmT7Cs/gMwS2z0x c+lXdQqZXrNCQuOeRk8NC7OibS6+rGappbw/+3ePcVL/hIk5+31izc8ffEB/gPaf nJuIJudEXkgt5kpr6oO+k+EWYoYEqaTZyp0dOm89t/93igwO5oOHuw/agplHV/L/ IptqiBX3B0HTqmliqx3iIZp1+oHAn3LMCkFrlUZGh1Uu2blFi+8AAiV+wRn2WUaC N9ueLhcBFp1+Lp9ByTgy6ZpzBD9ot+Y5dsrRS3aHxB/Vcw+lLWMWiLiI8Jief/bt 5yhaZbCrDduyukcJ8Ru8a3xT9iqoq4Hbc2ezWzc7dwgPSFjKN8k= =KJbo -----END PGP SIGNATURE----- --z8M900M2qX8UTAtzECvprqxqwvVgSmwQW--