[ixp1200] Large packets on the IXP
Abhijeet Joglekar
abhijeet at cs.utah.edu
Wed Mar 27 02:27:18 EST 2002
Thanks Michael.
I looked up the Intel supplied microblocks for SlowIngress and found that
before sending out a rcv_request, a macro CONSUME_START_RCV is used.
=============================================================================
// This macro will consume a start receive signal, if present.
// It is used as a safety net to catch start_receive signals
// sent from the IXF440 that we don't expect
#macro CONSUME_START_RCV()
.local $ignored
br_!signal[start_receive, skip#], guess_branch
nop
csr[read, $ignored, rcv_cntl], ctx_swap
skip#:
.endlocal
#endm
=============================================================================
Instead of doing this, I was inserting a delay loop after reading the port
status and before sending a rcv_request, since without the delay loop, I
get incorrect status in the rcv_cntl register.
============================================================================
get_port_status
.if (we_have_a_packet)
.local count
set [count, 0]
.while(count < 0x55)
alu [ count, count , + , 1]
.endw
.endlocal
.endif
issue_recv_request
============================================================================
This loop is slowing down my input contexts.
So maybe instead of this loop, I need to use the CONSUME_START_RCV macro.
But when I use the instruction,
br_!signal[start_receive, skip#], guess_branch
I get the following assembler errors.
ERROR: Invalid text follows macro reference
ERROR: Wrong number of arguments for macro : 2 shoule be 1.
Wierd, because the Programmers Reference Manual specifies exactly the same
format that I am using above.
Any ideas/pointers?
Also, after taking a look at the Intel SlowIngress microblock, I think my
critical sections are a little too large. I will try shrinking them too
and see what happens.
- Abhijeet
On Tue, 26 Mar 2002, Michael E. Kounavis wrote:
> Abhijeet,
>
> The fact that you have buffer overflows at so low
> incoming bit rates may be an indication that your IP
> forwarding code does not serve packets "quickly
> enough" so that each packet is being proceesed
> during a period of time that is larger than the time it is
> supposed to spend in a microengine.
>
> Could be a problem with your code. Or it could be a by-product
> of bad thread scheduling. Check when your threads swap context.
> I suggest to test your code using the Developer Workbench carefully.
>
> --
> Michael
>
More information about the ixp1200
mailing list