Change information
Commit message:
runtime: remove duplicated code in no scan slow path
In the no scan reuse path, goto the postMallocgc call in the end rather
than duplicating it. This only has an effect in the no scan slow path
function, but adds some noise to the generated files: we put
nextFree/nextFreeFast into a block so that there are no new variables we
jump over. Also the label has a goto before it so the compiler doesn't
complain if we don't use the label, and a nop statement after it so that
the call to postMallocgc doesn't appear in a labeledstatement, but is
instead in a block, where mkmalloc expects it.
goos: linux
goarch: amd64
pkg: runtime
cpu: Intel(R) Xeon(R) Platinum 8481C CPU @ 2.70GHz
│ baseline │ experiment │
│ sec/op │ sec/op vs base │
Mallocgc/scan=noscan/size=1/kind=new-88 4.701n ± 0% 4.695n ± 0% -0.14% (p=0.049 n=10)
Mallocgc/scan=noscan/size=1/kind=mallocgc-88 6.976n ± 0% 6.953n ± 0% -0.33% (p=0.000 n=10)
Mallocgc/scan=noscan/size=2/kind=new-88 5.113n ± 0% 5.074n ± 0% -0.75% (p=0.000 n=10)
Mallocgc/scan=noscan/size=2/kind=mallocgc-88 6.646n ± 0% 6.611n ± 0% -0.54% (p=0.000 n=10)
Mallocgc/scan=noscan/size=3/kind=new-88 6.304n ± 8% 6.271n ± 1% -0.53% (p=0.000 n=10)
Mallocgc/scan=noscan/size=3/kind=mallocgc-88 7.528n ± 0% 7.479n ± 0% -0.65% (p=0.000 n=10)
Mallocgc/scan=noscan/size=4/kind=new-88 6.556n ± 0% 6.496n ± 0% -0.92% (p=0.000 n=10)
Mallocgc/scan=noscan/size=4/kind=mallocgc-88 7.901n ± 0% 7.841n ± 0% -0.76% (p=0.000 n=10)
Mallocgc/scan=noscan/size=5/kind=new-88 7.778n ± 1% 7.707n ± 1% -0.92% (p=0.008 n=10)
Mallocgc/scan=noscan/size=5/kind=mallocgc-88 9.588n ± 2% 9.046n ± 0% -5.65% (p=0.000 n=10)
Mallocgc/scan=noscan/size=6/kind=new-88 9.366n ± 0% 9.280n ± 0% -0.91% (p=0.000 n=10)
Mallocgc/scan=noscan/size=6/kind=mallocgc-88 10.80n ± 0% 10.70n ± 0% -0.97% (p=0.000 n=10)
Mallocgc/scan=noscan/size=7/kind=new-88 9.737n ± 0% 9.642n ± 0% -0.98% (p=0.000 n=10)
Mallocgc/scan=noscan/size=7/kind=mallocgc-88 11.01n ± 0% 10.92n ± 0% -0.82% (p=0.000 n=10)
Mallocgc/scan=noscan/size=8/kind=new-88 9.149n ± 0% 9.081n ± 0% -0.74% (p=0.000 n=10)
Mallocgc/scan=noscan/size=8/kind=mallocgc-88 10.51n ± 0% 10.45n ± 1% -0.57% (p=0.000 n=10)
Mallocgc/scan=noscan/size=9/kind=new-88 15.12n ± 1% 14.38n ± 1% -4.89% (p=0.000 n=10)
Mallocgc/scan=noscan/size=9/kind=mallocgc-88 16.14n ± 4% 15.90n ± 0% -1.52% (p=0.000 n=10)
Mallocgc/scan=noscan/size=10/kind=new-88 14.34n ± 1% 14.13n ± 1% -1.46% (p=0.000 n=10)
Mallocgc/scan=noscan/size=10/kind=mallocgc-88 15.56n ± 1% 15.38n ± 0% -1.16% (p=0.000 n=10)
Mallocgc/scan=noscan/size=11/kind=new-88 14.53n ± 0% 14.29n ± 0% -1.62% (p=0.000 n=10)
Mallocgc/scan=noscan/size=11/kind=mallocgc-88 15.97n ± 0% 15.84n ± 0% -0.81% (p=0.000 n=10)
Mallocgc/scan=noscan/size=12/kind=new-88 14.31n ± 1% 14.05n ± 1% -1.82% (p=0.000 n=10)
Mallocgc/scan=noscan/size=12/kind=mallocgc-88 15.55n ± 0% 15.32n ± 0% -1.51% (p=0.000 n=10)
Mallocgc/scan=noscan/size=13/kind=new-88 14.59n ± 0% 14.33n ± 0% -1.78% (p=0.000 n=10)
Mallocgc/scan=noscan/size=13/kind=mallocgc-88 16.09n ± 0% 15.80n ± 1% -1.83% (p=0.000 n=10)
Mallocgc/scan=noscan/size=14/kind=new-88 14.59n ± 0% 14.11n ± 1% -3.26% (p=0.000 n=10)
Mallocgc/scan=noscan/size=14/kind=mallocgc-88 15.74n ± 1% 15.30n ± 1% -2.86% (p=0.000 n=10)
Mallocgc/scan=noscan/size=15/kind=new-88 14.59n ± 1% 14.44n ± 1% -0.99% (p=0.000 n=10)
Mallocgc/scan=noscan/size=15/kind=mallocgc-88 16.03n ± 1% 15.85n ± 0% -1.12% (p=0.000 n=10)
Mallocgc/scan=noscan/size=16/kind=new-88 13.35n ± 0% 13.15n ± 0% -1.50% (p=0.000 n=10)
Mallocgc/scan=noscan/size=16/kind=mallocgc-88 14.52n ± 0% 14.28n ± 0% -1.62% (p=0.000 n=10)
Mallocgc/scan=noscan/size=24/kind=new-88 16.06n ± 0% 15.86n ± 1% -1.25% (p=0.000 n=10)
Mallocgc/scan=noscan/size=24/kind=mallocgc-88 17.36n ± 1% 17.11n ± 1% -1.41% (p=0.000 n=10)
Mallocgc/scan=noscan/size=32/kind=new-88 18.87n ± 1% 18.38n ± 1% -2.60% (p=0.000 n=10)
Mallocgc/scan=noscan/size=32/kind=mallocgc-88 20.04n ± 0% 19.76n ± 1% -1.40% (p=0.000 n=10)
Mallocgc/scan=noscan/size=48/kind=new-88 24.79n ± 1% 24.33n ± 1% -1.86% (p=0.000 n=10)
Mallocgc/scan=noscan/size=48/kind=mallocgc-88 25.49n ± 1% 25.07n ± 1% -1.61% (p=0.000 n=10)
Mallocgc/scan=noscan/size=64/kind=new-88 31.02n ± 1% 30.30n ± 1% -2.34% (p=0.000 n=10)
Mallocgc/scan=noscan/size=64/kind=mallocgc-88 31.75n ± 1% 31.09n ± 1% -2.09% (p=0.000 n=10)
Mallocgc/scan=noscan/size=80/kind=new-88 37.26n ± 1% 36.43n ± 0% -2.23% (p=0.000 n=10)
Mallocgc/scan=noscan/size=80/kind=mallocgc-88 37.57n ± 1% 36.49n ± 1% -2.87% (p=0.000 n=10)
Mallocgc/scan=noscan/size=96/kind=new-88 43.11n ± 1% 42.17n ± 1% -2.18% (p=0.000 n=10)
Mallocgc/scan=noscan/size=96/kind=mallocgc-88 44.12n ± 1% 42.95n ± 1% -2.65% (p=0.000 n=10)
Mallocgc/scan=noscan/size=112/kind=new-88 50.54n ± 1% 48.53n ± 1% -3.99% (p=0.000 n=10)
Mallocgc/scan=noscan/size=112/kind=mallocgc-88 50.53n ± 2% 48.51n ± 1% -4.01% (p=0.000 n=10)
Mallocgc/scan=noscan/size=128/kind=new-88 56.10n ± 1% 54.55n ± 1% -2.76% (p=0.000 n=10)
Mallocgc/scan=noscan/size=128/kind=mallocgc-88 56.66n ± 1% 54.72n ± 1% -3.42% (p=0.000 n=10)
Mallocgc/scan=noscan/size=144/kind=new-88 64.96n ± 1% 63.57n ± 1% -2.15% (p=0.000 n=10)
Mallocgc/scan=noscan/size=144/kind=mallocgc-88 64.61n ± 1% 63.43n ± 1% -1.83% (p=0.000 n=10)
Mallocgc/scan=noscan/size=160/kind=new-88 71.78n ± 1% 70.39n ± 1% -1.94% (p=0.000 n=10)
Mallocgc/scan=noscan/size=160/kind=mallocgc-88 71.64n ± 1% 69.60n ± 1% -2.85% (p=0.000 n=10)
Mallocgc/scan=noscan/size=176/kind=new-88 79.03n ± 1% 77.52n ± 1% -1.92% (p=0.000 n=10)
Mallocgc/scan=noscan/size=176/kind=mallocgc-88 78.59n ± 1% 77.16n ± 1% -1.83% (p=0.000 n=10)
Mallocgc/scan=noscan/size=192/kind=new-88 83.71n ± 1% 82.55n ± 1% -1.39% (p=0.005 n=10)
Mallocgc/scan=noscan/size=192/kind=mallocgc-88 83.21n ± 1% 82.48n ± 1% -0.88% (p=0.002 n=10)
Mallocgc/scan=noscan/size=208/kind=new-88 92.03n ± 1% 90.84n ± 1% -1.29% (p=0.002 n=10)
Mallocgc/scan=noscan/size=208/kind=mallocgc-88 91.67n ± 1% 90.78n ± 2% -0.97% (p=0.015 n=10)
Mallocgc/scan=noscan/size=224/kind=new-88 96.05n ± 1% 96.22n ± 1% ~ (p=0.529 n=10)
Mallocgc/scan=noscan/size=224/kind=mallocgc-88 96.02n ± 1% 94.05n ± 2% -2.05% (p=0.001 n=10)
Mallocgc/scan=noscan/size=240/kind=new-88 103.9n ± 1% 102.9n ± 2% ~ (p=0.060 n=10)
Mallocgc/scan=noscan/size=240/kind=mallocgc-88 104.0n ± 0% 102.9n ± 1% -1.15% (p=0.000 n=10)
Mallocgc/scan=noscan/size=256/kind=new-88 111.2n ± 1% 109.0n ± 1% -1.98% (p=0.000 n=10)
Mallocgc/scan=noscan/size=256/kind=mallocgc-88 110.2n ± 1% 109.1n ± 1% -1.00% (p=0.002 n=10)
Mallocgc/scan=noscan/size=288/kind=new-88 122.2n ± 1% 120.7n ± 2% -1.19% (p=0.000 n=10)
Mallocgc/scan=noscan/size=288/kind=mallocgc-88 121.0n ± 1% 119.4n ± 1% -1.40% (p=0.001 n=10)
Mallocgc/scan=noscan/size=320/kind=new-88 135.2n ± 1% 132.8n ± 1% -1.74% (p=0.000 n=10)
Mallocgc/scan=noscan/size=320/kind=mallocgc-88 133.8n ± 1% 132.9n ± 1% -0.64% (p=0.011 n=10)
Mallocgc/scan=noscan/size=352/kind=new-88 151.9n ± 1% 151.1n ± 1% -0.56% (p=0.008 n=10)
Mallocgc/scan=noscan/size=352/kind=mallocgc-88 151.1n ± 1% 151.3n ± 1% ~ (p=0.424 n=10)
Mallocgc/scan=noscan/size=384/kind=new-88 159.4n ± 1% 157.5n ± 1% -1.22% (p=0.000 n=10)
Mallocgc/scan=noscan/size=384/kind=mallocgc-88 158.3n ± 1% 157.8n ± 2% ~ (p=0.148 n=10)
Mallocgc/scan=noscan/size=416/kind=new-88 174.0n ± 1% 172.2n ± 2% ~ (p=0.305 n=10)
Mallocgc/scan=noscan/size=416/kind=mallocgc-88 174.7n ± 1% 173.3n ± 1% -0.80% (p=0.022 n=10)
Mallocgc/scan=noscan/size=448/kind=new-88 183.0n ± 1% 182.3n ± 1% ~ (p=0.110 n=10)
Mallocgc/scan=noscan/size=448/kind=mallocgc-88 182.7n ± 1% 180.4n ± 1% -1.23% (p=0.007 n=10)
Mallocgc/scan=noscan/size=480/kind=new-88 205.5n ± 1% 204.6n ± 1% ~ (p=0.101 n=10)
Mallocgc/scan=noscan/size=480/kind=mallocgc-88 204.4n ± 1% 205.0n ± 1% ~ (p=0.077 n=10)
Mallocgc/scan=noscan/size=512/kind=new-88 218.4n ± 1% 217.6n ± 1% ~ (p=0.643 n=10)
Mallocgc/scan=noscan/size=512/kind=mallocgc-88 217.6n ± 1% 215.5n ± 1% -0.97% (p=0.004 n=10)
Mallocgc/scan=scan/size=8/kind=new-88 10.93n ± 0% 10.88n ± 0% -0.41% (p=0.006 n=10)
Mallocgc/scan=scan/size=8/kind=mallocgc-88 11.94n ± 0% 11.85n ± 0% -0.75% (p=0.000 n=10)
Mallocgc/scan=scan/size=16/kind=new-88 14.81n ± 1% 15.03n ± 1% +1.49% (p=0.000 n=10)
Mallocgc/scan=scan/size=16/kind=mallocgc-88 16.12n ± 0% 16.05n ± 1% -0.37% (p=0.003 n=10)
Mallocgc/scan=scan/size=24/kind=new-88 18.23n ± 1% 18.23n ± 1% ~ (p=0.954 n=10)
Mallocgc/scan=scan/size=24/kind=mallocgc-88 19.46n ± 0% 19.30n ± 1% -0.80% (p=0.014 n=10)
Mallocgc/scan=scan/size=32/kind=new-88 20.48n ± 0% 20.22n ± 0% -1.25% (p=0.000 n=10)
Mallocgc/scan=scan/size=32/kind=mallocgc-88 21.72n ± 1% 21.47n ± 1% -1.13% (p=0.000 n=10)
Mallocgc/scan=scan/size=48/kind=new-88 26.56n ± 1% 26.03n ± 0% -2.01% (p=0.000 n=10)
Mallocgc/scan=scan/size=48/kind=mallocgc-88 27.96n ± 1% 27.61n ± 1% -1.25% (p=0.000 n=10)
Mallocgc/scan=scan/size=64/kind=new-88 31.95n ± 1% 31.37n ± 1% -1.83% (p=0.001 n=10)
Mallocgc/scan=scan/size=64/kind=mallocgc-88 32.48n ± 2% 32.16n ± 1% -1.00% (p=0.005 n=10)
Mallocgc/scan=scan/size=80/kind=new-88 39.54n ± 2% 38.49n ± 1% -2.64% (p=0.000 n=10)
Mallocgc/scan=scan/size=80/kind=mallocgc-88 40.04n ± 2% 39.25n ± 1% -1.99% (p=0.000 n=10)
Mallocgc/scan=scan/size=96/kind=new-88 44.99n ± 1% 44.51n ± 1% -1.07% (p=0.025 n=10)
Mallocgc/scan=scan/size=96/kind=mallocgc-88 45.75n ± 1% 45.28n ± 2% -1.05% (p=0.003 n=10)
Mallocgc/scan=scan/size=112/kind=new-88 52.31n ± 2% 50.68n ± 1% -3.12% (p=0.000 n=10)
Mallocgc/scan=scan/size=112/kind=mallocgc-88 51.62n ± 1% 50.62n ± 1% -1.93% (p=0.000 n=10)
Mallocgc/scan=scan/size=128/kind=new-88 56.66n ± 1% 56.33n ± 1% ~ (p=0.052 n=10)
Mallocgc/scan=scan/size=128/kind=mallocgc-88 57.20n ± 1% 56.30n ± 1% -1.57% (p=0.000 n=10)
Mallocgc/scan=scan/size=144/kind=new-88 68.48n ± 2% 67.41n ± 2% -1.57% (p=0.003 n=10)
Mallocgc/scan=scan/size=144/kind=mallocgc-88 67.55n ± 1% 66.06n ± 1% -2.21% (p=0.000 n=10)
Mallocgc/scan=scan/size=160/kind=new-88 75.42n ± 1% 73.86n ± 2% -2.07% (p=0.000 n=10)
Mallocgc/scan=scan/size=160/kind=mallocgc-88 74.39n ± 1% 73.36n ± 1% -1.38% (p=0.003 n=10)
Mallocgc/scan=scan/size=176/kind=new-88 80.22n ± 1% 79.15n ± 1% -1.34% (p=0.008 n=10)
Mallocgc/scan=scan/size=176/kind=mallocgc-88 79.47n ± 1% 79.03n ± 2% ~ (p=0.110 n=10)
Mallocgc/scan=scan/size=192/kind=new-88 86.95n ± 1% 85.90n ± 1% -1.21% (p=0.034 n=10)
Mallocgc/scan=scan/size=192/kind=mallocgc-88 85.85n ± 1% 85.34n ± 1% -0.59% (p=0.004 n=10)
Mallocgc/scan=scan/size=208/kind=new-88 92.53n ± 1% 92.22n ± 1% ~ (p=0.105 n=10)
Mallocgc/scan=scan/size=208/kind=mallocgc-88 92.27n ± 1% 92.41n ± 2% ~ (p=0.912 n=10)
Mallocgc/scan=scan/size=224/kind=new-88 101.0n ± 1% 102.4n ± 1% +1.34% (p=0.006 n=10)
Mallocgc/scan=scan/size=224/kind=mallocgc-88 99.61n ± 1% 99.37n ± 1% ~ (p=0.393 n=10)
Mallocgc/scan=scan/size=240/kind=new-88 104.7n ± 1% 105.5n ± 1% ~ (p=0.100 n=10)
Mallocgc/scan=scan/size=240/kind=mallocgc-88 104.4n ± 1% 105.0n ± 1% ~ (p=0.403 n=10)
Mallocgc/scan=scan/size=256/kind=new-88 110.2n ± 1% 110.6n ± 1% ~ (p=0.362 n=10)
Mallocgc/scan=scan/size=256/kind=mallocgc-88 110.2n ± 1% 110.5n ± 1% ~ (p=0.592 n=10)
Mallocgc/scan=scan/size=288/kind=new-88 127.4n ± 2% 127.0n ± 1% ~ (p=0.492 n=10)
Mallocgc/scan=scan/size=288/kind=mallocgc-88 126.4n ± 1% 126.3n ± 1% ~ (p=0.755 n=10)
Mallocgc/scan=scan/size=320/kind=new-88 140.4n ± 1% 139.8n ± 1% ~ (p=0.361 n=10)
Mallocgc/scan=scan/size=320/kind=mallocgc-88 141.1n ± 1% 140.9n ± 1% ~ (p=0.927 n=10)
Mallocgc/scan=scan/size=352/kind=new-88 152.6n ± 1% 152.6n ± 1% ~ (p=0.927 n=10)
Mallocgc/scan=scan/size=352/kind=mallocgc-88 152.9n ± 1% 151.8n ± 1% ~ (p=0.066 n=10)
Mallocgc/scan=scan/size=384/kind=new-88 168.2n ± 1% 165.6n ± 1% -1.58% (p=0.002 n=10)
Mallocgc/scan=scan/size=384/kind=mallocgc-88 166.8n ± 1% 165.3n ± 1% -0.93% (p=0.018 n=10)
Mallocgc/scan=scan/size=416/kind=new-88 174.6n ± 1% 173.8n ± 1% ~ (p=0.101 n=10)
Mallocgc/scan=scan/size=416/kind=mallocgc-88 174.4n ± 1% 173.7n ± 1% ~ (p=0.424 n=10)
Mallocgc/scan=scan/size=448/kind=new-88 194.5n ± 1% 195.7n ± 1% +0.59% (p=0.012 n=10)
Mallocgc/scan=scan/size=448/kind=mallocgc-88 194.0n ± 1% 194.6n ± 1% ~ (p=0.286 n=10)
Mallocgc/scan=scan/size=480/kind=new-88 204.3n ± 1% 204.0n ± 1% ~ (p=0.810 n=10)
Mallocgc/scan=scan/size=480/kind=mallocgc-88 204.1n ± 1% 203.8n ± 0% ~ (p=0.616 n=10)
Mallocgc/scan=scan/size=512/kind=new-88 217.8n ± 1% 217.0n ± 1% ~ (p=0.210 n=10)
Mallocgc/scan=scan/size=512/kind=mallocgc-88 218.7n ± 1% 215.4n ± 1% -1.51% (p=0.000 n=10)
Mallocgc/scan=scanslice/size=8-88 13.33n ± 0% 13.20n ± 0% -0.98% (p=0.000 n=10)
Mallocgc/scan=scanslice/size=16-88 22.67n ± 0% 22.55n ± 0% -0.53% (p=0.000 n=10)
Mallocgc/scan=scanslice/size=24-88 25.52n ± 0% 25.37n ± 0% -0.61% (p=0.000 n=10)
Mallocgc/scan=scanslice/size=32-88 27.77n ± 0% 27.83n ± 1% ~ (p=0.382 n=10)
Mallocgc/scan=scanslice/size=48-88 33.97n ± 0% 33.80n ± 1% ~ (p=0.085 n=10)
Mallocgc/scan=scanslice/size=64-88 38.23n ± 1% 37.95n ± 1% -0.73% (p=0.050 n=10)
Mallocgc/scan=scanslice/size=80-88 45.38n ± 0% 45.17n ± 1% -0.47% (p=0.004 n=10)
Mallocgc/scan=scanslice/size=96-88 50.79n ± 0% 50.56n ± 0% ~ (p=0.063 n=10)
Mallocgc/scan=scanslice/size=112-88 55.70n ± 1% 55.92n ± 1% ~ (p=0.424 n=10)
Mallocgc/scan=scanslice/size=128-88 60.19n ± 1% 59.73n ± 1% ~ (p=0.060 n=10)
Mallocgc/scan=scanslice/size=144-88 69.30n ± 1% 67.95n ± 1% -1.94% (p=0.000 n=10)
Mallocgc/scan=scanslice/size=160-88 74.91n ± 1% 74.58n ± 1% ~ (p=0.052 n=10)
Mallocgc/scan=scanslice/size=176-88 80.61n ± 1% 79.55n ± 1% -1.31% (p=0.004 n=10)
Mallocgc/scan=scanslice/size=192-88 87.58n ± 1% 86.90n ± 1% ~ (p=0.105 n=10)
Mallocgc/scan=scanslice/size=208-88 93.00n ± 1% 92.48n ± 1% -0.55% (p=0.022 n=10)
Mallocgc/scan=scanslice/size=224-88 101.15n ± 1% 99.08n ± 1% -2.05% (p=0.001 n=10)
Mallocgc/scan=scanslice/size=240-88 105.3n ± 1% 104.0n ± 1% -1.19% (p=0.002 n=10)
Mallocgc/scan=scanslice/size=256-88 110.2n ± 1% 110.2n ± 1% ~ (p=0.810 n=10)
Mallocgc/scan=scanslice/size=288-88 127.4n ± 1% 127.0n ± 1% ~ (p=0.446 n=10)
Mallocgc/scan=scanslice/size=320-88 142.6n ± 2% 141.2n ± 2% ~ (p=0.072 n=10)
Mallocgc/scan=scanslice/size=352-88 153.8n ± 1% 152.3n ± 1% -0.98% (p=0.005 n=10)
Mallocgc/scan=scanslice/size=384-88 168.0n ± 1% 166.4n ± 1% ~ (p=0.060 n=10)
Mallocgc/scan=scanslice/size=416-88 175.1n ± 2% 174.3n ± 1% ~ (p=0.127 n=10)
Mallocgc/scan=scanslice/size=448-88 196.5n ± 1% 196.4n ± 1% ~ (p=0.754 n=10)
Mallocgc/scan=scanslice/size=480-88 204.0n ± 2% 204.3n ± 1% ~ (p=0.446 n=10)
Mallocgc/scan=scanslice/size=512-88 218.2n ± 1% 217.4n ± 1% ~ (p=0.423 n=10)
geomean 50.01n 49.45n -1.11%
For #79286
Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64_c2s16-perf_vs_parent,gotip-linux-amd64_c3h88-perf_vs_parent,gotip-linux-arm64_c4ah72-perf_vs_parent,gotip-linux-arm64_c4as16-perf_vs_parent
Change-Id: Ie5fe8007733ae94556792146d1cd7c666a6a6964
Files:
- M src/runtime/_mkmalloc/mkmalloc.go
- M src/runtime/malloc_generated.go
- M src/runtime/malloc_stubs.go
Change size: L
Delta: 3 files changed, 543 insertions(+), 376 deletions(-)
Branch: refs/heads/master
Submit Requirements:
Code-Review: +1 by Michael Matloob, +2 by Michael Pratt
TryBots-Pass: TryBot-Bypass+1 by Michael Matloob