If anyone cares, a copy of this build is at:<br><br><a href="http://huchra.bufferbloat.net/~cerowrt/cerowrt-wndr3700-dbg/">http://huchra.bufferbloat.net/~cerowrt/cerowrt-wndr3700-dbg/</a><br><br>and the kernel is at:<br><br>
<a href="http://huchra.bufferbloat.net/~cerowrt/vmlinux">http://huchra.bufferbloat.net/~cerowrt/vmlinux</a><br><br><br><br><div class="gmail_quote">On Fri, Jun 3, 2011 at 9:49 PM, Dave Taht <span dir="ltr"><<a href="mailto:dave.taht@gmail.com">dave.taht@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">So I built a fresh build of openwrt from git head, patched in my preliminary patch to the switch, compiled it with oprofile support, and turned on -O2 rather than -Os, in my usual approach to all-up testing that makes it hard to track down what's really going on without backtracking.<br>

<br>The net result with iperf was better than before,<br>with iptables and qos turned entirely off, no nat, etc. <br>pings stayed very flat and well below 8ms, down from 100ms.<br><br>elara: [  3]  0.0-60.0 sec   435 MBytes  60.7 Mbits/sec<br>

io: [  3]  0.0-60.0 sec   495 MBytes  69.2 Mbits/sec<br>leda: [  3]  0.0-60.9 sec   226 MBytes  31.1 Mbits/sec<br>thebe: [  3]  0.0-60.0 sec   105 MBytes  14.7 Mbits/sec<br clear="all"><br>(how all this stuff is routed is beyond the scope of this, but only partially explains the discrepancies above)<br>

<br>Oprofiling a later run, we're spending a lot of time in an unaligned trap, and I have no idea why iptables and conntrack even register. <br><br>I am not sure at the moment how to track down the source of the alignment fault, I assume I can look at the performance counter somehow, and backtrack that to a given function or functions. It's late...<br>


<br>samples  cum. samples  %        cum. %     app name                 symbol name<br>14992    14992         22.7158  22.7158    vmlinux                  do_ade<br>10054    25046         15.2338  37.9496    ip_tables                /ip_tables<br>

7257     32303         10.9958  48.9454    nf_conntrack             /nf_conntrack<br>3398     35701          5.1486  54.0941    vmlinux                  handle_adel_int<br>2613     38314          3.9592  58.0533    vmlinux                  ip_rcv<br>

2356     40670          3.5698  61.6231    vmlinux                  nf_iterate<br>1869     42539          2.8319  64.4550    iptable_nat              /iptable_nat<br>1626     44165          2.4637  66.9187    vmlinux                  r4k_dma_cache_inv<br>

1544     45709          2.3395  69.2582    nf_conntrack_ipv4        /nf_conntrack_ipv4<br>1331     47040          2.0167  71.2749    vmlinux                  ag71xx_poll<br>1011     48051          <a href="tel:1.5319%C2%A0%2072.8068" value="+15319728068" target="_blank">1.5319  72.8068</a>    vmlinux                  ip_route_input_common<br>

988      49039          1.4970  74.3038    vmlinux                  ret_from_exception<br><br><br><br>asmlinkage void do_ade(struct pt_regs *regs)<br>{<br>        unsigned int __user *pc;<br>        mm_segment_t seg;<br>
<br>
        perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS,<br>                        1, 0, regs, regs->cp0_badvaddr);<br>        /*<br>         * Did we catch a fault trying to load an instruction?<br>         * Or are we running in MIPS16 mode?<br>

         */<br>        if ((regs->cp0_badvaddr == regs->cp0_epc) || (regs->cp0_epc & 0x1))<br>                goto sigbus;<br><br>        pc = (unsigned int __user *) exception_epc(regs);<br>        if (user_mode(regs) && !test_thread_flag(TIF_FIXADE))<br>

                goto sigbus;<br>        if (unaligned_action == UNALIGNED_ACTION_SIGNAL)<br>                goto sigbus;<br>        else if (unaligned_action == UNALIGNED_ACTION_SHOW)<br>                show_registers(regs);<br>

<br>        /*<br>         * Do branch emulation only if we didn't forward the exception.<br>         * This is all so but ugly ...<br>         */<br>        seg = get_fs();<br>        if (!user_mode(regs))<br>                set_fs(KERNEL_DS);<br>

        emulate_load_store_insn(regs, (void __user *)regs->cp0_badvaddr, pc);<br>        set_fs(seg);<br><br>        return;<div><div></div><div class="h5"><br><br><br>-- <br>Dave Täht<br>SKYPE: davetaht<br>US Tel: <a href="tel:1-239-829-5608" value="+12398295608" target="_blank">1-239-829-5608</a><br>
<a href="http://the-edge.blogspot.com" target="_blank">http://the-edge.blogspot.com</a> <br>

</div></div></blockquote></div><br><br clear="all"><br>-- <br>Dave Täht<br>SKYPE: davetaht<br>US Tel: 1-239-829-5608<br><a href="http://the-edge.blogspot.com" target="_blank">http://the-edge.blogspot.com</a> <br>