diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2017-10-12 19:08:18 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2017-10-12 19:08:18 +0200 |
| commit | 66aeb467de80c92a099e49eaad6c25974c96f9cf (patch) | |
| tree | cde1ee4dca1033104b2b858007c4cd2d5e0b5d12 /pkg | |
| parent | 81e199f71969b97c80cbb4473ddd53adeed3b4d4 (diff) | |
pkg/ipc: don't send program padding to executor
Currently we always send 2MB of data to executor in ipc_simple.go.
Send only what's consumed by the program, and don't send the trailing zeros.
Serialized programs usually take only few KBs.
Diffstat (limited to 'pkg')
| -rw-r--r-- | pkg/csource/csource.go | 2 | ||||
| -rw-r--r-- | pkg/ipc/ipc_linux.go | 2 | ||||
| -rw-r--r-- | pkg/ipc/ipc_simple.go | 5 |
3 files changed, 5 insertions, 4 deletions
diff --git a/pkg/csource/csource.go b/pkg/csource/csource.go index 1bd818962..b0d44a94f 100644 --- a/pkg/csource/csource.go +++ b/pkg/csource/csource.go @@ -72,7 +72,7 @@ func Write(p *prog.Prog, opts Options) ([]byte, error) { return nil, fmt.Errorf("csource: invalid opts: %v", err) } exec := make([]byte, prog.ExecBufferSize) - if err := p.SerializeForExec(exec, 0); err != nil { + if _, err := p.SerializeForExec(exec, 0); err != nil { return nil, fmt.Errorf("failed to serialize program: %v", err) } w := new(bytes.Buffer) diff --git a/pkg/ipc/ipc_linux.go b/pkg/ipc/ipc_linux.go index 793611b91..0279b0ee8 100644 --- a/pkg/ipc/ipc_linux.go +++ b/pkg/ipc/ipc_linux.go @@ -128,7 +128,7 @@ func (env *Env) Close() error { func (env *Env) Exec(opts *ExecOpts, p *prog.Prog) (output []byte, info []CallInfo, failed, hanged bool, err0 error) { if p != nil { // Copy-in serialized program. - if err := p.SerializeForExec(env.in, env.pid); err != nil { + if _, err := p.SerializeForExec(env.in, env.pid); err != nil { err0 = fmt.Errorf("executor %v: failed to serialize: %v", env.pid, err) return } diff --git a/pkg/ipc/ipc_simple.go b/pkg/ipc/ipc_simple.go index 4c2ac6925..50dcce661 100644 --- a/pkg/ipc/ipc_simple.go +++ b/pkg/ipc/ipc_simple.go @@ -70,7 +70,8 @@ func (env *Env) Exec(opts *ExecOpts, p *prog.Prog) (output []byte, info []CallIn defer os.RemoveAll(dir) data := make([]byte, prog.ExecBufferSize) - if err := p.SerializeForExec(data, env.pid); err != nil { + n, err := p.SerializeForExec(data, env.pid) + if err != nil { err0 = err return } @@ -78,7 +79,7 @@ func (env *Env) Exec(opts *ExecOpts, p *prog.Prog) (output []byte, info []CallIn binary.Write(inbuf, binary.LittleEndian, uint64(env.config.Flags)) binary.Write(inbuf, binary.LittleEndian, uint64(opts.Flags)) binary.Write(inbuf, binary.LittleEndian, uint64(env.pid)) - inbuf.Write(data) + inbuf.Write(data[:n]) cmd := exec.Command(env.bin[0], env.bin[1:]...) cmd.Env = []string{} |
