Date: Mon, 5 Mar 2007 15:43:50 -0500 (EST) From: Andrew Gallatin <gallatin@cs.duke.edu> To: John Baldwin <jhb@freebsd.org> Cc: Andre Oppermann <andre@freebsd.org>, Andrew Gallatin <gallatin@cs.duke.edu>, freebsd-net@freebsd.org, freebsd-current@freebsd.org, Robert Watson <rwatson@freebsd.org>, kmacy@freebsd.org Subject: Re: New optimized soreceive_stream() for TCP sockets, proof of concept Message-ID: <17900.33030.751272.890853@grasshopper.cs.duke.edu> In-Reply-To: <200703051352.29939.jhb@freebsd.org> References: <45E8276D.60105@freebsd.org> <17900.24574.751134.397740@grasshopper.cs.duke.edu> <20070305182755.S31701@fledge.watson.org> <200703051352.29939.jhb@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
John Baldwin writes: > > John has a patch that pins interrupt threads, etc, not sure what the status > of > > that is. CC'd. > > Tested and around for over a year. Sent to people several times but no > benchmarking has resulted. It lives in p4 in //depot/user/jhb/intr/... > > I've just regenerated the patch at > http://www.FreeBSD.org/~jhb/patches/intr_bind.patch (same URL as the last N It seems very useful, in conjunction with some sort of CPU binding API. With ULE, and netserver bound via a hack to CPU 1, I can nearly double the bandwidth by binding my ithread to the opposite CPU using your patch. BTW, you need a little sanity checking somehere in the API I tried to remove binding, and guessed at binding to -1 rather than reading the source. That resulted in this panic: # ./ibind/ibind 256 -1 kernel trap 12 with interrupts disabled Fatal trap 12: page fault while in kernel mode cpuid = 1; apic id = 01 fault virtual address = 0x3806778bc fault code = supervisor read data, page not present instruction pointer = 0x8:0xffffffff8040a509 stack pointer = 0x10:0xffffffff91e88ad0 frame pointer = 0x10:0xffffffff91e88b00 code segment = base 0x0, limit 0xfffff, type 0x1b = DPL 0, pres 1, long 1, def32 0, gran 1 processor eflags = resume, IOPL = 0 current process = 788 (ibind) [thread pid 788 tid 100047 ] Stopped at intr_bind+0xe9: movl cpu_apic_ids(,%rdi,4),%esi db> bt Tracing pid 788 tid 100047 td 0xffffff001ea1b840 intr_bind() at intr_bind+0xe9 sysarch() at sysarch+0x14a ia32_syscall() at ia32_syscall+0x236 Xint0x80_syscall() at Xint0x80_syscall+0x60 Thanks again! Drew
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?17900.33030.751272.890853>