[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [MirageOS-devel] towards a common Mirage 'FLOW' signature
On 21 Jun 2014, at 16:02, Anil Madhavapeddy <anil@xxxxxxxxxx> wrote: > On 21 Jun 2014, at 11:36, David Scott <scott.dj@xxxxxxxxx> wrote: >> >> I wonder whether we should extend flow to have all 4 of {read,write}{,_ack} >> so that we can control when data is acked/consumed. The TCP implementation >> would then only call the _ack function when it had received confirmation the >> data had been processed. If the TCP implementation needed to resend >> (possibly after a crash) it could call 'read' again and get back the same >> data it had before. So the result of 'read' would be an int64 stream offset >> * Cstruct.t, and 'read_ack' would mark an int64 offset as being consumed. >> This is what I'm doing in xenstore and shared-memory-ring: I don't know if >> anyone else wants this kind of behaviour. In the case where a VM sends a >> block write, which is then sent over NFS/TCP it would allow us to call >> write_ack on the flow to the guest when the TCP acks are received. > > Yes, this definitely makes sense. It's very nice to have a clean async > notification API for writes, as this could (for example) also eventually bind > to storage APIs like libaio for the Unix backend. agree. also, in passing, wouldn't this also make it a (the first?) e2e TCP implementation in that acks are sent after data is delivered to the *application* rather than just received by the receiving stack... :) > However, how would NFS/TCP work with FLOW for this? That would require a > scatter/gather API (much like the RING requests/responses), whereas FLOW > works with streams. Oh, unless you are referring to a FLOW of a single file > over NFS/TCP, rather than the underlying XDR RPCs from NFS. not sure i understand. isn't this something that the nfs/tcp implementation handles when it passes things down? > (Perhaps we should shift to calling it Flow in e-mail instead of FLOW to > AVOID SHOUTING) PLUS ONE. >> Separately, in the case of vchan the buffer size is set at ring setup time. >> If you connected a vhan ring to a TCP transmitter then the TCP transmitter, >> presumably with it's higher latency link, would try to keep its link full by >> buffering more. If the vchan ring size is smaller then the TCP window size >> (likely), TCP would have to copy into temporary buffers. If we knew we were >> going to need more buffered data then we could make the vchan ring larger >> and avoid the copying? Perhaps that wouldn't work due to alignment >> requirements. Anyway, this is more of a 'flow setup' issue than a >> during-the-flow issue. Perhaps a CHANNEL would be where we could close and >> re-open flows in order to adjust their parameters. > > This is definitely a path-MTU style problem, but the real question is why you > would be running TCP directly over vchan, which is a lossless medium. The > only use would be for congestion control, and we could consider just cherry > picking some of that logic straight out of the TCP stack rather than > suffering the overhead of marshalling into the TCP wire format just to go > over shared memory. agree; but the comment about CHANNEL makes sense to me (a Channel is an abstraction over a set of Flows), is that right? -- Cheers, R. Attachment:
signature.asc _______________________________________________ MirageOS-devel mailing list MirageOS-devel@xxxxxxxxxxxxxxxxxxxx http://lists.xenproject.org/cgi-bin/mailman/listinfo/mirageos-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |