llvm-project/lldb/source
Greg Clayton ffb2d44ab9 Reduced packet counts to the remote GDB server where possible.
We have been working on reducing the packet count that is sent between LLDB and the debugserver on MacOSX and iOS. Our approach to this was to reduce the packets required when debugging multiple threads. We currently make one qThreadStopInfoXXXX call (where XXXX is the thread ID in hex) per thread except the thread that stopped with a stop reply packet. In order to implement multiple thread infos in a single reply, we need to use structured data, which means JSON. The new jThreadsInfo packet will attempt to retrieve all thread infos in a single packet. The data is very similar to the stop reply packets, but packaged in JSON and uses JSON arrays where applicable. The JSON output looks like:


[
  { "tid":1580681,
    "metype":6,
    "medata":[2,0],
    "reason":"exception",
    "qaddr":140735118423168,
    "registers": {
      "0":"8000000000000000",
      "1":"0000000000000000",
      "2":"20fabf5fff7f0000",
      "3":"e8f8bf5fff7f0000",
      "4":"0100000000000000",
      "5":"d8f8bf5fff7f0000",
      "6":"b0f8bf5fff7f0000",
      "7":"20f4bf5fff7f0000",
      "8":"8000000000000000",
      "9":"61a8db78a61500db",
      "10":"3200000000000000",
      "11":"4602000000000000",
      "12":"0000000000000000",
      "13":"0000000000000000",
      "14":"0000000000000000",
      "15":"0000000000000000",
      "16":"960b000001000000",
      "17":"0202000000000000",
      "18":"2b00000000000000",
      "19":"0000000000000000",
      "20":"0000000000000000"},
    "memory":[
      {"address":140734799804592,"bytes":"c8f8bf5fff7f0000c9a59e8cff7f0000"},
      {"address":140734799804616,"bytes":"00000000000000000100000000000000"}
    ]
  }
]

It contains an array of dicitionaries with all of the key value pairs that are normally in the stop reply packet. Including the expedited registers. Notice that is also contains expedited memory in the "memory" key. Any values in this memory will get included in a new L1 cache in lldb_private::Process where if a memory read request is made and that memory request fits into one of the L1 memory cache blocks, it will use that memory data. If a memory request fails in the L1 cache, it will fall back to the L2 cache which is the same block sized caching we were using before these changes. This allows a process to expedite memory that you are likely to use and it reduces packet count. On MacOSX with debugserver, we expedite the frame pointer backchain for a thread (up to 256 entries) by reading 2 pointers worth of bytes at the frame pointer (for the previous FP and PC), and follow the backchain. Most backtraces on MacOSX and iOS now don't require us to read any memory!

We will try these packets out and if successful, we should port these to lldb-server in the near future. 

<rdar://problem/21494354>

llvm-svn: 240354
2015-06-22 23:12:45 +00:00
..
API Reduced packet counts to the remote GDB server where possible. 2015-06-22 23:12:45 +00:00
Breakpoint Don't #include "lldb-python.h" from anywhere. 2015-05-29 17:41:47 +00:00
Commands Fix a variety of typos. 2015-06-18 05:27:05 +00:00
Core Reduced packet counts to the remote GDB server where possible. 2015-06-22 23:12:45 +00:00
DataFormatters Revert r239873 - I actually want to think some more about this 2015-06-17 02:11:48 +00:00
Expression Fix a variety of typos. 2015-06-18 05:27:05 +00:00
Host Fix a variety of typos. 2015-06-18 05:27:05 +00:00
Initialization Assembly profiler for mips32 2015-05-15 06:53:30 +00:00
Interpreter Fix a variety of typos. 2015-06-18 05:27:05 +00:00
Plugins Reduced packet counts to the remote GDB server where possible. 2015-06-22 23:12:45 +00:00
Symbol Fix a crasher on the MacOSX test suite for Objective C. 2015-06-22 22:35:07 +00:00
Target Reduced packet counts to the remote GDB server where possible. 2015-06-22 23:12:45 +00:00
Utility Fetch object file load address if it isn't specified by the linker 2015-06-18 20:43:56 +00:00
CMakeLists.txt Move LLDB initialization/shutdown to Initialization. 2015-03-19 22:00:21 +00:00
Makefile Move LLDB initialization/shutdown to Initialization. 2015-03-19 22:00:21 +00:00
lldb.cpp Move LLDB initialization/shutdown to Initialization. 2015-03-19 22:00:21 +00:00