github.com/tetratelabs/wazero@v1.2.1/internal/sysfs/bench_test.go (about) 1 package sysfs 2 3 import ( 4 "io" 5 "io/fs" 6 "os" 7 "path" 8 "syscall" 9 "testing" 10 ) 11 12 func BenchmarkFsFileUtimesNs(b *testing.B) { 13 f, errno := OpenOSFile(path.Join(b.TempDir(), "file"), syscall.O_CREAT, 0) 14 if errno != 0 { 15 b.Fatal(errno) 16 } 17 defer f.Close() 18 19 times := &[2]syscall.Timespec{ 20 {Sec: 123, Nsec: 4 * 1e3}, 21 {Sec: 123, Nsec: 4 * 1e3}, 22 } 23 24 b.ResetTimer() 25 for i := 0; i < b.N; i++ { 26 if errno := f.Utimens(times); errno != 0 { 27 b.Fatal(errno) 28 } 29 } 30 } 31 32 func BenchmarkFsFileRead(b *testing.B) { 33 dirFS := os.DirFS("testdata") 34 embedFS, err := fs.Sub(testdata, "testdata") 35 if err != nil { 36 b.Fatal(err) 37 } 38 39 benches := []struct { 40 name string 41 fs fs.FS 42 pread bool 43 }{ 44 {name: "os.DirFS Read", fs: dirFS, pread: false}, 45 {name: "os.DirFS Pread", fs: dirFS, pread: true}, 46 {name: "embed.api.FS Read", fs: embedFS, pread: false}, 47 {name: "embed.api.FS Pread", fs: embedFS, pread: true}, 48 } 49 50 buf := make([]byte, 3) 51 52 for _, bc := range benches { 53 bc := bc 54 55 b.Run(bc.name, func(b *testing.B) { 56 name := "wazero.txt" 57 f, errno := OpenFSFile(bc.fs, name, syscall.O_RDONLY, 0) 58 if errno != 0 { 59 b.Fatal(errno) 60 } 61 defer f.Close() 62 63 b.ResetTimer() 64 for i := 0; i < b.N; i++ { 65 b.StopTimer() 66 67 var n int 68 var errno syscall.Errno 69 70 // Reset the read position back to the beginning of the file. 71 if _, errno = f.Seek(0, io.SeekStart); errno != 0 { 72 b.Fatal(errno) 73 } 74 75 b.StartTimer() 76 if bc.pread { 77 n, errno = f.Pread(buf, 3) 78 } else { 79 n, errno = f.Read(buf) 80 } 81 b.StopTimer() 82 83 if errno != 0 { 84 b.Fatal(errno) 85 } else if bufLen := len(buf); n < bufLen { 86 b.Fatalf("nread %d less than capacity %d", n, bufLen) 87 } 88 } 89 }) 90 } 91 }