Commit 8aea9a00 authored by Cristian Staretu's avatar Cristian Staretu Committed by Dave Cheney

syscall: NetlinkRIB, avoid allocation in loop

NetlinkRIB is currently allocating a page sized slice of bytes in a
for loop and it's also calling Getpagesize() in the same for loop.

This CL changes NetlinkRIB to preallocate the page sized slice of
bytes before reaching the for loop. This reduces memory allocations
and lowers the number of calls to Getpagesize() to 1 per NetlinkRIB
call.

This CL reduces the allocated memory from 141.5 MB down to 52 MB in
a test.

LGTM=crawshaw, dave
R=dave, dsymonds, crawshaw
CC=bradfitz, dsymonds, golang-codereviews
https://golang.org/cl/110920043
parent 3e801416
...@@ -64,9 +64,10 @@ func NetlinkRIB(proto, family int) ([]byte, error) { ...@@ -64,9 +64,10 @@ func NetlinkRIB(proto, family int) ([]byte, error) {
return nil, err return nil, err
} }
var tab []byte var tab []byte
rbNew := make([]byte, Getpagesize())
done: done:
for { for {
rb := make([]byte, Getpagesize()) rb := rbNew
nr, _, err := Recvfrom(s, rb, 0) nr, _, err := Recvfrom(s, rb, 0)
if err != nil { if err != nil {
return nil, err return nil, err
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment