Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759913Ab1CDRNT (ORCPT ); Fri, 4 Mar 2011 12:13:19 -0500 Received: from smtp1.linux-foundation.org ([140.211.169.13]:58910 "EHLO smtp1.linux-foundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1759270Ab1CDRNS (ORCPT ); Fri, 4 Mar 2011 12:13:18 -0500 MIME-Version: 1.0 In-Reply-To: References: <20110301152457.GE26074@htj.dyndns.org> <20110303173422.GA27960@redhat.com> <20110303202246.GB32152@redhat.com> <20110304134126.GL20499@htj.dyndns.org> <20110304140745.GP20499@htj.dyndns.org> <20110304144059.GS20499@htj.dyndns.org> From: Linus Torvalds Date: Fri, 4 Mar 2011 09:12:57 -0800 Message-ID: Subject: Re: [RFC] Proposal for ptrace improvements To: Denys Vlasenko Cc: Tejun Heo , Oleg Nesterov , Roland McGrath , jan.kratochvil@redhat.com, linux-kernel@vger.kernel.org, akpm@linux-foundation.org Content-Type: text/plain; charset=ISO-8859-1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1545 Lines: 35 On Fri, Mar 4, 2011 at 9:05 AM, Denys Vlasenko wrote: > > Here's a typical sequence of operations strace is doing: > > wait4(-1, [{WIFSTOPPED(s) && WSTOPSIG(s) == SIGTRAP}], __WALL, NULL) = 10445 > ptrace(PTRACE_GETSIGINFO, 10445, 0, {si_signo=SIGTRAP, si_code=0x5, > si_pid=10445, si_uid=0, si_value={int=0, ptr=0}}) = 0 > ptrace(PTRACE_PEEKUSER, 10445, 8*ORIG_RAX, [0x36]) = 0 > ptrace(PTRACE_PEEKUSER, 10445, 8*CS, [0x23]) = 0 > ptrace(PTRACE_PEEKUSER, 10445, 8*RAX, [0xffffffffffffffda]) = 0 > ptrace(PTRACE_PEEKUSER, 10445, 8*RBX, [0x1]) = 0 > ptrace(PTRACE_PEEKUSER, 10445, 8*RCX, [0x5401]) = 0 > ptrace(PTRACE_PEEKUSER, 10445, 8*RDX, [0xffb83f10]) = 0 > ptrace(PTRACE_SYSCALL, 10445, 0x1, SIG_0) = 0 > > IOW: strace wastes a lot of time just transiting to the kernel and back > with simple syscalls to get the information. > > What would help here is a "vectorized" waitpid operation > which retrieves much more information in one go: > > waitpid_vec(int max_results, int status_vector[], siginfo_t > si_vector[], struct pt_regs reg_vector[]) No. Start off with what we already have: make ptrace use "PTRACE_GETREGSET" instead of PTRACE_PEEKUSER. That should get the whole "user_regs_struct" in one single system call. Linus -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/