swift-nio icon indicating copy to clipboard operation
swift-nio copied to clipboard

investigate direct malloc calls in NIO

Open weissi opened this issue 3 years ago • 0 comments

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>

weissi avatar May 06 '21 11:05 weissi