http://qs321.pair.com?node_id=11135836


in reply to Re: Proposed change regarding "Taint" support [overhead]
in thread Proposed change regarding "Taint" support

Hi Ken,

Looking at Steffen Mueller's original post on the idea, it seems that it achieves its speed up by turning taint-related operations (that normally get processed even when not running under -T) into no-ops.
As such, I expect you'll need to build a perl with -DNO_TAINT_SUPPORT in order to measure any speed improvements.

I've built such a version of current blead (on Windows), but haven't yet run any benchmarks.
To build it, I just hacked perl.h by inserting
#define SILENT_NO_TAINT_SUPPORT 1
just before (the already existing)
#if defined(SILENT_NO_TAINT_SUPPORT) && !defined(NO_TAINT_SUPPORT) # define NO_TAINT_SUPPORT 1 #endif
and then built perl in the usual way.
That seems to have resulted in the desired build. To use your first example:
perl -Te "use Devel::Peek; my $x = $ENV{PATH}; Dump $x;" SV = PVMG(0x5d1fc8) at 0x56e6f8 REFCNT = 1 FLAGS = (POK,IsCOW,pPOK) IV = 0 NV = 0 PV = 0x575628 "... long list of pathnames ..."\0 CUR = 852 LEN = 854 COW_REFCNT = 1
Note the absence of the "magic" flags.

Running make test on that build results in a number of failures. This is expected because some scripts do not cater for the possibility that -T is now a no-op.
Perhaps there are additional (ie unexpected) failures, too ... I don't know.
See below for the full test summary report.

Cheers,
Rob
Test Summary Report ------------------- run/switcht.t (Ws +tat: 0 Tests: 13 Failed: 4) Failed tests: 1, 3, 7, 9 op/taint.t (Ws +tat: 65280 Tests: 16 Failed: 1) Failed test: 16 Non-zero exit status: 255 Parse errors: Bad plan. You planned 1054 tests but ran 16. perf/taint.t (Ws +tat: 0 Tests: 4 Failed: 2) Failed tests: 1, 3 win32/runenv.t (Ws +tat: 0 Tests: 45 Failed: 1) Failed test: 23 ../cpan/Encode/t/taint.t (Ws +tat: 64000 Tests: 498 Failed: 250) Failed tests: 1-248, 497-498 Non-zero exit status: 250 ../cpan/Module-Metadata/t/taint.t (Ws +tat: 256 Tests: 2 Failed: 1) Failed test: 1 Non-zero exit status: 1 ../cpan/Scalar-List-Utils/t/tainted.t (Ws +tat: 768 Tests: 5 Failed: 3) Failed tests: 3-5 Non-zero exit status: 3 ../cpan/Test-Harness/t/compat/test-harness-compat.t (Ws +tat: 1536Tests: 120 Failed: 6) Failed tests: 6-7, 98-99, 102-103 Non-zero exit status: 6 ../cpan/Test-Harness/t/regression.t (Ws +tat: 8704Tests: 7522 Failed: 34) Failed tests: 2912, 2914-2915, 2917, 2922-2927, 2931-2932 2938, 2942-2944, 2949-2952, 6676, 6678-6679 6681, 6689-6692, 6698-6700, 6708, 6710-6711 Non-zero exit status: 34 ../cpan/Text-ParseWords/t/taint.t (Ws +tat: 0 Tests: 2 Failed: 2) Failed tests: 1-2 ../dist/Net-Ping/t/450_service.t (Ws +tat: 0 Tests: 26 Failed: 0) TODO passed: 9 ../ext/IPC-Open3/t/IPC-Open3.t (Ws +tat: 0 Tests: 45 Failed: 0) TODO passed: 25 ../lib/locale.t (Ws +tat: 0 Tests: 726 Failed: 157) Failed tests: 17-26, 32-37, 45-49, 57-61, 64-68, 71-75 78-82, 85-89, 92-96, 98-102, 116-120, 123-128 131-136, 155, 169, 171-176, 178-183, 185-190 192-197, 496, 498, 500, 502, 504, 506, 508 510, 512, 514, 516, 518, 520, 522, 552 554, 556, 558, 560, 562, 564, 566, 568 570, 572, 574, 576, 578, 608, 610, 612 614, 616, 618, 620, 622, 624, 626, 648 650, 652, 654, 656, 658, 660, 662, 664 666, 688, 690, 692, 694, 696, 698, 700 702, 704, 706 ../lib/overload.t (Ws +tat: 0 Tests: 5363 Failed: 780) Failed tests: 622-623, 628, 633, 636, 641, 646, 649-650 655, 660, 663, 668, 673, 676-677, 682, 687 690, 695, 700, 703-704, 709, 714, 717, 722 727, 730-731, 736, 741, 744, 749, 754, 757-758 763, 768, 771, 776, 781, 784-785, 790, 795 798, 803, 808, 811-812, 817, 822, 825, 830 835, 838-839, 844, 849, 852, 857, 862, 865-866 871, 876, 879, 884, 889, 892-893, 898, 903 906, 911, 916, 919-920, 925, 930, 933, 938 943, 946-947, 952, 957, 960, 965, 970, 973-974 979, 984, 987, 992, 997, 1000-1001, 1006 1011, 1014, 1019, 1024, 1027-1028, 1033 1038, 1041, 1046, 1051, 1054-1055, 1060 1065, 1068, 1073, 1078, 1081-1082, 1087 1092, 1095, 1100, 1105, 1108-1109, 1114 1119, 1122, 1127, 1132, 1135-1136, 1141 1146, 1149, 1154, 1159, 1162-1163, 1168 1173, 1176, 1181, 1186, 1189-1190, 1195 1200, 1203, 1208, 1213, 1216-1217, 1222 1227, 1230, 1235, 1240, 1243-1244, 1249 1254, 1257, 1262, 1267, 1270-1271, 1276 1281, 1284, 1289, 1294, 1297-1298, 1303 1308, 1311, 1316, 1321, 1324-1325, 1330 1335, 1338, 1343, 1348, 1351-1352, 1357 1362, 1365, 1370, 1375, 1378-1379, 1384 1389, 1392, 1397, 1402, 1405-1406, 1411 1416, 1419, 1424, 1429, 1432-1433, 1438 1443, 1446, 1451, 1456, 1459-1460, 1465 1470, 1473, 1478, 1483, 1486-1487, 1492 1497, 1500, 1505, 1510, 1513-1514, 1519 1524, 1527, 1532, 1537, 1540-1541, 1546 1551, 1554, 1559, 1564, 1567-1568, 1573 1578, 1581, 1586, 1591, 1594-1595, 1600 1605, 1608, 1613, 1618, 1621-1622, 1627 1632, 1635, 1640, 1645, 1648-1649, 1654 1659, 1662, 1667, 1672, 1675-1676, 1681 1686, 1689, 1694, 1699, 1702-1703, 1708 1713, 1716, 1721, 1726, 1729-1730, 1735 1740, 1743, 1748, 1753, 1756-1757, 1762 1767, 1770, 1775, 1780, 1783-1784, 1789 1794, 1797, 1802, 1807, 1810-1811, 1816 1821, 1824, 1829, 1834, 1837-1838, 1843 1848, 1851, 1856, 1861, 1864-1865, 1870 1875, 1878, 1883, 1888, 1891-1892, 1897 1902, 1905, 1910, 1915, 1918-1919, 1924 1929, 1932, 1937, 1942, 1945-1946, 1951 1956, 1959, 1964, 1969, 1972-1973, 1978 1983, 1986, 1991, 1996, 1999-2000, 2005 2010, 2013, 2018, 2023, 2026-2027, 2032 2037, 2040, 2045, 2050, 2053-2054, 2059 2064, 2067, 2072, 2077, 2080-2081, 2086 2091, 2094, 2099, 2104, 2107-2108, 2113 2118, 2121, 2126, 2131, 2134-2135, 2140 2145, 2148, 2153, 2158, 2161-2162, 2167 2172, 2175, 2180, 2185, 2188-2189, 2194 2199, 2202, 2207, 2212, 2215-2216, 2221 2226, 2229, 2234, 2239, 2242-2243, 2248 2253, 2256, 2261, 2266, 2269-2270, 2275 2280, 2283, 2288, 2293, 2296-2297, 2302 2307, 2310, 2315, 2320, 2323-2324, 2329 2334, 2337, 2342, 2347, 2350-2351, 2356 2361, 2364, 2369, 2374, 2377-2378, 2383 2388, 2391, 2396, 2401, 2404-2405, 2410 2415, 2418, 2423, 2428, 2431-2432, 2437 2442, 2445, 2450, 2455, 2458-2459, 2464 2469, 2472, 2477, 2482, 2485-2486, 2491 2496, 2499, 2504, 2509, 2512-2513, 2518 2523, 2526, 2531, 2536, 2539-2540, 2545 2550, 2553, 2558, 2563, 2566-2567, 2572 2577, 2580, 2585, 2590, 2593-2594, 2599 2604, 2607, 2612, 2617, 2620-2621, 2626 2631, 2634, 2639, 2644, 2647-2648, 2653 2658, 2661, 2666, 2671, 2674-2675, 2680 2685, 2688, 2693, 2698, 2701-2702, 2707 2712, 2715, 2720, 2725, 2728-2729, 2734 2739, 2742, 2747, 2752, 2755-2756, 2761 2766, 2769, 2774, 2779, 2782-2783, 2788 2793, 2796, 2801, 2806, 2809-2810, 2815 2820, 2823, 2828, 2833, 2836-2837, 2842 2847, 2850, 2855, 2860, 2863-2864, 2869 2874, 2877, 2882, 2887, 3538-3539, 3544 3549, 3552, 3557, 3562, 3565-3566, 3571 3576, 3579, 3584, 3589, 3592-3593, 3598 3603, 3606, 3611, 3616, 3619-3620, 3625 3630, 3633, 3638, 3643, 3646-3647, 3652 3657, 3660, 3665, 3670, 3673-3674, 3679 3684, 3687, 3692, 3697, 3700-3701, 3706 3711, 3714, 3719, 3724, 3727-3728, 3733 3738, 3741, 3746, 3751, 3754-3755, 3760 3765, 3768, 3773, 3778, 3781-3782, 3787 3792, 3795, 3800, 3805, 3808-3809, 3814 3819, 3822, 3827, 3832, 3835-3836, 3841 3846, 3849, 3854, 3859, 3862-3863, 3868 3873, 3876, 3881, 3886, 3889-3890, 3895 3900, 3903, 3908, 3913, 3916-3917, 3922 3927, 3930, 3935, 3940, 3943-3944, 3949 3954, 3957, 3962, 3967, 3970-3971, 3976 3981, 3984, 3989, 3994, 3997-3998, 4003 4008, 4011, 4016, 4021, 4024-4025, 4030 4035, 4038, 4043, 4048, 4051-4052, 4057 4062, 4065, 4070, 4075, 4078-4079, 4084 4089, 4092, 4097, 4102, 4105-4106, 4111 4116, 4119, 4124, 4129, 4186-4187, 4192 4197, 4200, 4205, 4210, 4213-4214, 4219 4224, 4227, 4232, 4237, 4789, 4803, 4845 4859, 4873, 4887, 4892-4893, 4898, 4903 4906, 4911-4912, 4917, 4922, 4925, 4930-4931 4936, 4941, 4944-4945, 4950, 4955 ../lib/warnings.t (Ws +tat: 0 Tests: 925 Failed: 3) Failed tests: 755-757 Files=2692, Tests=1140111, 1715 wallclock secs (69.89 usr + 6.40 sys += 76.28 CPU) Result: FAIL make: *** [GNUmakefile:1965: test] Error 1244

Replies are listed 'Best First'.
Re^3: Proposed change regarding "Taint" support [overhead]
by kcott (Bishop) on Aug 14, 2021 at 05:32 UTC

    ++ Many thanks for this. There's clearly a lot going on under the hood that I wasn't aware of; particularly with respect to "... normally get processed even when not running under -T ...".

    I decided to have a bit of a nose around some of the various items you discussed. The repo link on https://metacpan.org/pod/perl handily took me to the blead branch of the "Github - Perl/perl5" page.

    More of a curiosity than anything related to tainting; my eye was drawn to the browser tab which appeared to have the emoji for a Bactrian camel (🐫) rather than the usual Dromedary camel (🐪). The text on the tab is very small and I thought that maybe I was miscounting the humps 😕; but no, on checking the source, it appears on two lines:

      <title>GitHub - Perl/perl5: 🐫 The Perl programming language</title>
        <meta name="description" content="🐫 The Perl programming language ...>
    

    I thought this was odd, but then had a vague recollection of there being an O'Reilly ™, ® or © associated with the camel image when used with Perl. After searching through a number of O'Reilly, Perl.com and Perl.org pages, I finally found it in "perl.org - Site Information". Of course, I may be overthinking this; it could just be a typo: &#1212483; instead of &#1212482;.

    Anyway, back to tainting. I located perl.h — that was very generous of you to void your warranty to help me. :-)

    /* By compiling a perl with -DNO_TAINT_SUPPORT or -DSILENT_NO_TAINT_SU +PPORT, * ... * * DANGER! Using NO_TAINT_SUPPORT or SILENT_NO_TAINT_SUPPORT * voids your nonexistent warranty! */

    I also looked in the t/ directory for the tests you indicated had failed: run/switcht.t was OK with only 66 lines; op/taint.t was somewhat more daunting with 2,986 lines (I didn't read it all). Realising that there was probably tens of thousands of lines in total, I left it there.

    Thanks again.

    — Ken