[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: next meeting: Monday May 19th 10:00 - 12:00 CEST
Hello again,our next meeting is on May 19th (in 2.5 weeks) -- live from the retreat (let's see how that goes). We'll be at https://meet.jit.si/MirageOS -- see our shared pad at https://pad.data.coop/To6IOSeNSOK9kFVlgo7XWw?both# for notes and agenda (add your talking points there) :) Here are the notes from our meeting last Monday. Have an awesome day, Hannes ## Meeting April 28th 10:00 - 12:00 CEST - Participants: Fabrice, Pierre, Reynir, Hannes, Sam, Romain ### Defunctorization workHannes worked on defunctorizing Mirage. It seems to work well and no complaints. Hannes: should we defunctorize the network stack next and the block devices?Pierre: is very happy with the current state of defunctorization. For the network stack, at least for Xen it will be tricky since we need two network interfaces -- for backend and frontend. Romain: Did an experiment about MirageOS and miou-solo5, and has a TCP stack without functors -- still an experimental project Reynir: If I understand, it goes a bit further with no functor at all Romain: https://git.robur.coop/dinosaure/experiment-miou-solo5Romain: and a little article here: https://blog.robur.coop/articles/utcp_and_effects.html ### Unikraft Sam: the work on unikraft is close to be publishedSam: performance for network is pretty good, for the block device the situation is less clear Fabrice: block solo5 outperforms the unikraftHannes: from their website (unikraft), they claim much higher performance than solo5 Fabrice: network is fine, it is a little faster Sam: one of the next steps is to have a real benchmark with network Romain: do you know the performance issues with block devices and unikraft?Fabrice: it uses virtio device, quite different from the network one. performs badly if you do small sector (one sector at one time) operations -- much better if you operate on multiple sectors Fabrice: you can as well have multiple operations in flight with unikraft - which helps to shadow the single sector bad performance Romain: did some performance benchmarks in terms of mirage-tcpip and utcp, and there's a large gap in the benchmarks (using iperf3, we're near 1Gb/s with mirage-tcpip -- and with utcp 900 Mb/s) Fabrice: our network test served one fileRomain: we have a really old unikernel which is compatible with iperf2, but the experiment above has iperf3 support Romain: mirage-tcpip is 1Gbits/s and utcp is 900 Gbits/s on our experimentation. The main question is about scheduling now (where miou differs from what lwt does) Sam: for getting it released, we populate the different repositories under the mirage organization, and open PRs for the repositories where we have unikraft patches ### utcp https://github.com/robur-coop/utcpHannes: TCP/IP stack based on a formal model (HOL4, SML; manually translated SML to OCaml - Recently we found a mistranslation caused by a missing set of parenthesis). Hannes: mirage-tcpip: it works very well, but as discussed on the mailing list it has obscure semantics in certain cases. It is deeply in the LWT monad and has memory leaks. Hannes: Utcp has a pure, functional core with unit tests. Recently worked on performance with Romain. µtcp still lacks congestion control and newer features of TCP such as selective acknowledgement (which mirage-tcpip also doesn't implement). µtcp started off several years ago. We (in Robur) run it in production machines, and we have mostly worked on correctness and resource usage, and we still have correctness issues (failed assertions) and resource usage issues. Performance wise µtcp tries to stick to congression control and window sizes while mirage-tcpip doesn't try to adhere to a specific congression control algorithm or bound the memory usage. The gained interest of µtcp is also due to it not being tied to lwt and thus allows for other schedulers. Hannes: utcp is meant to replace only mirage-tcpip's src/tcp (ocamlfind tcpip.tcp) Romain: for the miou TCP/IP stack, we worked on a new IP stack (which is different from mirage-tcpip's one) ### Mirage CIHannes: OCaml 5.4 support in ocaml-solo5 (ocaml-unikraft)? -- two different repositories but shared patches, also 5.4 has most patches upstream \o/ -- https://github.com/ocaml/ocaml/pull/13810 (maybe we can ask Antonin, Gabriel, Florian at the retreat whether that can make it to 5.4) Hannes: OCaml 5.3 is not yet tested in the Mirage CIHannes: there's a PR from Tim about fixing the OCaml 5.2.1 support https://github.com/ocurrent/mirage-ci/pull/51 ### Remove bigarray from CstructPierre: experimented with branches from Hannes that use cstruct where the buffer is Bytes.t Pierre: updated io-page to not rely on cstruct, but use bigarray directly Pierre: this currently works with QubesOS, a hello world runs nicelyPierre: ran into issues when running the network stack, mirage-tcpip is tightly coupled with cstruct and relies on the fact that cstruct is based on bigarray (esp. C stubs) Pierre: may use utcp to check whether that'll be good enough / workPierre: need a careful review of the io-page API, since all its dependencies need updates Hannes: the only C code is the checksum code, no? in utcp we have pure OCaml checksum code, and we could use that in mirage-tcpip (we use some trick about bigarray to outperform the computation) ### Ownership of buffers on the IP levelRomain: another experiment with the IP stack, with mirage-tcpip you have cstruct everywhere -- difficult to change to something else. with cstruct you want to not copy when you have a fragmented packet -- with bigarray and cstruct you can have a subview (without copying). the idea is to have a bigarray directly when you have a defragmented packet, and if it is fragmented you get a copy of the bigarrays Romain: with mirage-tcpip you have the question about ownership and fragmented/defragmented: do you have the ownership or not? Romain: My intuition is at the IP level, we should have a variant between a bigarray (defragmented) and a string (fragmented) -- if you have a bigarray you should care about the ownership Hannes: in practise, 99.9999% of IP packets are not fragmented ### Checksum code - performance investigationsHannes: maybe we should measure the utcp checksum code (OCaml code) and mirage-tcpip checksum code (C code) Romain: it is tricky due to memory layout, and also you've to take care that OCaml 5 C-FFI is different (and introduces a memory barrier), so check what your environment is before doing the benchmark (CPU cache) Hannes: maybe the checksum code could then be in a separate, independent package used by both utcp and mirage-tcpip Hannes: question about the performance focus: arm? x86? 64 bits only? also 32 bits? ### tcpip handling of RST Pierre: curious whether there was more communication about uTCP Hannes: there wasn'tPierre: I'll try reach out to them, one of the advisors is in my reasearch group
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |