Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uoLXJ-002XHj-Cj for pgsql-hackers@arkaria.postgresql.org; Tue, 19 Aug 2025 12:33:58 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uoLXG-00Axgp-TY for pgsql-hackers@arkaria.postgresql.org; Tue, 19 Aug 2025 12:33:55 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uoLXG-00Axgh-Gb for pgsql-hackers@lists.postgresql.org; Tue, 19 Aug 2025 12:33:55 +0000 Received: from mail-pj1-x1030.google.com ([2607:f8b0:4864:20::1030]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uoLXE-000hz7-3B for pgsql-hackers@postgresql.org; Tue, 19 Aug 2025 12:33:54 +0000 Received: by mail-pj1-x1030.google.com with SMTP id 98e67ed59e1d1-32372c05c5dso1772649a91.0 for ; Tue, 19 Aug 2025 05:33:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755606830; x=1756211630; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=rheXqRFZqmS9dgNpJkm6DfFTekbhRJoAeA/XGylo0HA=; b=iFXYfQiVHSXP+q5TnrlY1l/vzhBngPcVlvI8E868EjEr68jp0eJC7eP3PBMAb30QOv G0XfzpHoP3MMSTB4yyGpNWeCBN21vyjNDT2EAhKIgVEa8cl4UDaX8GreTVJ6h7OZBzPS pDpFjhrk1woywZ8bS4jz9h3dlggwsECcZwTJ7RgJDzvb5AxZxyQtLPfFdXG2nUEn3133 mmz5atTw64xiln4a02CaUVhxet3UiEIzHTrAaglbfPph4R1pBQiBwudeS8UgJd8s7843 iAxW+BEp+HK0tzkIJdW28W+HwvxlUHORFCgwMqncBb3GrjKi64Ikr7IrEc8skIoNkFxu g73Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755606830; x=1756211630; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=rheXqRFZqmS9dgNpJkm6DfFTekbhRJoAeA/XGylo0HA=; b=KSD12cWm4kZsyhEe71FLByJgfHuxzgVQjPogCmKlDwvHFu54fwVpVsifgQnBo7kG90 zq/pnzAFHa3BFlsIY/faslxV0z7WB5puDjsZqDPkjGq89zJ4NHMepc+0lqCqK9e52DP8 iXZJQoZu0B+2X2gT0X7bxwPTfR9SPG2NK3DmgCmBgTxL5Zjb6JJSYSbkg102BiR/jQ50 q2792+DwmECDzlk66tB9ZmByEAgfbuQZr8NWuUqUS1cCb8LvWvbmDuY/v21Q9qeubhq4 JjrvAhjnCTZITg5DnyTTFiHBX+gUlYwSqg+SYbygQwBeWXhXC6Yj+ZXxbnO4s6NyfMTL QTFg== X-Forwarded-Encrypted: i=1; AJvYcCVuFpwP7xchzVtyCfnzKZEF6/Jf9HbMXonQTwo6bpeV4P0isuk4eezcJ9jpVLx9z4w366gNvxRnfCfeItVR@postgresql.org X-Gm-Message-State: AOJu0YwbkLE6u58n9mnCJVY20Iy/xqIHRC3gQsgixhB9LCKiJffC3cX+ zFKR0ufnYNCIRK7oke4hXXcchur/CX/Tg/Mv1mIRG6AStOYdhoxHLgf8Iud07qwPUcTlwgkwHWr d1aoc/ziMXCi0+YbVpCUMncG+L4gR3fY= X-Gm-Gg: ASbGncu0xk4S/fpppCg1h6BhOwD03I71l+YzsWW/z+Dvkz23BXyW0eyhtlAGeyoddbZ 4aSCAqumeTJY6HdBue7WnmXiYoI9EfBypGi+j1YwzcJIwGBQUNPKCIlzAHtsrTJei+rVakTZLVu c/vfAnimvcSJ55QhvcxGgI47pCsnynKGuZx6RJIKjQdOQA2xw8rFMduCb//8Tv7aTwUWsUvB21E nCsGJs= X-Google-Smtp-Source: AGHT+IEA6frDppswUhRdrklL0cPs4HnqJCTRBd7r4z5E7uMkC1zFlhVtjK1YSlVuq1fvgJ1is7GAFxBpiK/Zu3hsVbo= X-Received: by 2002:a17:902:e549:b0:240:a889:5563 with SMTP id d9443c01a7336-245e030f249mr39172525ad.24.1755606830106; Tue, 19 Aug 2025 05:33:50 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Nazir Bilal Yavuz Date: Tue, 19 Aug 2025 15:33:38 +0300 X-Gm-Features: Ac12FXymzsu5wuuHhe5t7KmMtePBvHjNfhYAJBNFBptCSAg9ZWt3bIOeXTZvyb0 Message-ID: Subject: Re: Speed up COPY FROM text/CSV parsing using SIMD To: KAZAR Ayoub Cc: Shinya Kato , pgsql-hackers@postgresql.org Content-Type: multipart/mixed; boundary="000000000000796541063cb711d8" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000796541063cb711d8 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Thu, 14 Aug 2025 at 18:00, KAZAR Ayoub wrote: >> Thanks for running that benchmark! Would you mind sharing a reproducer >> for the regression you observed? > > Of course, I attached the sql to generate the text and csv test files. > If having a 1/3 of line length of special characters can be an exaggerati= on, something lower might still reproduce some regressions of course for th= e same idea. Thank you so much! I am able to reproduce the regression you mentioned but both regressions are %20 on my end. I found that (by experimenting) SIMD causes a regression if it advances less than 5 characters. So, I implemented a small heuristic. It works like that: - If advance < 5 -> insert a sleep penalty (n cycles). - Each time advance < 5, n is doubled. - Each time advance =E2=89=A5 5, n is halved. I am sharing a POC patch to show heuristic, it can be applied on top of v1-0001. Heuristic version has the same performance improvements with the v1-0001 but the regression is %5 instead of %20 compared to the master. -- Regards, Nazir Bilal Yavuz Microsoft --000000000000796541063cb711d8 Content-Type: text/plain; charset="UTF-8"; name="COPY-SIMD-add-heuristic-to-avoid-regression-on-sm.txt" Content-Disposition: attachment; filename="COPY-SIMD-add-heuristic-to-avoid-regression-on-sm.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_meiiya400 RnJvbSBhYTU1ODQzYjBjNjRiZWQ5ZjcyY2Y4Y2Q3ODU0ZGY5ZGY3ZWY5ODliIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYXppciBCaWxhbCBZYXZ1eiA8YnlhdnV6ODFAZ21haWwuY29t PgpEYXRlOiBUdWUsIDE5IEF1ZyAyMDI1IDE1OjE2OjAyICswMzAwClN1YmplY3Q6IFtQQVRDSCB2 MV0gQ09QWSBTSU1EOiBhZGQgaGV1cmlzdGljIHRvIGF2b2lkIHJlZ3Jlc3Npb24gb24gc21hbGwK IGFkdmFuY2VzCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hh cnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CgpXaGVuIFNJTUQgYWR2 YW5jZXMgZmV3ZXIgdGhhbiA1IGNoYXJhY3RlcnMsIHBlcmZvcm1hbmNlIHJlZ3Jlc3Nlcy4KVG8g bWl0aWdhdGUgdGhpcywgaW50cm9kdWNlIGEgaGV1cmlzdGljOgoKLSBJZiBhZHZhbmNlIDwgNSAt PiBpbnNlcnQgYSBzbGVlcCBwZW5hbHR5IChuIGN5Y2xlcykuCi0gRWFjaCB0aW1lIGFkdmFuY2Ug PCA1LCBuIGlzIGRvdWJsZWQuCi0gRWFjaCB0aW1lIGFkdmFuY2Ug4omlIDUsIG4gaXMgaGFsdmVk LgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tcGFyc2UuYyB8IDQyICsrKysrKysr KysrKysrKysrKysrKysrKysrLS0KIDEgZmlsZSBjaGFuZ2VkLCA0MCBpbnNlcnRpb25zKCspLCAy IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9t cGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tcGFyc2UuYwppbmRleCA1YWJh MGZhNmNiNy4uZTU4ZDdkNGUzNTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Nv cHlmcm9tcGFyc2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMK QEAgLTEyNjMsNiArMTI2Myw5IEBAIENvcHlSZWFkTGluZVRleHQoQ29weUZyb21TdGF0ZSBjc3Rh dGUsIGJvb2wgaXNfY3N2KQogCVZlY3RvcjgJCWJzID0gdmVjdG9yOF9icm9hZGNhc3QoJ1xcJyk7 CiAJVmVjdG9yOAkJcXVvdGU7CiAJVmVjdG9yOAkJZXNjYXBlOworCisJaW50CQkJc2xlZXBfY3ls ZSA9IDA7CisJaW50CQkJbGFzdF9zbGVlcF9jeWxlID0gMTsKICNlbmRpZgogCiAJaWYgKGlzX2Nz dikKQEAgLTEzNTksNyArMTM2Miw3IEBAIENvcHlSZWFkTGluZVRleHQoQ29weUZyb21TdGF0ZSBj c3RhdGUsIGJvb2wgaXNfY3N2KQogCQkgKiAgIHZlY3RvciByZWdpc3RlciwgYXMgU0lNRCBvcGVy YXRpb25zIHJlcXVpcmUgcHJvY2Vzc2luZyBkYXRhIGluCiAJCSAqICAgZml4ZWQtc2l6ZSBjaHVu a3MuCiAJCSAqLwotCQlpZiAoIWluX3F1b3RlICYmIGNvcHlfYnVmX2xlbiAtIGlucHV0X2J1Zl9w dHIgPj0gc2l6ZW9mKFZlY3RvcjgpKQorCQlpZiAoc2xlZXBfY3lsZSA8PSAwICYmICFpbl9xdW90 ZSAmJiBjb3B5X2J1Zl9sZW4gLSBpbnB1dF9idWZfcHRyID49IHNpemVvZihWZWN0b3I4KSkKIAkJ ewogCQkJVmVjdG9yOAkJY2h1bms7CiAJCQlWZWN0b3I4CQltYXRjaDsKQEAgLTEzOTAsMTQgKzEz OTMsNDkgQEAgQ29weVJlYWRMaW5lVGV4dChDb3B5RnJvbVN0YXRlIGNzdGF0ZSwgYm9vbCBpc19j c3YpCiAJCQkJICovCiAJCQkJaW50IGFkdmFuY2UgPSBwZ19yaWdodG1vc3Rfb25lX3BvczMyKG1h c2spOwogCQkJCWlucHV0X2J1Zl9wdHIgKz0gYWR2YW5jZTsKKworCQkJCS8qCisJCQkJICogSWYg d2UgYWR2YW5jZSBsZXNzIHRoYW4gNSBjaGFyYWN0ZXJzIHdlIGNhdXNlIHJlZ3Jlc3Npb24uCisJ CQkJICogU2xlZXAgYSBiaXQgdGhlbiB0cnkgYWdhaW4uIFNsZWVwIHRpbWUgaW5jcmVhc2VzCisJ CQkJICogZXhwb25lbnRpYWxseS4KKwkJCQkgKi8KKwkJCQlpZiAoYWR2YW5jZSA8IDUpCisJCQkJ eworCQkJCQlpZiAobGFzdF9zbGVlcF9jeWxlID49IFBHX0lOVDE2X01BWCAvIDIpCisJCQkJCQls YXN0X3NsZWVwX2N5bGUgPSBQR19JTlQxNl9NQVg7CisJCQkJCWVsc2UKKwkJCQkJCWxhc3Rfc2xl ZXBfY3lsZSA9IGxhc3Rfc2xlZXBfY3lsZSA8PCAxOworCisJCQkJCXNsZWVwX2N5bGUgPSBsYXN0 X3NsZWVwX2N5bGU7CisJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBJZiB3ZSBhZHZhbmNlIG1vcmUg dGhhbiA0IGNoYXJhY3RlcyB0aGlzIG1lYW5zIHdlIGhhdmUKKwkJCQkgKiBwZXJmb3JtYW5jZSBp bXByb3ZlbWVudC4gSGFsdmUgc2xlZXAgdGltZSBmb3IgbmV4dCBzbGVlcC4KKwkJCQkgKi8KKwkJ CQllbHNlCisJCQkJeworCQkJCQlsYXN0X3NsZWVwX2N5bGUgPSBNYXgobGFzdF9zbGVlcF9jeWxl ID4+IDEsIDEpOworCQkJCQlzbGVlcF9jeWxlID0gMDsKKwkJCQl9CiAJCQl9CiAJCQllbHNlCiAJ CQl7Ci0JCQkJLyogTm8gc3BlY2lhbCBjaGFyYWN0ZXJzIGZvdW5kLCBzbyBza2lwIHRoZSBlbnRp cmUgY2h1bmsgKi8KKwkJCQkvKgorCQkJCSAqIE5vIHNwZWNpYWwgY2hhcmFjdGVycyBmb3VuZCwg c28gc2tpcCB0aGUgZW50aXJlIGNodW5rIGFuZAorCQkJCSAqIGhhbHZlIHNsZWVwIHRpbWUgZm9y IG5leHQgc2xlZXAuCisJCQkJICovCiAJCQkJaW5wdXRfYnVmX3B0ciArPSBzaXplb2YoVmVjdG9y OCk7CisJCQkJbGFzdF9zbGVlcF9jeWxlID0gTWF4KGxhc3Rfc2xlZXBfY3lsZSA+PiAxLCAxKTsK IAkJCQljb250aW51ZTsKIAkJCX0KIAkJfQorCisJCS8qCisJCSAqIFZ1bG5lcmFibGUgdG8gb3Zl cmZsb3cgaWYgd2UgYXJlIGluIHF1b3RlIGZvciBtb3JlIHRoYW4gSU5UMTZfTUFYCisJCSAqIGNo YXJhY3RlcnMuCisJCSAqLworCQlzbGVlcF9jeWxlLS07CiAjZW5kaWYKIAogCQkvKiBPSyB0byBm ZXRjaCBhIGNoYXJhY3RlciAqLwotLSAKMi41MC4xCgo= --000000000000796541063cb711d8--