From 0451ffa50aaf44ea28bfe729c6080b6ec97f7bb5 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Mon, 28 Dec 2015 15:50:58 +0100 Subject: qemu/kvm: improve output buffering There seems to be some missed pieces in output. --- vm/kvm/kvm.go | 6 +++++- vm/qemu/qemu.go | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/vm/kvm/kvm.go b/vm/kvm/kvm.go index b9185d91f..819008b74 100644 --- a/vm/kvm/kvm.go +++ b/vm/kvm/kvm.go @@ -12,6 +12,7 @@ import ( "runtime" "strconv" "sync" + "syscall" "time" "github.com/google/syzkaller/fileutil" @@ -68,6 +69,9 @@ func ctor(cfg *vm.Config) (vm.Instance, error) { if err != nil { return nil, fmt.Errorf("failed to create pipe: %v", err) } + for sz := 128 << 10; sz <= 2<<20; sz *= 2 { + syscall.Syscall(syscall.SYS_FCNTL, wpipe.Fd(), syscall.F_SETPIPE_SZ, uintptr(sz)) + } inst.lkvm = exec.Command("taskset", "-c", strconv.Itoa(inst.cfg.Index%runtime.NumCPU()), inst.cfg.Bin, "sandbox", @@ -108,7 +112,7 @@ func ctor(cfg *vm.Config) (vm.Instance, error) { } } inst.mu.Unlock() - time.Sleep(time.Second) + time.Sleep(time.Millisecond) } if err != nil { rpipe.Close() diff --git a/vm/qemu/qemu.go b/vm/qemu/qemu.go index a02a762dc..8a9399b89 100644 --- a/vm/qemu/qemu.go +++ b/vm/qemu/qemu.go @@ -13,6 +13,7 @@ import ( "strconv" "strings" "sync" + "syscall" "time" "github.com/google/syzkaller/fileutil" @@ -76,6 +77,9 @@ func ctorImpl(cfg *vm.Config) (vm.Instance, error) { if err != nil { return nil, fmt.Errorf("failed to create pipe: %v", err) } + for sz := 128 << 10; sz <= 2<<20; sz *= 2 { + syscall.Syscall(syscall.SYS_FCNTL, inst.wpipe.Fd(), syscall.F_SETPIPE_SZ, uintptr(sz)) + } if err := inst.Boot(); err != nil { return nil, err @@ -185,7 +189,7 @@ func (inst *instance) Boot() error { } } inst.mu.Unlock() - time.Sleep(time.Second) + time.Sleep(time.Millisecond) } if err != nil { rpipe.Close() -- cgit mrf-deployment