discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Discuss-gnuradio] Buffer Overflow Debug


From: Martin Braun
Subject: Re: [Discuss-gnuradio] Buffer Overflow Debug
Date: Wed, 27 May 2015 08:45:07 -0400
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0

Hey Richard,

I'm going to need some time, peace and quiet to get to the bottom of
this. Which means not in the very near future :) But I'm very interested
in getting this to work. Can you post some failing codes/OOTs somewhere
for me to start testing?

M

On 22.05.2015 15:22, Richard Bell wrote:
> Martin et. al.,
> 
> I implemented my own block that produces a trigger signal when a
> specific tag is encountered, and I feed this into the detect port of the
> HPD block. This is an attempt to overcome the tag trigger issues we've
> been having in this email chain. The trigger_tag block simply outputs
> zeros until a specified tag_key is found, at which point it outputs a 1
> on that sample and then continues outputting zeros. It has the same
> trigger behavior as the Schmidt Cox block used to create the detect
> signal in the OFDM example.
> 
> This has resolved the HPD block freezing issue, however, a new issue has
> arisen. Now the block will output the correct header and payload for a
> little while, and then randomly start passing the wrong header portion
> through, even though the detect signal is still on the correct trigger
> point at the input to the HPD block. I confirmed this by comparing the
> HPD port0 input with the HPD port1 input, confirming the detect peeks
> correspond exactly with the port0 tags that signify a header start. Even
> while the HPD block allows the wrong header portion through, the detect
> signal is aligned perfectly with the header start at input0.
> 
> If you wouldn't mind confirming my HPD block settings, I will detail
> them here. I don't think this could be the issue, because I expect the
> block would never work correctly if they were off, but better to be
> safe. The input0 type is complex unpacked data. My header is 32 bits
> long packed. I correspondingly set the following:
> 
> *Header Length (Symbols): 4
> Items per Symbol: 8
> *
> *Guard Interval (items): 0
> *
> *Output Format: Items
> *
> *IO Type: Complex
> *
> *Sampling Rate: <my rate>*
> 
> Now, to add on to this confusing block, I tried using the following
> settings and it worked better than the above settings. However, looking
> at the source code, it makes no sense to me why it should work at all.
> This is because the payload size is calculated by using the
> packet_length read off the message passed in multiplied by the
> items_per_symbol variable. This would correspond to a huge payload
> (128*32 in my case, instead of 128*8), yet it works.
> 
> *Header Length (Symbols): 1
> Items per Symbol: 32*
> 
> Using the other possible combination that produces the correct header
> length when multiplied together, it does not work for any length of time.
> 
> *Header Length (Symbols): 2
> Items per Symbol: 16*
> 
> I'm starting to think there is a major bug in the HPD block when used
> without the 'Output Format Symbols' mode. I say this because this is the
> last difference between the OFDM example, which seems to work fine, and
> my own. At this point I'm stuck code diving into the HPD block to see if
> I can figure out what's going on.
> 
> v/r,
> Rich
> 
> 
> 
> On Wed, May 20, 2015 at 6:27 PM, Richard Bell <address@hidden
> <mailto:address@hidden>> wrote:
> 
>     Yes I will file a bug.
> 
>     We put a tag_debug block right before the HPD input. The tag debug
>     stdout statements continue, while the get_tags_in_range function of
>     the HPD block returns none.
> 
>     We will continue debugging this to see if we can learn something
>     more concrete. The time it takes the flow graph to generate this
>     error is very variable. From hours to seconds.
> 
>     If there is other useful debug info you'd like us to generate please
>     let me know and we will.
> 
>     V/r,
>     Rich
> 
>     > On May 20, 2015, at 6:05 PM, Martin Braun <address@hidden
>     <mailto:address@hidden>> wrote:
>     >
>     > This is interesting, and kinda serious. Also, we've had reports that
>     > tags go missing in the past, but it's something that's hard to verify.
>     >
>     > How did you confirm the input stream is correctly tagged? If
>     > get_tags_in_range isn't finding tags that it should, that is most
>     likely
>     > the issue you're seeing here.
>     >
>     > Can you please file a bug report on the issue tracker, with as much
>     > detail as you can provide?
>     >
>     > On a side note, you might be able to use the trigger input instead of
>     > the tags, but that doesn't solve this problem.
>     >
>     > Thanks,
>     > Martin
>     >
>     >> On 20.05.2015 11:02, Richard Bell wrote:
>     >> Hi Martin,
>     >>
>     >> Sorry for the delay in response. We have been able to put some
>     time into
>     >> debugging this issue and here is what we've found:
>     >>
>     >> 1) We have confirmed that the input stream to the HPD block is
>     correctly
>     >> tagged when the block freezes. The tags we set as "trigger tag"
>     in the
>     >> block are on the input stream.
>     >>
>     >> 2) At some point in the flowgraph operation, the HPD block gets
>     stuck in
>     >> the STATE_FIND_TRIGGER state (idle state). This is even though the
>     >> trigger tags are present on the input, as confirmed in 1 above.
>     We are
>     >> observing that get_tags_in_range is failing to find the tags in the
>     >> stream. We can't figure out what would cause this, or that this
>     is even
>     >> the issue. It's the best idea we have.
>     >>
>     >> So we agree there is no buffering issue. The issue is with the
>     HPD block
>     >> not seeing tags that are confirmed to enter the input port. We would
>     >> love some help on this issue.
>     >>
>     >> The way we are debugging, is we copy and pasted the built in HPD
>     block
>     >> source to our own custom gr_modtool module and added cout debug
>     >> statements there.
>     >>
>     >> v/r,
>     >> Rich
>     >>
>     >> On Thu, May 14, 2015 at 4:05 PM, Martin Braun
>     <address@hidden <mailto:address@hidden>
>     >> <mailto:address@hidden <mailto:address@hidden>>>
>     wrote:
>     >>
>     >>>    On 14.05.2015 15:26, Richard Bell wrote:
>     >>> Hi all,
>     >>>
>     >>> I'm working on an incredibly annoying issue related to my use of the
>     >>> Header/Payload Demux (HPD) block. I think it's related to a buffer
>     >>> overflow at some point, but I'm having a really hard time coming
>     >>    up with
>     >>> a proper debug strategy to nail this down.
>     >>>
>     >>> What I'm seeing is my data streams freeze after the input to the HPD
>     >>> block, both on the header branch and the payload branch. Everything
>     >>> before the HPD block continues on without issue. The time it
>     takes the
>     >>> streams to freeze is HIGHLY variable. I've watched it run for 30
>     >>    minutes
>     >>> straight before a freeze and I've watched it freeze a few seconds
>     >>    after
>     >>> start. I'm using tags generated by the Correlation Estimator as the
>     >>> trigger for the HPD block.
>     >>>
>     >>> My question is this, if I suspect a buffer overflow is causing a
>     >>    freeze,
>     >>> how would I prove this to myself?
>     >>
>     >>    Rich,
>     >>
>     >>    a "buffer overflow" wouldn't cause GR to freeze, rather, it
>     would crash.
>     >>    Going by your previous messages, I suspect what you're seeing
>     is that
>     >>    the HPD is starting to block, causing backpressure until that
>     in turn
>     >>    reaches the source. (Correct me if I'm wrong).
>     >>
>     >>    I remember you previously mentioning something similar. Did
>     you confirm
>     >>    the header parser is actually sending out a message for every data
>     >>    packet it receives? This is a case where the HPD is actually
>     designed in
>     >>    a way that it'll fail.
>     >>
>     >>    As a debugging strategy, I would recommend printing out the state
>     >>    changes inside the HPD state machine. If it freezes, it would be
>     >>    interesting to see in which state that is.
>     >>
>     >>    Cheers,
>     >>    Martin
>     >>
>     >>
>     >>    _______________________________________________
>     >>    Discuss-gnuradio mailing list
>     >>    address@hidden <mailto:address@hidden>
>     <mailto:address@hidden <mailto:address@hidden>>
>     >>    https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>     >
> 
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]