Files
Andrei VaginandgVisor bot cae1b9bafd platform/kvm: don't map the entire sentry address space to VM
On x86_64, we prefer not to map the entire sentry address space into
the VM due to memory overhead. It is about 3MB for a 40-bit address
space and about 250MB for 46-bit address spaces (modern CPUs).

If the entire address space isn't mapped into the VM, we need to
trap mmap system calls and map sentry memory regions on demand. This
introduces some overhead for mmap system calls, but considering that
mmap isn't called frequently, it seems better than the memory and
startup time overhead introduced by mapping the entire address
space.

* native mmap:
  BenchmarkHostMMap-12          266972          4297 ns/op
* mmpa with the seccomp trap:
  BenchmarkHostMMap-12          174373          6855 ns/op

PiperOrigin-RevId: 687418707
2024-10-18 14:09:29 -07:00

32 lines
1018 B
Go

// Copyright 2024 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 cgo && amd64
// +build cgo,amd64
package kvm
import (
"gvisor.dev/gvisor/pkg/ring0"
)
func init() {
// libc calls mmap with blocked signals. In this case, the mmap system call
// can't be trapped with seccomp.
forceMappingEntireAddressSpace = true
// Limit the physical address space size to control the memory
// overhead. It is about 3MB for 40 bits address space.
ring0.PhysicalAddressBits = 40
}