Commit Graph
15 Commits
Author SHA1 Message Date
Lucas ManningandgVisor bot eff230bc99 Ensure views returned by PullUp are owned exclusively by their packet.
PiperOrigin-RevId: 681977034
2024-10-03 12:12:57 -07:00
Kevin KrakauerandgVisor bot 75cb6c0c5d netstack: don't allocate interfaces when copying data in and out
In a redis-benchmark PING_INLINE test, this reduces allocations by 32%.

PiperOrigin-RevId: 618248114
2024-03-22 12:01:02 -07:00
Kevin KrakauerandgVisor bot 58346fd62f netstack: don't allocate by calling AsSlices() in fdbased endpoint
In a redis-benchmark PING_INLINE test, this reduces allocations by 23%.

PiperOrigin-RevId: 614144212
2024-03-08 22:31:06 -08:00
Etienne PerotandgVisor bot 0deaf9e41e Use clear on a few more slices.
This is similar to pull request #9749.

PiperOrigin-RevId: 586512951
2023-11-29 18:55:37 -08:00
Andrei Vagin 43bd258fcf Fix a few typos
It is an idea of running codespell as part of our presubmit checks.
Before enabling it for new changes, let's fix what it has found.

Signed-off-by: Andrei Vagin <[email protected]>
2023-10-25 12:13:42 -07:00
Lucas ManningandgVisor bot 31c7a6281e Automated rollback of changelist 538230394
PiperOrigin-RevId: 540671483
2023-06-15 13:21:26 -07:00
Lucas ManningandgVisor bot 4f0dc3b1a3 Change Buffer.PullUp so that it returns views that are not shared.
The underlying chunks returned from PullUp should not be shared,
since the underlying slice can sometimes be directly modified. This change
also reworks some of the network parsing code so that ownership of
views is more explicit to the reader.

PiperOrigin-RevId: 538230394
2023-06-06 10:51:15 -07:00
Kevin KrakauerandgVisor bot 4d013c2a59 netstack: speed up merge
Merge clears the other buffer, so rather than cloning and dealing with
refcounts, we can just steal other's view list and adjust sizes.

This increases the speed of Merge 10x, and this was with a benchmark that
didn't do any TrimFront/Truncate (which will induce copying in the old
implementation).

BenchmarkMerge
BenchmarkMerge-33               99412884                12.74 ns/op            0 B/op          0 allocs/op
BenchmarkOldMerge
BenchmarkOldMerge-33             6075222               217.4 ns/op             0 B/op          0 allocs/op

This change uncovered that PacketBuffer.DeepCopyForForwarding wasn't doing a
true deep copy. It seems that, in the ICMP error path, a call to Merge was
forcing a deep copy (maybe because Append was copying bytes), obfuscating the
issue. This change also addresses that issue by having DeepCopyForForwarding
produce a copy that shares no data with other packets.

PiperOrigin-RevId: 537143838
2023-06-01 15:25:28 -07:00
Kevin KrakauerandgVisor bot 54a79b380d rename bufferv2 to buffer
The old buffer has been dead for a while. We use type aliases so we can switch
package names in smaller CLs.

PiperOrigin-RevId: 537125110
2023-06-01 14:16:05 -07:00
Lucas ManningandgVisor bot e31ea0f832 Remove the old version of buffer.
This is no longer used anywhere in gVisor. Everything has been migrated to
bufferv2.

PiperOrigin-RevId: 474655746
2022-09-15 14:21:12 -07:00
Lucas ManningandgVisor bot c8207270b3 Remove VectorisedView everywhere.
PiperOrigin-RevId: 453471156
2022-06-07 10:36:23 -07:00
Ting-Yu WangandgVisor bot c28f6a4d33 Migrate PacketBuffer to use pkg/buffer
Benchmark iperf3:
                    Before      After
native->runsc       5.14        5.01    (Gbps)
runsc->native       4.15        4.07    (Gbps)

It did introduce overhead, mainly at the bridge between pkg/buffer and
VectorisedView, the ExtractVV method. Once endpoints start migrating away from
VV, this overhead will be gone.

Updates #2404

PiperOrigin-RevId: 373651666
2021-05-13 13:56:16 -07:00
Ting-Yu WangandgVisor bot e2ae518cd4 pkg/buffer: Reorganize internal structure to allow dynamic sizes.
This change changes `buffer.data` into a `[]byte`, from `[bufferSize]byte`.
In exchange, each `buffer` is now grouped together to reduce the number of
allocation. Plus, `View` now holds an embeded list of `buffer` (via `pool`) to
support the happy path which the number of buffer is small. Expect no extra
allocation for the happy path.

It is to enable the use case for PacketBuffer, which
* each `View` is small (way less than `defaultBufferSize`), and
* needs to dynamically transfer ownership of `[]byte` to `View`.
  (to allow gradual migration)

PiperOrigin-RevId: 333197252
2020-09-22 17:56:40 -07:00
Adin ScannellandgVisor bot 7a3b606ae7 Clean-up buffer implementation.
This also adds substantial test cases.

The Read/Write interfaces are dropped as they are not necessary.

PiperOrigin-RevId: 300461547
2020-03-11 19:52:14 -07:00
Adin ScannellandgVisor bot 2bc4702e30 Make pipe buffer implementation standard.
A follow-up change will convert the networking code to use this standard
pipe implementation.

PiperOrigin-RevId: 297903206
2020-02-28 12:29:23 -08:00