Add FUSE dimension to microbenchmarks.

PiperOrigin-RevId: 532901869
This commit is contained in:
Lucas Manning
2023-05-17 14:10:07 -07:00
committed by gVisor bot
parent c3da0e4f0d
commit 116f28e9c5
6 changed files with 61 additions and 26 deletions
+2 -2
View File
@@ -3226,6 +3226,6 @@ go_repository(
go_repository(
name = "com_github_hanwen_go_fuse_v2",
importpath = "github.com/hanwen/go-fuse/v2",
sum = "h1:fOTuYWxywhaliwMobGTP/6NUCgGdal6pCpuch4MHCnU=",
version = "v2.1.1-0.20220627082937-d01fda7edf17",
sum = "h1:t5ivNIH2PK+zw4OBul/iJjsoG9K6kXo4nMDoBpciC8A=",
version = "v2.3.0",
)
+1
View File
@@ -50,6 +50,7 @@ require (
github.com/google/go-cmp v0.5.9 // indirect
github.com/google/gofuzz v1.1.0 // indirect
github.com/googleapis/gnostic v0.5.5 // indirect
github.com/hanwen/go-fuse/v2 v2.3.0 // indirect
github.com/hashicorp/errwrap v1.0.0 // indirect
github.com/hashicorp/go-multierror v1.1.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
+5
View File
@@ -129,6 +129,8 @@ github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2c
github.com/googleapis/gnostic v0.5.5 h1:9fHAtK0uDfpveeqqo1hkEZJcFvYXAiCN3UutL8F9xHw=
github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA=
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
github.com/hanwen/go-fuse/v2 v2.3.0 h1:t5ivNIH2PK+zw4OBul/iJjsoG9K6kXo4nMDoBpciC8A=
github.com/hanwen/go-fuse/v2 v2.3.0/go.mod h1:xKwi1cF7nXAOBCXujD5ie0ZKsxc8GGSA1rlMJc+8IJs=
github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-multierror v1.1.0 h1:B9UzwGQJehnUY1yNrnwREHc3fGbC2xefo8g4TbElacI=
@@ -150,11 +152,13 @@ github.com/kr/pty v1.1.1 h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k=
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mattbaird/jsonpatch v0.0.0-20171005235357-81af80346b1a h1:+J2gw7Bw77w/fbK7wnNJJDKmw1IbWft2Ul5BzrG1Qm8=
github.com/mattbaird/jsonpatch v0.0.0-20171005235357-81af80346b1a/go.mod h1:M1qoD/MqPgTZIk0EWKB38wE28ACRfVcn+cU08jyArI0=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/moby/sys/mountinfo v0.6.2/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -286,6 +290,7 @@ golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18=
golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+7
View File
@@ -67,6 +67,7 @@ syscall_test(
syscall_test(
size = "large",
add_fusefs = True,
add_overlay = True,
debug = False,
test = "//test/perf/linux:open_benchmark",
@@ -86,6 +87,7 @@ syscall_test(
syscall_test(
size = "large",
add_fusefs = True,
add_overlay = True,
debug = False,
test = "//test/perf/linux:randread_benchmark",
@@ -93,6 +95,7 @@ syscall_test(
syscall_test(
size = "large",
add_fusefs = True,
add_overlay = True,
debug = False,
test = "//test/perf/linux:read_benchmark",
@@ -112,6 +115,7 @@ syscall_test(
syscall_test(
size = "large",
add_fusefs = True,
add_overlay = True,
debug = False,
test = "//test/perf/linux:seqwrite_benchmark",
@@ -130,6 +134,7 @@ syscall_test(
syscall_test(
size = "large",
add_fusefs = True,
add_overlay = True,
debug = False,
test = "//test/perf/linux:stat_benchmark",
@@ -137,6 +142,7 @@ syscall_test(
syscall_test(
size = "large",
add_fusefs = True,
add_overlay = True,
debug = False,
tags = ["nogotsan"],
@@ -145,6 +151,7 @@ syscall_test(
syscall_test(
size = "large",
add_fusefs = True,
add_overlay = True,
debug = False,
test = "//test/perf/linux:write_benchmark",
+43 -23
View File
@@ -17,9 +17,11 @@
package main
import (
"flag"
golog "log"
"os"
"os/exec"
"strings"
"github.com/hanwen/go-fuse/v2/fs"
"github.com/hanwen/go-fuse/v2/fuse"
@@ -28,29 +30,15 @@ import (
"gvisor.dev/gvisor/runsc/specutils"
)
func main() {
loopbackRoot, err := fs.NewLoopbackRoot("/fuse")
if err != nil {
log.Warningf("could not create loopback root: %v", err)
os.Exit(1)
}
opts := &fuse.MountOptions{DirectMount: true, Debug: true, AllowOther: true, Options: []string{"default_permissions"}}
rawFS := fs.NewNodeFS(loopbackRoot, &fs.Options{NullPermissions: true, Logger: golog.Default()})
server, err := fuse.NewServer(rawFS, "/tmp", opts)
if err != nil {
log.Warningf("could not create fuse server: %v", err)
os.Exit(1)
}
// Clear umask so that it doesn't affect the mode bits twice.
unix.Umask(0)
var (
dir = flag.String("dir", "/tmp", "The directory to mount the fuse filesystem on.")
cmd = flag.String("cmd", "", "Command to execute after starting the fuse server. If empty, just wait after starting.")
debug = flag.Bool("debug", true, "Whether to log FUSE traffic. Set to false for benchmarks.")
)
go server.Serve()
defer func() {
server.Unmount()
server.Wait()
}()
func waitOnMount(s *fuse.Server) {
if _, _, err := specutils.RetryEintr(func() (uintptr, uintptr, error) {
if err := server.WaitMount(); err != nil {
if err := s.WaitMount(); err != nil {
return 0, 0, err
}
return 0, 0, nil
@@ -60,8 +48,40 @@ func main() {
log.Warningf(`Could not mount fuse submount "/tmp": %v`, err)
os.Exit(1)
}
cmd := exec.Command(os.Args[1], os.Args[2:]...)
if err := cmd.Run(); err != nil {
}
func main() {
flag.Parse()
loopbackRoot, err := fs.NewLoopbackRoot("/fuse")
if err != nil {
log.Warningf("could not create loopback root: %v", err)
os.Exit(1)
}
opts := &fuse.MountOptions{DirectMountStrict: true, Debug: *debug, AllowOther: true, Options: []string{"default_permissions"}}
rawFS := fs.NewNodeFS(loopbackRoot, &fs.Options{NullPermissions: true, Logger: golog.Default()})
server, err := fuse.NewServer(rawFS, "/tmp", opts)
if err != nil {
log.Warningf("could not create fuse server: %v", err)
os.Exit(1)
}
// Clear umask so that it doesn't affect the mode bits twice.
unix.Umask(0)
if *cmd == "" {
server.Serve()
waitOnMount(server)
return
}
go server.Serve()
waitOnMount(server)
defer func() {
server.Unmount()
server.Wait()
}()
cmdArgs := strings.Split(strings.Trim(*cmd, "\""), " ")
c := exec.Command(cmdArgs[0], cmdArgs[1:]...)
if err := c.Run(); err != nil {
log.Warningf(err.Error())
os.Exit(1)
}
+3 -1
View File
@@ -517,7 +517,9 @@ func runTestCaseRunsc(testBin string, tc *gtest.TestCase, args []string, t *test
if err != nil {
fatalf("cannot find fuse: %v", err)
}
spec = testutil.NewSpecWithArgs(append([]string{fuseServer, testBin}, args...)...)
cmdArgs := append([]string{testBin}, args...)
cmd := strings.Join(cmdArgs, " ")
spec = testutil.NewSpecWithArgs([]string{fuseServer, fmt.Sprintf("--debug=%t", *debug), fmt.Sprintf("--cmd=\"%s\"", cmd)}...)
} else {
spec = testutil.NewSpecWithArgs(append([]string{testBin}, args...)...)
}