Nios® V/II Embedded Design Suite (EDS)
Support for Embedded Development Tools, Processors (SoCs and Nios® V/II processor), Embedded Development Suites (EDSs), Boot and Configuration, Operating Systems, C and C++
12612 Discussions

modified webserver - application crash under load

Honored Contributor II



I write this post after some many hours of debugging without result... 


I have taken over the Altera webserver provided with the Stratix V GX devkit (not the one included in NiosII EDS) and among changes I switched the transfer type from "Content-Length" to "Transfer-Encoding: chunked". The application works fine if the requests are made e.g. once a second, but if the page is refreshed several times a second, it hangs. 


My problem also is that I am not able to step-debug this problem: it seems throughput related so as soon as I switch to debugging mode everything works fine. 


Can anyone give me an idea what causes the problem or how I can figure out where it last crashed? 


I appreciate any help! 


PS: I have attached the original and the modified versions, all relevant changes are in webserver.c (function http_send_file_chunk).
0 Kudos
1 Reply
Honored Contributor II

Hi again, 


while debugging noticed a certain flow: at some point the Nios stops servicing HTTP requests, the PC asks for TCP retransmissions and than sends ARP packets for a while. After a number of ARPs the Nios starts sending flow control messages (in my understanding resume messages). 


Now if it sends resume messages I should understand it initially sent a pause request, which I don't see in the trace... 


I have attached a Wireshark trace of the session, from OK to failure... 




60 6.778055000 Altera_1c:12:34 Spanning-tree-(for-bridges)_01 MAC CTRL 60 MAC PAUSE: pause_time: 0 quanta 203 0000 01 80 c2 00 00 01 00 07 ed 1c 12 34 88 08 00 01 ........ ...4.... 0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........ 0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........ 0030 00 00 00 00 00 00 00 00 00 00 00 00 ........ ....  




In a Qsys design without TSE MAC flow control the Nios also "hangs" but with the difference that the flow control message never gets sent. 


In both cases, while the Nios is in the complete silence state, 3 interrupts are continuously high: SGDMA RX, SGDMA TX and JTAG UART. 




EDIT: I was able to capture the following exception: 


panic: unlock NET dtrap - needs breakpoint ip_exit: calling func 0xa028e88 netclose: closing iface Altera TSE MAC ethernet ip_exit: calling func 0xa02da20 panic: unlock NET dtrap - needs breakpoint ip_exit: calling func 0x0 ip_exit: calling func 0x0  

in Objdump I have the following mapping: 

* 0xa02da20 - clock_c 

* 0xa028e88 - netclose 


Can anyone help me understand what's happening in this scenario?
0 Kudos