My useless network stack is driving me insane. I need to fix it, but I also need to know where the actual problem lies. So I need to profile it. And that is where the problem lies. So, I’ve decided to try and tackle this from an alternate angle.
Earlier today, I was using trusty time command to see how long it takes to parse about 100 million ARP packets, which aren’t all that large; and I’ve come to the realisation that I could build a test framework that simulates sending the tonne of packets that my daap server was sending.
I don’t think the dataset would be that large to test against. After all, it did die after like less than half a MB of data was sent to it. A simple capture with Wireshark should suffice to generate a nice little data set to test against.
And with that, I just might be able to profile the network stack without too much effort.
However, I’m not at my development machine, so it’ll have to be a task to start on tomorrow.
One of the things that this highlights, however, is the advantage C has over the likes of O’Caml. One can just cast a bunch of bytes to a struct, and manipulate it with some semblance of typing available without much runtime overhead.
Conversely, in O’Caml, I need to actually parse the bytes into a type (if I want to use strong types, which I like to do), which requires a lot more effort than C does. And that kind of sucks.
Might be interesting trying to extend the O’Caml compiler to have a notion of structs (as opposed to records), so could get some of the benefits and maybe even speed of C shoe-horned into O’Caml. The only problem would be the GC…
No comments:
Post a Comment