diff options
author | gVisor bot <gvisor-bot@google.com> | 2021-01-15 15:47:01 +0000 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2021-01-15 15:47:01 +0000 |
commit | 578c5460b62f52063bef41203940a315deced6b3 (patch) | |
tree | 25ee54afd2fba0133c549110656d9efc631031c9 /pkg/buffer/pool.go | |
parent | 6cc587a931cb704006e5d843f725b4be2d1523c9 (diff) | |
parent | e57ebcd37a7b9f98d80e594f2c0baf2220d7b830 (diff) |
Merge release-20210112.0-25-ge57ebcd37 (automated)
Diffstat (limited to 'pkg/buffer/pool.go')
-rw-r--r-- | pkg/buffer/pool.go | 83 |
1 files changed, 0 insertions, 83 deletions
diff --git a/pkg/buffer/pool.go b/pkg/buffer/pool.go deleted file mode 100644 index 7ad6132ab..000000000 --- a/pkg/buffer/pool.go +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2020 The gVisor Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package buffer - -const ( - // embeddedCount is the number of buffer structures embedded in the pool. It - // is also the number for overflow allocations. - embeddedCount = 8 - - // defaultBufferSize is the default size for each underlying storage buffer. - // - // It is slightly less than two pages. This is done intentionally to ensure - // that the buffer object aligns with runtime internals. This two page size - // will effectively minimize internal fragmentation, but still have a large - // enough chunk to limit excessive segmentation. - defaultBufferSize = 8144 -) - -// pool allocates buffer. -// -// It contains an embedded buffer storage for fast path when the number of -// buffers needed is small. -// -// +stateify savable -type pool struct { - bufferSize int - avail []buffer `state:"nosave"` - embeddedStorage [embeddedCount]buffer `state:"wait"` -} - -// get gets a new buffer from p. -func (p *pool) get() *buffer { - if p.avail == nil { - p.avail = p.embeddedStorage[:] - } - if len(p.avail) == 0 { - p.avail = make([]buffer, embeddedCount) - } - if p.bufferSize <= 0 { - p.bufferSize = defaultBufferSize - } - buf := &p.avail[0] - buf.init(p.bufferSize) - p.avail = p.avail[1:] - return buf -} - -// put releases buf. -func (p *pool) put(buf *buffer) { - // Remove reference to the underlying storage, allowing it to be garbage - // collected. - buf.data = nil -} - -// setBufferSize sets the size of underlying storage buffer for future -// allocations. It can be called at any time. -func (p *pool) setBufferSize(size int) { - p.bufferSize = size -} - -// afterLoad is invoked by stateify. -func (p *pool) afterLoad() { - // S/R does not save subslice into embeddedStorage correctly. Restore - // available portion of embeddedStorage manually. Restore as nil if none used. - for i := len(p.embeddedStorage); i > 0; i-- { - if p.embeddedStorage[i-1].data != nil { - p.avail = p.embeddedStorage[i:] - break - } - } -} |