mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-04 18:22:08 +00:00
e32157e21b
In overload situations, i.e. when a sender fills up the entire buffer, we land in situations where the sender receives an ack_avail signal, releases one packet, allocates and sends a packet and fails to allocate a second packet. This is especially relevant if the receiver does not batch ack_avail signals (such as vfs_lwip). In those ping-pong scheduling scenarios, the overhead from catching the Packet_alloc_failed exception becomes significant. In case of the NIC router, we will land in an overload situation if the sender is faster than the receiver. The packet buffer will be filled up at some point and the NIC router starts to drop packets. For every dropped packet, we currently have to catch the Packet_alloc_failed exception. This commit adds a new method alloc_packet_attempt to Packet_stream_source that has almost the same signature as the older alloc_packet method but returns an Attempt<Packet_descriptor, Alloc_packet_error> object. As the method already used the allocator back end exception-less, changes on lower levels were not needed. Furthermore, the NIC router was modified to use the new exception-less alloc_packet_attempt instead of alloc_packet. Ref #4555