From owner-svn-src-head@freebsd.org Wed May 9 00:00:49 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id DBED0FCE977; Wed, 9 May 2018 00:00:48 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 8B07976061; Wed, 9 May 2018 00:00:48 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 6D1B11703; Wed, 9 May 2018 00:00:48 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w4900mJR040539; Wed, 9 May 2018 00:00:48 GMT (envelope-from mmacy@FreeBSD.org) Received: (from mmacy@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w4900mwO040538; Wed, 9 May 2018 00:00:48 GMT (envelope-from mmacy@FreeBSD.org) Message-Id: <201805090000.w4900mwO040538@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mmacy set sender to mmacy@FreeBSD.org using -f From: Matt Macy Date: Wed, 9 May 2018 00:00:48 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333390 - in head/sys: kern sys X-SVN-Group: head X-SVN-Commit-Author: mmacy X-SVN-Commit-Paths: in head/sys: kern sys X-SVN-Commit-Revision: 333390 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 09 May 2018 00:00:49 -0000 Author: mmacy Date: Wed May 9 00:00:47 2018 New Revision: 333390 URL: https://svnweb.freebsd.org/changeset/base/333390 Log: Reduce overhead of ktrace checks in the common case. KTRPOINT() checks both if we are tracing _and_ if we are recursing within ktrace. The second condition is only ever executed if ktrace is actually enabled. This change moves the check out of the hot path in to the functions themselves. Discussed with mjg@ Reported by: mjg@ Approved by: sbruno@ Modified: head/sys/kern/kern_ktrace.c head/sys/sys/ktrace.h Modified: head/sys/kern/kern_ktrace.c ============================================================================== --- head/sys/kern/kern_ktrace.c Tue May 8 23:13:11 2018 (r333389) +++ head/sys/kern/kern_ktrace.c Wed May 9 00:00:47 2018 (r333390) @@ -448,6 +448,9 @@ ktrsyscall(int code, int narg, register_t args[]) size_t buflen; char *buf = NULL; + if (__predict_false(curthread->td_pflags & TDP_INKTRACE)) + return; + buflen = sizeof(register_t) * narg; if (buflen > 0) { buf = malloc(buflen, M_KTRACE, M_WAITOK); @@ -475,6 +478,9 @@ ktrsysret(int code, int error, register_t retval) struct ktr_request *req; struct ktr_sysret *ktp; + if (__predict_false(curthread->td_pflags & TDP_INKTRACE)) + return; + req = ktr_getrequest(KTR_SYSRET); if (req == NULL) return; @@ -729,6 +735,9 @@ ktrcsw(int out, int user, const char *wmesg) struct ktr_request *req; struct ktr_csw *kc; + if (__predict_false(curthread->td_pflags & TDP_INKTRACE)) + return; + req = ktr_getrequest(KTR_CSW); if (req == NULL) return; @@ -750,6 +759,9 @@ ktrstruct(const char *name, const void *data, size_t d char *buf; size_t buflen, namelen; + if (__predict_false(curthread->td_pflags & TDP_INKTRACE)) + return; + if (data == NULL) datalen = 0; namelen = strlen(name) + 1; @@ -776,6 +788,9 @@ ktrstructarray(const char *name, enum uio_seg seg, con size_t buflen, datalen, namelen; int max_items; + if (__predict_false(curthread->td_pflags & TDP_INKTRACE)) + return; + /* Trim array length to genio size. */ max_items = ktr_geniosize / struct_size; if (num_items > max_items) { @@ -820,6 +835,9 @@ ktrcapfail(enum ktr_cap_fail_type type, const cap_righ struct ktr_request *req; struct ktr_cap_fail *kcf; + if (__predict_false(curthread->td_pflags & TDP_INKTRACE)) + return; + req = ktr_getrequest(KTR_CAPFAIL); if (req == NULL) return; @@ -844,6 +862,9 @@ ktrfault(vm_offset_t vaddr, int type) struct ktr_request *req; struct ktr_fault *kf; + if (__predict_false(curthread->td_pflags & TDP_INKTRACE)) + return; + req = ktr_getrequest(KTR_FAULT); if (req == NULL) return; @@ -860,6 +881,9 @@ ktrfaultend(int result) struct thread *td = curthread; struct ktr_request *req; struct ktr_faultend *kf; + + if (__predict_false(curthread->td_pflags & TDP_INKTRACE)) + return; req = ktr_getrequest(KTR_FAULTEND); if (req == NULL) Modified: head/sys/sys/ktrace.h ============================================================================== --- head/sys/sys/ktrace.h Tue May 8 23:13:11 2018 (r333389) +++ head/sys/sys/ktrace.h Wed May 9 00:00:47 2018 (r333390) @@ -70,8 +70,7 @@ struct ktr_header { * is the public interface. */ #define KTRCHECK(td, type) ((td)->td_proc->p_traceflag & (1 << type)) -#define KTRPOINT(td, type) \ - (KTRCHECK((td), (type)) && !((td)->td_pflags & TDP_INKTRACE)) +#define KTRPOINT(td, type) (__predict_false(KTRCHECK((td), (type)))) #define KTRCHECKDRAIN(td) (!(STAILQ_EMPTY(&(td)->td_proc->p_ktr))) #define KTRUSERRET(td) do { \ if (KTRCHECKDRAIN(td)) \