Re: [DynInst_API:] Hung process


Date: Mon, 16 Feb 2015 11:51:08 -0600
From: Bill Williams <bill@xxxxxxxxxxx>
Subject: Re: [DynInst_API:] Hung process
On 02/16/2015 10:35 AM, Gerard wrote:
Hi,

I'm having another problem. I increased the MAX_THREADS variable to
10240 because I need to instrument a mutatee that creates around 10000
threads. After increasing the variable I could instrument the mutatee
without problems, but I added more snippets and the process hung again,
this time after creating 3999 threads. Now, it doesn't matter if I
increase even more the constant, it still hangs.

Is there any other reason why the mutatee could hang or is there any
other limit somewhere?

I'm not aware of other hardcoded limits, and if you already had tramp guards disabled, it seems likely that you're running into some form of bad behavior at scale that's independent of MAX_THREADS.

Is it possible for you to put together a simple reproducer (mutator/mutatee) and send that to me? Do you know whether the process is hanging at a particular point (thread creation/destruction, process exit)?

Thanks,

Gerard

2015-02-04 11:22 GMT+01:00 Gerard <nouboh@xxxxxxxxx
<mailto:nouboh@xxxxxxxxx>>:

    Thanks! That was exactly the problem. I have increased the constant
    MAX_THREADS and now I don't have this problem anymore. Is there any
    reason why the constant is set to 32 instead of a higher value?

    I also have tried to find how to dynamically change
    the DYNINST_max_num_threads value but I haven't found where is it
    implemented (version 8.2.1). And about disabling tramp guards, I
    already had them disabled so it seems that this workaround does not
    solve the problem.

    Gerard

    2015-02-03 20:13 GMT+01:00 Barton Miller <bart@xxxxxxxxxxx
    <mailto:bart@xxxxxxxxxxx>>:

        Disabling tramp guards certainly works if you really know that
        you're not recursing.  That can be subtle and error prone, which
        is why tramp guards were invented.  Proceed cautiously here.

        --bart


        On 2/3/2015 12:02 PM, Matthew LeGendre wrote:

            Another possible fix may be to disable tramp guards.  Tramp
            guards are used to prevent recursive instrumentation.  For
            example, if you instrument malloc() with instrumentation
            that calls malloc(), then tramp guards will prevent you from
            going into infinite recursion.

            If you already know that your instrumentation can't
            infinitely recurse,
            then disabling tramp guards will give a big performance win
            and may work around this hang.  To disable tramp guards, put
            a call to BPatch::setTrampRecursive(__true) before you
            insert instrumentation.

            -Matt
            _________________________________________________
            Dyninst-api mailing list
            Dyninst-api@xxxxxxxxxxx <mailto:Dyninst-api@xxxxxxxxxxx>
            https://lists.cs.wisc.edu/__mailman/listinfo/dyninst-api
            <https://lists.cs.wisc.edu/mailman/listinfo/dyninst-api>


        _________________________________________________
        Dyninst-api mailing list
        Dyninst-api@xxxxxxxxxxx <mailto:Dyninst-api@xxxxxxxxxxx>
        https://lists.cs.wisc.edu/__mailman/listinfo/dyninst-api
        <https://lists.cs.wisc.edu/mailman/listinfo/dyninst-api>





_______________________________________________
Dyninst-api mailing list
Dyninst-api@xxxxxxxxxxx
https://lists.cs.wisc.edu/mailman/listinfo/dyninst-api



--
--bw

Bill Williams
Paradyn Project
bill@xxxxxxxxxxx
[← Prev in Thread] Current Thread [Next in Thread→]