Nmap Development mailing list archives
Re: [Nsock] Scalable event handling
From: Henri Doreau <henri.doreau () gmail com>
Date: Thu, 25 Jul 2013 22:31:03 +0200
2013/7/25 David Fifield <david () bamsoftware com>:
Thanks Henri. This looks like a high-quality, worthwhile change as always. I tried it and the TCP flood against localhost goes faster as you say. gprof shows that epoll_loop stops dominating the profile after the change.
David, thanks a lot for taking the time to test it. I'm glad you could observe similar results.
+ #if !defined(container_of) + #define container_of(ptr, type, member) \ + ((type *)((char *)(ptr)-(char *)(&((type *)0)->member))) + #endif Perhaps this should use offsetof? offsetof appears to already be used in the code of a few dependencies.
Why not. I personally find this version "nicer" but I'd be fine using an offet_of-based one.
+ gh_lnode_t nodeq; + gh_lnode_t nodeq2; /* used for pcap events */ Can you elaborate on how nodeq and nodeq2 work? From what I understand, nodeq2 is used for pcap-related events and nodeq is used for other kinds of events. Why do these need to be separate? I wonder if there is a more orthogonal way to do it. first_ev_next taking a nodeq2 parameter to choose which list to work on is a little strange.
That's it nodeq is for everything but pcap and nodeq2 is for pcap only. The thing is that nsock has this strange "BSD hack mode" where pcap events are added to both "read" and "pcap_read" event lists. This requires a second gh_lnode_t handle. Having it always (not only in BSD_HACK_MODE) used for "pcap_read" events makes the code lighter. The current gh_list implementation hides it a bit, but It's been there for a while. I'm not fond of it either I have to say, but I'm planning to change these linked lists to something else (probably a unique red black tree, I'm still experimenting and benchmarking at the moment). Making the BSD hack mode less intrusive will be one of my goals then. One thing I could do in order to avoid having an extra gh_lnode_t (= two pointers) per structure when not in BSD_HACK_MODE is to add inline helpers or play with macros like: #ifdef BSD_HACK_MODE gh_lnode_t nodeq2; #else #define nodeq2 nodeq #endif or even use an union or a structure, depending on whether BSD_HACK_MODE is set or not... I find these options hackish, especially since I want to eventually change the event lists, that's why I kept nodeq and nodeq2.
run_tests.sh is failing for me: started UDP listener on port 55234 (pid 5694) started TCP listener on port 55235 (pid 5696) started TCP SSL listener on port 55236 (pid 5697) nsock pool user data [OK] test timer operations [OK] set standard log levels [OK] check error log levels [OK] simple tcp connection [FAILED] (Connection refused)
hmm... I can't reproduce this. Did you try cleaning & re-building the test suite after updating nsock? Does netstat -tlnp show the ncat listeners? You can also see (or send me) the output of "./run_tests.sh trace" (runs it within strace).
Patch generated via git, let me know if you prefer another format or if you want me to open a dedicated branch on nmap-exp.It looks like a "git show" patch; "git format-patch HEAD^" is better because it's easier to apply with "git am". David Fifield
I see, thanks. Regards -- Henri _______________________________________________ Sent through the dev mailing list http://nmap.org/mailman/listinfo/dev Archived at http://seclists.org/nmap-dev/
Current thread:
- Re: [Nsock] Scalable event handling Henri Doreau (Jul 24)
- <Possible follow-ups>
- Re: [Nsock] Scalable event handling David Fifield (Jul 25)
- Re: [Nsock] Scalable event handling Henri Doreau (Jul 25)
- Re: [Nsock] Scalable event handling Henri Doreau (Jul 26)
- Re: [Nsock] Scalable event handling David Fifield (Aug 06)
- Re: [Nsock] Scalable event handling Henri Doreau (Aug 10)
- Re: [Nsock] Scalable event handling David Fifield (Aug 10)
- Re: [Nsock] Scalable event handling Henri Doreau (Aug 11)
- Re: [Nsock] Scalable event handling Henri Doreau (Jul 25)
- Re: [Nsock] Scalable event handling David Fifield (Aug 06)
- Re: [Nsock] Scalable event handling Henri Doreau (Aug 07)
- Re: [Nsock] Scalable event handling Henri Doreau (Aug 10)