Adding Antonio Afonso since he did some work on speeding things up at Facebook for Android.
Emre: what version of LLDB are you using? Top of tree? One from a package distro? > On May 13, 2020, at 3:00 PM, Greg Clayton <clayb...@gmail.com> wrote: > > So one idea is to improve the PlatformAndroid to use "adb" to copy all system > libraries over and pre-cache all system libraries instead of letting it > happen one by one. > > Android is also very inefficient in loading shared libraries. It will load > them one by one and each one involves 2 stops since the breakpoint we set > gets hit once before the library is loaded and once again when it has been > loaded. Each stop for shared libraries takes a few hundred milliseconds. > > So it might be nice to have the PlatformAndroid grab all system libraries and > populate the cache for a device in one large command and see if that improves > things. To test this you can just download all system libraries to a single > directory manually and then do set some settings: > > (lldb) settings set target.exec-search-paths /path/to/cache > (lldb) settings set target.debug-file-search-paths /path/to/cache > > So time the "adb" command that wildcard copies all libraries over, then set > the settings, then run your debug sessions and see how much this helps. That > will give you a good idea of sequentially grabbing each library is the cost. > > If the cost is in parsing these libraries, we can look at parallelizing the > loading of all the device shared libraries first (prior to debugging) and > then launching when everything is pre-loaded. > > Greg > > >> On May 8, 2020, at 9:07 AM, Emre Kultursay via lldb-dev >> <lldb-dev@lists.llvm.org <mailto:lldb-dev@lists.llvm.org>> wrote: >> >> Hi lldb-dev, >> >> TL;DR: Has there been any efforts to introduce something like "Just My Code" >> debugging on LLDB? Debugging on Android would really benefit from this. >> >> Details: >> >> Native Android apps typically have a single .so file from the user, but load >> ~150 system libraries. >> >> When attaching LLDB remotely to an Android app, a significant amount of time >> is spent on loading modules for those system libraries, even with a warm >> LLDB cache that contains a copy of all these libraries. >> >> With a cold LLDB cache, things are much worse, because LLDB copies all those >> libraries from the device back to the host to populate its cache. While one >> might think this happens only once for a user, things are a bit worse for >> Android. There are just too many libraries to copy, making it very slow, >> there are new Android releases every year, and users typically use multiple >> devices (e.g., x86, x86_64 emulators, arm32, arm64 devices), and multiple >> hosts (work, home, laptop/desktop); thereby suffering from this issue more >> than necessary. >> >> If we can eliminate the latency of loading these modules, we can deliver a >> much faster debugging startup time. In essence, this can be considered as a >> form of Just My Code debugging. >> >> Prototype and Experiments >> >> I built a simple prototype that only loads a single user module, and totally >> avoids loading ~150 system modules. I ran it on my Windows host against an >> Android emulator to measure the end to end latency of "Connect + Attach + >> Resume + Hit 1st breakpoint immediately" . >> For warm LLDB cache: >> Without just-my-code: 23 seconds >> With just-my-code: 14 seconds >> For cold LLDB cache: >> Without just-my-code: 120 seconds >> With just-my-code: 16 seconds >> >> I want to solicit some feedback and gather thoughts around this idea. It >> would be great if there are any existing alternatives in LLDB to achieve my >> goal, but otherwise, I can implement this on LLDB and I'd appreciate it if >> anyone has any advice on how to implement such a feature. >> >> Thanks. >> -Emre >> >> >> >> _______________________________________________ >> lldb-dev mailing list >> lldb-dev@lists.llvm.org <mailto:lldb-dev@lists.llvm.org> >> https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev >
_______________________________________________ lldb-dev mailing list lldb-dev@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev