From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kimball Thurston To: Kimball Thurston , gdb@sources.redhat.com Subject: Re: gdb and dlopen Date: Tue, 16 Oct 2001 18:23:00 -0000 Message-id: References: <20011016161525.A1241@nevyn.them.org> X-SW-Source: 2001-10/msg00161.html Content-type: multipart/mixed; boundary="----------=_1583534246-23287-5" This is a multi-part message in MIME format... ------------=_1583534246-23287-5 Content-length: 2315 At Tue, 16 Oct 2001 16:15:25 -0400, Daniel Jacobowitz wrote: > > On Tue, Oct 16, 2001 at 01:11:39PM -0700, Kimball Thurston wrote: > > Hey all, > > > > In our application, we've got a plugin architecture that, under > > unix, we open using dlopen et al. When trying to debug using gdb, the > > process of calling dlopen seems to take an extraordinary amount of > > time, as it looks like gdb is using ptrace to copy a bunch of the > > debug process's memory at each dlopen into itself. Is there a way to > > delay this behavior, or disable it all together, or fix it? I couldn't > > determine exactly how gdb uses the memory it copies in. All I know is > > it makes using gdb nearly impossible when you have to wait 10 minutes > > for the program to start up... > > You might want to look at some of the options under 'set debug' to see > what it's doing. It's possible that it's just symbol reading > inefficiency biting you; how big are these DSOs? How many are there? > It wasn't symbol reading inefficiency - or at least not directly. I thought that at first, but I grabbed the snapshot from Oct 5th - I haven't tried the latest yet, compiled it up with profiling info to find where gdb is spending it's time. The majority of the time is spent in child_xfer_memory - like 56% of the time (and most of that is spent calling ptrace to copy bytes around) - the child_xfer_memory seems to end up being called as a result of resetting breakpoints via a chain of other things. I don't know why (ignorance). I've attached a bzip of the profile data from the Oct 5th snapshot. Unfortunately, I don't know about the internals of gdb to know what memory it's transferring between processes. I tweaked on child_xfer_memory to not call ptid_get_pid quite so much, but that obviously had only a marginal improvement - it's all in ptrace and system calls - you can see the system calls hit pretty hard from a cpuload application. The plugins are very small (minus debug code info) - they should have only 3 exported functions, a few static functions, and their local data block has ~ 1K of data in it or so. Right now, there are about 50 of them. What is the purpose child_xfer_memory is called for? Maybe I can go through and change that to a delayed load-on-access type scenario or something? thanks, Kimball ------------=_1583534246-23287-5 Content-Type: application/x-bzip2; charset=binary; name="gdb_prof_data.bz2" Content-Disposition: inline; filename="gdb_prof_data.bz2" Content-Transfer-Encoding: base64 Content-Length: 52428 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 5p9dXNjaKNGxoijaNGxU+e1d51csaSxYo1PfrXNRqNixqjRYosWNGzzq5o2i iijPt25sWNjY2NO6u87c2TVO61327bm0bGjY1Fp89u7q5SPbq5YsWNijRUaL G0aNFJp+O2u9urmjRRRo2NGz26u/Ttynz1cos9du+e22767coo0U/HVyin37 XTGjU7t3t25T125oo0aKKfXblFPnq5RqfPW5YqNFPfq5Y0UaNGisWNPnq726 u9urvx25RjRRRRRjGMYxijGNGjGMUUUUUUYxjFFFGNGMYxjGMaNGin59rlFG iinrq5T37cp3blPOuUUUUaNGiiin47XfHW5tn5du+erpndXNFFGndXfbtynt 25RZ8drli0Yqixp513dtyzu3KNjGd1cqKfbtzFPXVzY0aiijRoz67cosaKxn z1zGnv1yqeurmKMYqMYqedcxop3VzT37Xd2rmjFZ79XfHVyn263MaKedcoxn v2uaKMYp7du+3bvy65n461c1Ge/Vyiiin125p3XKe/VrlFGMUZ9+u7rmM+e2 u9+uUUYp7dd3XfXVzRjU+OuWixT665jWy+mNC5kj6Y+GPhj5Y2Wy2Wy+mPdd +XWrmedcz46747coxaMYrPfrmKMmKe3blFPXXd1uaKeu3NRjPjrlGKNZ67d6 65iXI9o2SqNhaFoS5Gy2X4SORoWwthe0FY2S0C+kVH3R8oNJJjFPjtcp9drm fHXNPfrvfq5nSKwemNhbALYWktC2FUj2x9mRsLQtJfZAbC5BzGwvlj0xWP12 5RoxYs+O3d1d3blGjGMU7rmMaMZ9dcp9drvnrvjtzF+TGhekFR9IPlj2iUqx sLQthbLZbLZeMHwio+WNJaF90bLxGkuY9oDmPaDZbIVR9MbLZaF7Y+UHwj8I P8jHMBsC0LZbLZbLSMYxRUYxjRjFjGManrrmNGKM+3V3v1yxTzqn5INlzH4R 8MbLZeI9I+6KyNl8o/CNlyPSJS2Wy2Wktl+EfZGy+EfKNC2X4R+SR8IRsvlH jB8MaFUaF8I2XyjQlyNloX4R4x9kHtj2jZbL8IPpj7o+yPaCUtC/CDQvujkc yNlsLZbKo2X2Y2WhfSP1MLmio2LRU+OrXNp9dW5WMAT4EE7+3+1+z/Q/b/UK /o/zplU6hh/UlmOSjBcH6qI3KXjlHoc7OulOsYbw9RVjMdHLL3LBqKH3Oa+M ywXuG318bYN5GuwY83MqpKPXpWnVrOoOoYVFOWBB6WNqGYnVGtpaYq1w1dG4 +4w2t646B7Zp9MJknLaoc5rauB5Ar5JyGW6vel6rRpW6uNX1TVXYpiWx1fHW HzvtuEsm5WlvX6YdN0IDfUu7nksYHU6qqtQzj27edzN1dhR8+0UpsqqOVOOI 1j01uy7zq4GjCpVZ067661NcDRT05qVCtzLkyLzorwysNd6pYuQYcszTwycj m2LG3OlZhYzdpDJZuq3tFUdPY85PiUybReGHFQJWd00S5WZihuhtuMoUcEYl ig2TaomsKZ4mxQrkJCKLnXdXMdDRtjZmTdPNdtZaKos6e51l7zBw5Q3Vp6IO 4KUxmjHuV0oq+rSbsFXdZsMxWETk2tXPhJH6iX2XMxNs67dY93u0YGclQ3hU YyqFKuYlYqQpiiq0MhShdo3pdzTDbmO3joPdwUsm8/aHuaO1QqxxFmeL3EOz lXYu6Vlixt2kswzKe8eTDtvwggeLJR9h3iu6ZgK4nE7PC46qie2AkjmjCpfO x1bm7K3r1PK3rVPtVubYMeVpy3XXrQmcXjOGC60tGgTBDcIV5cA2yDtXkbHC jQa6gdMeDLy9yHt573ceVKhuO6w27zIo0Mw5wrlsW7sPcNoLr1Zb42rtFCtm CFC8VaqvJQe7RhSzDXDeIfC2WJY7kcwYkQu0gszjkWeuqgawe0iwjVzSqFQb zXnLss90lDPcdtzoy+p7hwK6udjzDhKtnY97Bc5mYMeCry+aV270+spjqxaC s533XSZO719h1KrdIYiruDTzCM44cM4jmOQsGVo1PrFAt23eYeujYuasFi9l 6g23dZeCYjY7LvUvLyZoGXmZi6SZVdOzau+4PFbG5BsVDGM3u19W3wfFdT5O BIa3sV7KeWQ4LMyStOSsxwVd1RxlW+ubZGSSaaGUXTO9KyyMbo+DBDKpGppd ChWiZs2+nLR1cDcFziKM2sb5LIYRQQ4VYezK2rE5XblS0YZWV7aiQrS7xrDS CY483BPdtcGb1tZrdTGEYKHbLTO9uZNQ3s7BXucGHdcD2iYG9OIsmnQNUdwz d22r3NduVRuTVePKrK7r8znum1uCWUOUJasTPZRFRmnx14Xl7oOk9dYN3Odn s0SqF1L3Di7A48vrp1eUOUApCdV2SJbrPIWd226zYeptiw7BFTPU33Vqunvb om0qHSJvMmFF5nIS8RndTYcsyOEXY58qbkqYJeXMkEWaLI1DWgmJkrzNrTVK p0TFmDMJZB7fIFQdeWgtVd2MdVPnp8UoMpoPVTOQlyMaysN2RbzNrtEmZNxP e6ydlc08lVTgUO5j50mLm1RlUtO0y2uzST1KtW91ZdUah8X0IwMG0+RhLp2U updmTHpr2mW67agrdy+t92ZtAvFFdvuYnBQwK+XaWCYt6647Ul9BzzVyrOoV rrHM47vM2FNxUlz7rQyrM03J6gLuzV5Ar3L3bvrUD9uTdVq1VXzzqFbM7I4V fEVjrjtjoauYbzS9Tuxl5AW8yLcjxm8oXcyUTdPAnwmEXFVMcsQt13cBm1mI J1zxxYmMOvre0b4usuzz5blUWVfLZlHRUyynj7uZcXte5jzxsuty6I2rpHnW JdWHO3tx7KrnNlepXM5+xq+zMoKnt0lRbfccmFb3LVN7K5CjlY72WdoXRapX d4+jCrM51IUZjj7t7WdFoad53GQp1U62uSqYlrNdJxDV9QQ6ZhINtqaqoSE7 l282jkrdlEbNM5ZvKTBWPOY2bfHJFtntMS7cqgrQ3MgnJE2CfJhkY8IOOiKP VDSDINdVV6szM23RU8dsVVTrulW7IZjwXnOi1nLIKwTBfHIbw3SCPClYlkrB NrTMPcs7bV6LF51m1VDDitvRtS1Tiwo3t7oompt4szxjvRuSzEXNpjIarFpx 2qyxLW3UvaVtA5CKo0cF4bpNZcLtTTurNe5JgSudxrsPcnJ3Zm2l7nN41WCO dBd5V9WXd5oWLjV2gdq7uUnXLc6t1RJZbuXuwZklKqlKuBt5Y6TQnfOXtjRl 5uoO7Q0wnevrOcXTDzpMDNObb67p4n04TN28msGYTOR2zo6+PdxulrEusGZw O7HKmzH250G9ZiWm09WrqkytuqV5WZKcvlly6jyreXfLcfbt9d0mK3tnHds9 mQGjvdQw3uEdu51bLyLT0UOEZ29L6rnC4Zl5gVziThWZb2sWqIYxm29xYptL KlCiza4uagmvYDZrcaIva6qdKEbAh12sx7eDjliWig7fQkA6kfEg1mO69UIr LlSK87OrwXjmHetOvbxbNS9ho27uI+WKcVMA4iVNRysI7rY45wxi74UDrKGz Ozu8AKPhBWYz1NOMhz3hTLtDmKPJduQPhx2lq5W9iGzi+3mOFDXQ04OVqx7t x6+02O3JunOfpl7zV6rgR8pVmInwpdhGCWLLVbYgiCeYKCGoCRRKE+lbheYC qUBzcQVI9Yw4Vubd0fWrF1KXXbTYmDd3eNljnQeryL60wMv1kTMsW+PFns7Q 3x1jc7KIfe60WzuimdT676dgz0qWqTtZR0SoGQzs83QzmK1YEZrflS1AjMDZ 4MGicGx666lBfPq6tQOS+ZGI0NmDDKW9ZKy86btd3X2b2Pu53z5cZznbF3N8 u3SVLzd4dt8xImuPI3znd3BZlOm21pdZW8ed9u92s5udm1puq0J93EIEbTvW 7u5o3dSKSma3XndSzj2UQm6XHrwUglgdXROXLFXd2+7qpdVZzw5ed27eo1nO u5KpLDEQvu7rFFLK6Cq7s3uCXa1Hq53B29MldlVV3yIyCHhd2Xe92rI9nHHN Qw6U3mO9Xcas5lUzCXG3JvHe6oeOV21b51d3fV3Xo3O0sbfLmxkx675q+HHt 7s40u6b1ud3EwI53ZJyOPrOLs43VCZUg4Qbi7JH1h9mdh7M40u7u4d3LtPG+ hHcMo3xw8euq4nhoognaNtuSp14kE6t03Kyxu4le6ruN3e7jaPJlvu6vd3dm m+DuPO6nyRx5133DL1ZmwYW7dXNEq9fcRTmZs0ty6qqpZtbgu73ZzlE53Lkd rlo6EHuFSrDx9mqn1w1Jvde1tdeDmzk4vNrmlg3jyxs9xnXdLdEKcpLIqsvd Ww8St3d3Uq3VurdyN1JbuaN07ubt1T3u7G3mbtVVXi1bu7u7u73d3dmZvHKq kaSqZWc9XUsDMclXXbe2WodQhwZdkO87tQyPZxwZM3XrWmjZUqVsna4+Kt4z jzC+G10wSpj3T6POUR3FtHnMutN919VBHjtCa7FpPLx5UprutKm1lVClrzGo MsRxy+vL6THPcIor7d3IKNVuG7ZVuwcqTuzqOXIEJe5j2u4Z0iIp0eo9WH1Z fVKWMW6sr04snNN7l2utPUcvrnPeO0znZ7cMHJtVjNCA0nXMrBarEcY2rRy0 twXtg3tVspSxp1bTS4M1Q56mZUlLjLJ9mhLu7YT3PZV5UlzCI6duXmSV3biN BE6+rMwXzaydltOBbb5qZN1ppnL3VTmWLp0cuDdxZIkzVHJu7LzcSrb7BLzG qFP2Vu9MrgTksRJx5gfXU2t3Y8153B5wXuh0rr7qs4q65lcRVdC51m6s9ty9 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 /AnzFABixCB//i7kinChIPFtx0Q= ------------=_1583534246-23287-5-- >From drow@mvista.com Tue Oct 16 18:32:00 2001 From: Daniel Jacobowitz To: Kimball Thurston Cc: gdb@sources.redhat.com Subject: Re: gdb and dlopen Date: Tue, 16 Oct 2001 18:32:00 -0000 Message-id: <20011016213252.A8694@nevyn.them.org> References: <20011016161525.A1241@nevyn.them.org> X-SW-Source: 2001-10/msg00162.html Content-length: 1925 On Tue, Oct 16, 2001 at 06:23:39PM -0700, Kimball Thurston wrote: > It wasn't symbol reading inefficiency - or at least not directly. I > thought that at first, but I grabbed the snapshot from Oct 5th - I > haven't tried the latest yet, compiled it up with profiling info to > find where gdb is spending it's time. The majority of the time is > spent in child_xfer_memory - like 56% of the time (and most of that is > spent calling ptrace to copy bytes around) - the child_xfer_memory > seems to end up being called as a result of resetting breakpoints via > a chain of other things. I don't know why (ignorance). I've attached a > bzip of the profile data from the Oct 5th snapshot. Unfortunately, I > don't know about the internals of gdb to know what memory it's > transferring between processes. I tweaked on child_xfer_memory to not > call ptid_get_pid quite so much, but that obviously had only a > marginal improvement - it's all in ptrace and system calls - you can > see the system calls hit pretty hard from a cpuload application. > > The plugins are very small (minus debug code info) - they should have > only 3 exported functions, a few static functions, and their local > data block has ~ 1K of data in it or so. Right now, there are about 50 > of them. > > What is the purpose child_xfer_memory is called for? Maybe I can go > through and change that to a delayed load-on-access type scenario or > something? child_xfer_memory is called for just about everything. Why it's being called in this particular case is another question, but I'm betting we're rereading the link map. With 50 dlopen'd libraries, stopping and rereading the link map each time could be quite painful. Kevin might have something enlightening to say here, but I'll take a look at it. -- Daniel Jacobowitz Carnegie Mellon University MontaVista Software Debian GNU/Linux Developer