mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Use build tags to conditionally enable vfs.checkInvariants.
We don't want these checks in the production binary at all. Even though the
hardware branch predictor will do away with any runtime costs of the if
condition, the code under the "if checkInvariants {...}" could force escapes
to the heap. It could also increase function complexity, making it no longer
inlinable. And these invariant checks lie on hot code paths.
PiperOrigin-RevId: 513398208
This commit is contained in:
@@ -115,6 +115,7 @@ go_library(
|
||||
"anonfs.go",
|
||||
"context.go",
|
||||
"debug.go",
|
||||
"debug_testonly.go",
|
||||
"dentry.go",
|
||||
"device.go",
|
||||
"epoll.go",
|
||||
|
||||
@@ -12,11 +12,14 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build !check_invariants
|
||||
// +build !check_invariants
|
||||
|
||||
package vfs
|
||||
|
||||
const (
|
||||
// If checkInvariants is true, perform runtime checks for invariants
|
||||
// expected by the vfs package. This is normally disabled since VFS is
|
||||
// often a hot path.
|
||||
// expected by the vfs package. This is disabled for non-test binaries since
|
||||
// VFS is often a hot path.
|
||||
checkInvariants = false
|
||||
)
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
// Copyright 2019 The gVisor Authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build check_invariants
|
||||
// +build check_invariants
|
||||
|
||||
package vfs
|
||||
|
||||
const (
|
||||
// Set checkInvariants to true for tests.
|
||||
checkInvariants = true
|
||||
)
|
||||
@@ -49,12 +49,13 @@ generic = [
|
||||
"_norace",
|
||||
"_unsafe",
|
||||
"_opts",
|
||||
"_testonly",
|
||||
]
|
||||
|
||||
# State explosion? Sure. This is approximately:
|
||||
# len(archs) * (1 + 2 * len(oses) * (1 + 2 * len(generic))
|
||||
# len(archs) * (1 + 2 * len(oses)) * (1 + 2 * len(generic))
|
||||
#
|
||||
# This evaluates to 495 at the time of writing. So it's a lot of different
|
||||
# This evaluates to 663 at the time of writing. So it's a lot of different
|
||||
# combinations, but not so much that it will cause issues. We can probably add
|
||||
# quite a few more variants before this becomes a genuine problem.
|
||||
go_suffixes = explode(explode(archs, oses), generic)
|
||||
|
||||
Reference in New Issue
Block a user