csi-driver-smb
csi-driver-smb copied to clipboard
fix: Remove excessive recursive variable expansions
Modern GNU make (version >= 4.4) has backward-incompatible feature:
- WARNING: Backward-incompatibility! Previously makefile variables marked as export were not exported to commands started by the $(shell ...) function. Now, all exported variables are exported to $(shell ...). If this leads to recursion during expansion, then for backward-compatibility the value from the original environment is used.
This makes any invocation of make
command very costly. Compare the performance of make 4.3 vs. 4.4:
$ time ~/Sources/make-4.3/make smb ARCH=$(go env GOARCH)
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -ldflags "-X github.com/kubernetes-csi/csi-driver-smb/pkg/smb.driverVersion=v1.15.0 -X github.com/kubernetes-csi/csi-driver-smb/pkg/smb.gitCommit=f5ced814f628ddee2c9f3e6af505c5a6123e50f4 -X github.com/kubernetes-csi/csi-driver-smb/pkg/smb.buildDate=2024-05-15T00:00:09Z -s -w -extldflags "-static"" -mod vendor -o _output/amd64/smbplugin ./cmd/smbplugin
real 0m38.504s
user 3m50.580s
sys 0m23.502s
$ time ~/Sources/make-4.4/make smb ARCH=$(go env GOARCH)
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -ldflags "-X github.com/kubernetes-csi/csi-driver-smb/pkg/smb.driverVersion=v1.15.0 -X github.com/kubernetes-csi/csi-driver-smb/pkg/smb.gitCommit=f5ced814f628ddee2c9f3e6af505c5a6123e50f4 -X github.com/kubernetes-csi/csi-driver-smb/pkg/smb.buildDate=2024-05-15T00:04:04Z -s -w -extldflags "-static"" -mod vendor -o _output/amd64/smbplugin ./cmd/smbplugin
real 16m59.851s
user 13m16.490s
sys 13m46.418s
The same variables are evaluated again and again millions times:
$ rpm -qf /usr/bin/make
make-4.4.1-6.fc40.x86_64
$ /usr/bin/make -d smb ARCH=$(go env GOARCH) 2>&1 |grep "not recursively expanding.*to export to shell function" |wc -l
2171342
The patch doesn't change user-visible behavior of Makefile, but makes make
command as performant as it used to be in case of make 4.3.
What type of PR is this?
/kind bug
What this PR does / why we need it:
Modern make
(>= 4.4) builds csi driver extremely slowly.
Release note:
none
[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by: mpatlasov Once this PR has been reviewed and has the lgtm label, please assign msau42 for approval. For more information see the Kubernetes Code Review Process.
The full list of commands accepted by this bot can be found here.
Approvers can indicate their approval by writing /approve
in a comment
Approvers can cancel approval by writing /approve cancel
in a comment
Hi @mpatlasov. Thanks for your PR.
I'm waiting for a kubernetes-csi member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test
on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should join the org to skip this step.
Once the patch is verified, the new status will be reflected by the ok-to-test
label.
I understand the commands that are listed here.
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.
/ok-to-test
Pull Request Test Coverage Report for Build 9088044825
Details
- 0 of 0 changed or added relevant lines in 0 files are covered.
- No unchanged relevant lines lost coverage.
- Overall coverage remained the same at 79.093%
Totals | |
---|---|
Change from base Build 9074623042: | 0.0% |
Covered Lines: | 942 |
Relevant Lines: | 1191 |
💛 - Coveralls
/retest-required
/retest-required
/retest-required
/retest-required
@mpatlasov: The following tests failed, say /retest
to rerun all failed tests or /retest-required
to rerun all mandatory failed tests:
Test name | Commit | Details | Required | Rerun command |
---|---|---|---|---|
pull-csi-driver-smb-e2e-capz | 25daed399f01a657c1c4f7c6d0bbffb9a125f565 | link | false | /test pull-csi-driver-smb-e2e-capz |
pull-csi-driver-smb-sanity | 25daed399f01a657c1c4f7c6d0bbffb9a125f565 | link | true | /test pull-csi-driver-smb-sanity |
pull-csi-driver-smb-external-e2e | 25daed399f01a657c1c4f7c6d0bbffb9a125f565 | link | true | /test pull-csi-driver-smb-external-e2e |
pull-csi-driver-smb-e2e-windows-containerd | 25daed399f01a657c1c4f7c6d0bbffb9a125f565 | link | true | /test pull-csi-driver-smb-e2e-windows-containerd |
pull-csi-driver-smb-e2e | 25daed399f01a657c1c4f7c6d0bbffb9a125f565 | link | true | /test pull-csi-driver-smb-e2e |
Full PR test history. Your PR dashboard. Please help us cut down on flakes by linking to an open issue when you hit one in your PR.
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.