The current implementation uses the `remaining_mut()` function from the bytes::BufMut implementation for Vec<u8>. In terms of the BufMut trait, a Vec buffer has infinite capacity - you can always write more to the buffer, since the Vec grows as needed. Hence, the `remaining_mut` here actually returns +∞ (actually, `usize::MAX - len`). So the first `if` is always true, and the calls to `reserve` never actually allocate the appropriate space. What happens instead is that the `bytes_mut()` call in `read_from` picks up the slack, but it merely grows the buffer a 64 bytes at a time, which slows things down. This changes the check to use the Vec capacity instead of `remaining_mut`. In my profile (sending 100,000 10KiB messages back and forth), this reduces `__memmove_avx_unaligned_erms`'s share of the total runtime from ~77% to ~53%.pull/7/head
parent
be834ac261
commit
8e49bea00f
Loading…
Reference in new issue