swift-nio
swift-nio copied to clipboard
investigate direct malloc calls in NIO
Usually, SwiftNIO binaries should only have direct malloc
calls in these places:
- the
catmc_*
atomics - ByteBuffer where it allocates the actual storage
But mostly because of suboptimal coroutine code, unfortunately, there are a bunch of direct malloc
calls that the Swift compiler adds. Those should definitely not be in hot code and many can be worked around. A list here:
- [ ]
NIO.ByteBufferView.subscript.modify : (Swift.Range<Swift.Int>) -> NIO.ByteBufferView + 25 at <compiler-generated>
- [ ]
protocol witness for Swift.MutableCollection.subscript.modify : (Swift.Range<A.Index>) -> A.SubSequence in conformance NIO.ByteBufferView : Swift.MutableCollection in NIO + 21 at <compiler-generated>
- [ ]
NIO.CircularBuffer.subscript.modify : (NIO.CircularBuffer<A>.Index) -> A + 25 at <compiler-generated>
- [ ]
NIO.CircularBuffer.subscript.modify : (NIO.CircularBuffer<A>.Index) -> A + 84 at <compiler-generated>
- [ ]
NIO.CircularBuffer.subscript.modify : (NIO.CircularBuffer<A>.Index) -> A + 96 at <compiler-generated>
- [ ]
protocol witness for Swift.Collection.subscript.read : (A.Index) -> A.Element in conformance NIO.CircularBuffer<A> : Swift.Collection in NIO + 25 at <compiler-generated>
- [ ]
NIO.CircularBuffer.subscript.read : (NIO.CircularBuffer<Element>.Index) -> Element + 41 at <compiler-generated>
- [ ]
protocol witness for Swift.MutableCollection.subscript.modify : (A.Index) -> A.Element in conformance NIO.CircularBuffer<A> : Swift.MutableCollection in NIO + 25 at <compiler-generated>
- [ ]
protocol witness for Swift.MutableCollection.subscript.modify : (A.Index) -> A.Element in conformance NIO.CircularBuffer<A> : Swift.MutableCollection in NIO + 66 [inlined] NIO.CircularBuffer.subscript.modify : (NIO.CircularBuffer<A>.Index) -> A + 30 at <compiler-generated>:153
- [ ]
protocol witness for Swift.MutableCollection.subscript.modify : (A.Index) -> A.Element in conformance NIO.CircularBuffer<A> : Swift.MutableCollection in NIO + 78 [inlined] NIO.CircularBuffer.subscript.modify : (NIO.CircularBuffer<A>.Index) -> A + 42 at <compiler-generated>:153
- [ ]
protocol witness for Swift.MutableCollection.subscript.modify : (Swift.Range<A.Index>) -> A.SubSequence in conformance NIO.CircularBuffer<A> : Swift.MutableCollection in NIO + 39 at <compiler-generated>
- [ ]
NIO.CircularBuffer.subscript.modify : (offset: Swift.Int) -> A + 25 at <compiler-generated>
- [ ]
protocol witness for Swift.Collection.subscript.read : (A.Index) -> A.Element in conformance NIO.UnsafeControlMessageStorage : Swift.Collection in NIO + 21 at <compiler-generated>
- [ ]
protocol witness for Swift.Collection.subscript.read : (A.Index) -> A.Element in conformance NIO.UnsafeControlMessageCollection : Swift.Collection in NIO + 22 at <compiler-generated>
- [ ]
NIO.MarkedCircularBuffer.subscript.modify : (NIO.CircularBuffer<A>.Index) -> A + 25 at <compiler-generated>
- [ ]
NIO.MarkedCircularBuffer.subscript.modify : (NIO.CircularBuffer<A>.Index) -> A + 85 at <compiler-generated>
- [ ]
NIO.MarkedCircularBuffer.subscript.modify : (NIO.CircularBuffer<A>.Index) -> A + 97 at <compiler-generated>
- [ ]
protocol witness for Swift.Collection.subscript.read : (A.Index) -> A.Element in conformance NIO.MarkedCircularBuffer<A> : Swift.Collection in NIO + 28 at <compiler-generated>
- [ ]
NIO.MarkedCircularBuffer.subscript.read : (NIO.CircularBuffer<Element>.Index) -> Element + 36 at <compiler-generated>
- [ ]
protocol witness for Swift.MutableCollection.subscript.modify : (A.Index) -> A.Element in conformance NIO.MarkedCircularBuffer<A> : Swift.MutableCollection in NIO + 28 at <compiler-generated>
- [ ]
protocol witness for Swift.MutableCollection.subscript.modify : (A.Index) -> A.Element in conformance NIO.MarkedCircularBuffer<A> : Swift.MutableCollection in NIO + 70 [inlined] NIO.MarkedCircularBuffer.subscript.modify : (NIO.CircularBuffer<A>.Index) -> A + 31 at <compiler-generated>:150
- [ ]
protocol witness for Swift.MutableCollection.subscript.modify : (A.Index) -> A.Element in conformance NIO.MarkedCircularBuffer<A> : Swift.MutableCollection in NIO + 82 [inlined] NIO.MarkedCircularBuffer.subscript.modify : (NIO.CircularBuffer<A>.Index) -> A + 43 at <compiler-generated>:150
- [ ]
protocol witness for Swift.MutableCollection.subscript.modify : (Swift.Range<A.Index>) -> A.SubSequence in conformance NIO.MarkedCircularBuffer<A> : Swift.MutableCollection in NIO + 39 at <compiler-generated>
- [ ]
protocol witness for Swift.Collection.subscript.read : (A.Index) -> A.Element in conformance NIOWebSocket.WebSocketMaskingKey : Swift.Collection in NIOWebSocket + 21 at <compiler-generated>