From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 89544 invoked by alias); 19 Aug 2019 19:18:58 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 89480 invoked by uid 89); 19 Aug 2019 19:18:58 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-23.6 required=5.0 tests=BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_NONE,SPF_PASS,TO_NO_BRKTS_PCNT autolearn=ham version=3.3.1 spammy=HX-Google-DKIM-Signature:reply-to, ps, ack, PS X-HELO: mail-io1-f68.google.com Received: from mail-io1-f68.google.com (HELO mail-io1-f68.google.com) (209.85.166.68) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 19 Aug 2019 19:18:55 +0000 Received: by mail-io1-f68.google.com with SMTP id i22so6792116ioh.2 for ; Mon, 19 Aug 2019 12:18:55 -0700 (PDT) Return-Path: Received: from mail-io1-f46.google.com (mail-io1-f46.google.com. [209.85.166.46]) by smtp.gmail.com with ESMTPSA id a1sm11311303ioo.5.2019.08.19.12.18.53 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 19 Aug 2019 12:18:53 -0700 (PDT) Received: by mail-io1-f46.google.com with SMTP id i22so6791939ioh.2 for ; Mon, 19 Aug 2019 12:18:53 -0700 (PDT) MIME-Version: 1.0 Reply-To: cem@freebsd.org From: Conrad Meyer Date: Mon, 19 Aug 2019 19:18:00 -0000 Message-ID: Subject: [OB PATCH] Improve remote attach round-trips without btrace To: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary="000000000000e4577b05907d35a0" X-SW-Source: 2019-08/txt/msg00420.txt.bz2 --000000000000e4577b05907d35a0 Content-Type: text/plain; charset="UTF-8" Content-length: 2892 Hello list, For remotes which do not support 'qXfer:btrace-conf:read', we can save several round trips for each thread. This is especially significant when your remote is a kernel with 100s or 1000s of threads and latency is intercontinental. Without the change, with target, remote, and infrun debugging enabled, one might see: Sending packet: $Hg18aee#43...Ack Packet received: OK Sending packet: $Hg186f7#eb...Ack Packet received: OK remote:target_xfer_partial (24, , 0x805454000, 0x0, 0x0, 4096) = -1, 0 (Repeated for all non-exited threads.) What's happening here is that remote_target::remote_btrace_maybe_reopen is: * walking all non-exited threads * for each, invoking set_general_thread () ("HgNNNNN" packet sent to remote) * btrace_config is initialized to zero with memset * btrace_read_config -> ... -> remote_target::remote_read_qxfer checks if PACKET_qXfer_btrace_conf is disabled, and does not send any packet; does not modify btrace_config * (The same check results in the "remote:target_xfer_partial (...) = -1" error return printed with debugging enabled) * Finally, the 'format == BTRACE_FORMAT_NONE' condition short-circuits the loop with 'continue' because BTRACE_FORMAT_NONE happens to have a zero value, matching the earlier memset. With the change, if the remote does not specify 'qXfer:btrace-conf:read+' in qSupported stub features, these spurious thread switches are avoided. Empirically, this improves "target remote" attach time on a particular real-world configuration with ~770 threads from ~2 minutes to ~4 seconds: $ ministat control.dat test.dat x control.dat + test.dat +--------------------------------------------------------------------------+ |+ x| |+ x| |+ x| |A A| +--------------------------------------------------------------------------+ N Min Max Median Avg Stddev x 3 117.58 117.99 117.84 117.80333 0.20744477 + 3 4.2 4.22 4.21 4.21 0.01 Difference at 95.0% confidence -113.593 +/- 0.332863 -96.4262% +/- 0.0169361% (Student's t, pooled s = 0.146856) Please find the 'git format-patch' formatted patch attached to this email, and please let me know if you have any follow-up questions. I have already sent a copyright disclaimer form email for this change to assign@gnu. Thanks, Conrad P.S., I am not subscribed to the list. gdb/ChangeLog: * remote.c (remote_target::remote_btrace_maybe_reopen): Avoid unnecessary thread walk if remote doesn't support the packet. --000000000000e4577b05907d35a0 Content-Type: text/x-patch; charset="US-ASCII"; name="gdb.btrace.0.patch" Content-Disposition: attachment; filename="gdb.btrace.0.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jzir9zpq0 Content-length: 3880 RnJvbSAyZjNiNGIwNDcyYTljYmMwMjg4YTc4NzQ4N2ExYmM1ODRlMmMxN2Yz IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBDb25yYWQgTWV5ZXIg PGNlbUBGcmVlQlNELm9yZz4KRGF0ZTogTW9uLCAxOSBBdWcgMjAxOSAwMDow MjoxOSAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIEltcHJvdmUgcmVtb3RlIGF0 dGFjaCByb3VuZC10cmlwcyB3aXRob3V0IGJ0cmFjZQoKRm9yIHJlbW90ZXMg d2hpY2ggZG8gbm90IHN1cHBvcnQgYnRyYWNlIGF0IGFsbCwgd2UgY2FuIHNh dmUgc2V2ZXJhbApyb3VuZCB0cmlwcyBmb3IgZWFjaCB0aHJlYWQuICBUaGlz IGlzIGVzcGVjaWFsbHkgc2lnbmlmaWNhbnQgd2hlbiB5b3VyCnJlbW90ZSBp cyBhIGtlcm5lbCB3aXRoIDEwMHMgb3IgMTAwMHMgb2YgdGhyZWFkcyBhbmQg bGF0ZW5jeSBpcwppbnRlcmNvbnRpbmVudGFsLgoKUHJldmlvdXNseSwgd2l0 aCB0YXJnZXQsIHJlbW90ZSwgYW5kIGluZnJ1biBkZWJ1Z2dpbmcgZW5hYmxl ZCwgb25lIG1pZ2h0CnNlZToKCiAgICBTZW5kaW5nIHBhY2tldDogJEhnMThh ZWUjNDMuLi5BY2sKICAgIFBhY2tldCByZWNlaXZlZDogT0sKICAgIFNlbmRp bmcgcGFja2V0OiAkSGcxODZmNyNlYi4uLkFjawogICAgUGFja2V0IHJlY2Vp dmVkOiBPSwogICAgcmVtb3RlOnRhcmdldF94ZmVyX3BhcnRpYWwgKDI0LCAs IDB4ODA1NDU0MDAwLCAweDAsIDB4MCwgNDA5NikgPSAtMSwgMAoKUmVwZWF0 ZWQgZm9yIGFsbCBub24tZXhpdGVkIHRocmVhZHMuCgpBZnRlcndhcmRzLCBp ZiB0aGUgcmVtb3RlIGRvZXMgbm90IHNwZWNpZnkgJ3FYZmVyOmJ0cmFjZS1j b25mOnJlYWQrJyBpbgpxU3VwcG9ydGVkIHN0dWIgZmVhdHVyZXMsIHRoZXNl IHNwdXJpb3VzIHRocmVhZCBzd2l0Y2hlcyBzaG91bGQgYmUKYXZvaWRlZC4K CmdkYi9DaGFuZ2VMb2c6CgoJKiByZW1vdGUuYyAocmVtb3RlX3RhcmdldDo6 cmVtb3RlX2J0cmFjZV9tYXliZV9yZW9wZW4pOiBBdm9pZAoJdW5uZWNlc3Nh cnkgdGhyZWFkIHdhbGsgaWYgcmVtb3RlIGRvZXNuJ3Qgc3VwcG9ydCB0aGUg cGFja2V0LgotLS0KIGdkYi9DaGFuZ2VMb2cgfCA1ICsrKysrCiBnZGIvcmVt b3RlLmMgIHwgNiArKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMTEgaW5zZXJ0 aW9ucygrKQoKZGlmZiAtLWdpdCBhL2dkYi9DaGFuZ2VMb2cgYi9nZGIvQ2hh bmdlTG9nCmluZGV4IGJiMmU4ZDEzM2YuLmU0OWZjYjEyYTAgMTAwNjQ0Ci0t LSBhL2dkYi9DaGFuZ2VMb2cKKysrIGIvZ2RiL0NoYW5nZUxvZwpAQCAtMSwx MCArMSwxNSBAQAorMjAxOS0wOC0xOCAgQ29ucmFkIE1leWVyICA8Y2VtQEZy ZWVCU0Qub3JnPgorCisJKiByZW1vdGUuYyAocmVtb3RlX3RhcmdldDo6cmVt b3RlX2J0cmFjZV9tYXliZV9yZW9wZW4pOiBBdm9pZAorCXVubmVjZXNzYXJ5 IHRocmVhZCB3YWxrIGlmIHJlbW90ZSBkb2Vzbid0IHN1cHBvcnQgdGhlIHBh Y2tldC4KKwogMjAxOS0wNy0xNSAgVG9tIFRyb21leSAgPHRyb21leUBhZGFj b3JlLmNvbT4KIAogCSogbWkvbWktb3V0LmMgKG1pX3VpX291dDo6ZG9fZmll bGRfaW50KTogVXNlIHBsb25nZXN0LgogCiAyMDE5LTA3LTE1ICBUb20gVHJv bWV5ICA8dHJvbWV5QGFkYWNvcmUuY29tPgogCiAJKiBtaS9taS1vdXQuaCAo Y2xhc3MgbWlfdWlfb3V0KSA8ZG9fZmllbGRfdW5zaWduZWQ+OiBEZWNsYXJl LgogCSogbWkvbWktb3V0LmMgKG1pX3VpX291dDo6ZG9fZmllbGRfdW5zaWdu ZWQpOiBOZXcgbWV0aG9kLgogCSogY2xpLW91dC5oIChjbGFzcyBjbGlfdWlf b3V0KSA8ZG9fZmllbGRfdW5zaWduZWQ+OiBEZWNsYXJlLgogCSogY2xpLW91 dC5jIChjbGlfdWlfb3V0Ojpkb19maWVsZF9pbnQpOiBOZXcgbWV0aG9kLgpk aWZmIC0tZ2l0IGEvZ2RiL3JlbW90ZS5jIGIvZ2RiL3JlbW90ZS5jCmluZGV4 IDQyYzczMGU0OGYuLjhkNzI4MDgzNjAgMTAwNjQ0Ci0tLSBhL2dkYi9yZW1v dGUuYworKysgYi9nZGIvcmVtb3RlLmMKQEAgLTEzNjkzLDIwICsxMzY5Mywy NiBAQCBidHJhY2VfcmVhZF9jb25maWcgKHN0cnVjdCBidHJhY2VfY29uZmln ICpjb25mKQogCiB2b2lkCiByZW1vdGVfdGFyZ2V0OjpyZW1vdGVfYnRyYWNl X21heWJlX3Jlb3BlbiAoKQogewogICBzdHJ1Y3QgcmVtb3RlX3N0YXRlICpy cyA9IGdldF9yZW1vdGVfc3RhdGUgKCk7CiAgIGludCBidHJhY2VfdGFyZ2V0 X3B1c2hlZCA9IDA7CiAjaWYgIWRlZmluZWQgKEhBVkVfTElCSVBUKQogICBp bnQgd2FybmVkID0gMDsKICNlbmRpZgogCisgIC8qIERvbid0IHdhbGsgdGhl IGVudGlyZXR5IG9mIHRoZSByZW1vdGUgdGhyZWFkIGxpc3Qgd2hlbiB3ZSBr bm93IHRoZSBmZWF0dXJlCisgICAgIGlzbid0IHN1cHBvcnRlZCBieSB0aGUg cmVtb3RlLiAgV2l0aCB0aG91c2FuZHMgb2YgdGhyZWFkcyBhbmQgYSBoaWdo CisgICAgIGxhdGVuY3kgcmVtb3RlLCB0aGlzIGlzIGEgaHVnZSB3YXN0ZS4g ICovCisgIGlmIChwYWNrZXRfc3VwcG9ydCAoUEFDS0VUX3FYZmVyX2J0cmFj ZV9jb25mKSAhPSBQQUNLRVRfRU5BQkxFKQorICAgIHJldHVybjsKKwogICBz Y29wZWRfcmVzdG9yZV9jdXJyZW50X3RocmVhZCByZXN0b3JlX3RocmVhZDsK IAogICBmb3IgKHRocmVhZF9pbmZvICp0cCA6IGFsbF9ub25fZXhpdGVkX3Ro cmVhZHMgKCkpCiAgICAgewogICAgICAgc2V0X2dlbmVyYWxfdGhyZWFkICh0 cC0+cHRpZCk7CiAKICAgICAgIG1lbXNldCAoJnJzLT5idHJhY2VfY29uZmln LCAweDAwLCBzaXplb2YgKHN0cnVjdCBidHJhY2VfY29uZmlnKSk7CiAgICAg ICBidHJhY2VfcmVhZF9jb25maWcgKCZycy0+YnRyYWNlX2NvbmZpZyk7CiAK ICAgICAgIGlmIChycy0+YnRyYWNlX2NvbmZpZy5mb3JtYXQgPT0gQlRSQUNF X0ZPUk1BVF9OT05FKQotLSAKMi4yMS4wCgo= --000000000000e4577b05907d35a0--