From owner-svn-src-projects@FreeBSD.ORG Fri Jan 11 21:26:05 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 4ABC52C0; Fri, 11 Jan 2013 21:26:05 +0000 (UTC) (envelope-from bright@mu.org) Received: from elvis.mu.org (elvis.mu.org [192.203.228.196]) by mx1.freebsd.org (Postfix) with ESMTP id 02D9026D; Fri, 11 Jan 2013 21:26:05 +0000 (UTC) Received: from Alfreds-MacBook-Pro-9.local (unknown [207.238.187.242]) by elvis.mu.org (Postfix) with ESMTPSA id 31B301A3C27; Fri, 11 Jan 2013 13:25:56 -0800 (PST) Message-ID: <50F08363.5020909@mu.org> Date: Fri, 11 Jan 2013 16:25:55 -0500 From: Alfred Perlstein User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:17.0) Gecko/17.0 Thunderbird/17.0 MIME-Version: 1.0 To: John Baldwin Subject: Re: svn commit: r245259 - projects/utrace2 References: <201301101758.r0AHw6m7078896@svn.freebsd.org> <201301101610.43321.jhb@freebsd.org> <50EF98C3.3000200@mu.org> <201301111029.23235.jhb@freebsd.org> In-Reply-To: <201301111029.23235.jhb@freebsd.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Cc: svn-src-projects@freebsd.org, Alfred Perlstein , src-committers@freebsd.org X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 11 Jan 2013 21:26:05 -0000 On 1/11/13 10:29 AM, John Baldwin wrote: > On Thursday, January 10, 2013 11:44:51 PM Alfred Perlstein wrote: >> On 1/10/13 4:10 PM, John Baldwin wrote: >>> On Thursday, January 10, 2013 12:58:06 PM Alfred Perlstein wrote: >>>> Author: alfred >>>> Date: Thu Jan 10 17:58:05 2013 >>>> New Revision: 245259 >>>> URL: http://svnweb.freebsd.org/changeset/base/245259 >>>> >>>> Log: >>>> Project branch for utrace2(2) work. >>>> >>>> The original utrace(2) call from FreeBSD 2.2 did not offer a >>>> standardized way to specify the type of data being traced. Examples, >>>> a utrace(2) record of 3 words is assumed to be a malloc(3) utrace >>>> point, while RTLD uses a string at the start of the utrace record. >>>> >>>> Instead of risking breaking 10+ years of existing code, utrace2 is >>>> introduced which will include "type,version" tuple in the utrace >>>> data to allow utilities such as ktrace to parse them safely. >>>> >>>> Additionally a namespace is provided for both the base system and >>>> for developers wishing to make use of the utrace2(2) system so >>>> there are no collisions. >>> Hummm, when I added the RTLD ones, I figured the convention of using a 4 >>> character signature at the beginning for future traces would suffice just >>> fine (e.g., see ACPI tables and most other BIOS tables that all use 4 >>> char signatures (_32_, $PIR, _MP_, etc.). It seems cumbersome to have a >>> separate ktrace/kdump flag, esp. if the plan is to obsolete utrace(). >>> In that case 'u' should just toggle both. >> That is a good idea. My concern is how do we deal with random old >> utrace data that may have been generated by old applications with >> unstructured data? > Let the users who wrote them cope with that. I suspect there are close to > zero of those, and if someone was able to write something that used utrace(2) > they should be clueful enough to cope. Interesting. Care to explain why you feel we need to break these consumers considering that the code not to break them is already written? > >>> Do you have any new traces you want to add that you couldn't do using the >>> 4 char signature method? >> The issue with the current system is that there is nothing separating >> FreeBSD namespace from what an application developer may create. > Do we really think there are any application developers doing this? Also, > I think the integer version is far more prone to conflicts if any applications > do ever use it than a 4-character signature. Interesting. In the branch I created I specifically said that the space below 100 was for project use only. As far as a 4 character signature versus integer I am now very confused. Isn't sizeof(char[4]) == sizeof(int) on most (all?) of our platforms? Maybe I am missing something? > >> What do you think about putting the old utrace(2) under COMPAT_FREEBSD9 >> and moving forward to a system that allows FreeBSD to have a separate >> namespace from application space? >> >> Any alternatives? Do we just have the convention that FreeBSD utrace >> records start with underbar? "_"? Suggestions appreciated. > Well, RTLD already starts with a non-underbar, but perhaps we could mandate > that for any future traces. However, I have mostly assumed that there is > little-to-no use of utrace() by applications and instead that the only real > uses are in system libraries such as for malloc() and rtld's LD_UTRACE. Do > you know of any applications that use utrace? Interesting, I really don't know that many consumers of it, but I don't see the need to break them if the code not to break them is already written and ready for prime time. One particular consumer I know of was Kerimada, he actually used utrace(2) malloc to write a leak detector, which is how I came across this. I'm not sure how long his code has been posted, but it is detrimental to break his code: http://keramida.wordpress.com/2008/10/15/extracting-useful-info-from-freebsd-malloc-tracing/ Having been on the other side of such changes "the user will catch up" I truly find such decisions to impact my opinion very negatively of whatever project I'm utilizing that chooses to take that path, in particular when I see how easy it would have been for them to maintain some level of compatibility. If you'd like we can discuss the root cause as to why keeping things comfortably compatible is an issue for you: Is due to additional code? If so we can put the old utrace2(2) code under COMPAT_FREEBSD9, then we can have it gone. If it's due to kdump's u/U code, I think maybe we can merge them into just 'u' Other issues? Please expound, I would love to address how we can get this working. > > As far as future system uses, it might be neat to add some libthr traces > (_THR?) to denote pthread operations like acquiring locks. OTOH, a better use > of time for that might be porting ltrace to FreeBSD. > ltrace may be portable via the ktrace hooks, it would be relatively clean to do so using the new utrace2(2) API. -Alfred