In the particular test I am using I write 36 bytes of payload and use the Mirage equivalent of TCP_NODELAY. This works for a bit but then suffers some packet loss (why? TBD) and triggers a rexmit. The retransmitted packet is 1400+ bytes and is made up of a long chain of 36 byte io_pages. I thought that it may be that the ring did not have enough slots to take all the chunks of the pkt. Making the retransmitted pkt be the size of the original write improved it very significantly but it would still fail in the same way, tho less frequently. I'm working on it - I see available txring slots vary, but I havent yet found a case where the slots are fully depleted or down to fewer than chunks that need to be written. I'm still narrowing it down.
This test originally was with 1-byte writes, but that seemed to wedge even before the 1st data packet made it to the wire. This may be because of the limitation Steven mentioned. I think I'm getting close on the 36 byte write test, once this is figured out I'll try it with 1 byte writes again.
Balraj