From owner-freebsd-hackers@FreeBSD.ORG Mon Aug 27 19:22:12 2007 Return-Path: Delivered-To: hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7866C16A418 for ; Mon, 27 Aug 2007 19:22:12 +0000 (UTC) (envelope-from frank@exit.com) Received: from tinker.exit.com (tinker.exit.com [206.223.0.1]) by mx1.freebsd.org (Postfix) with ESMTP id 05F9513C442 for ; Mon, 27 Aug 2007 19:22:11 +0000 (UTC) (envelope-from frank@exit.com) Received: from jill.exit.com (jill.exit.com [206.223.0.4]) by tinker.exit.com (8.14.1/8.14.1) with ESMTP id l7RIiYBu066358 for ; Mon, 27 Aug 2007 11:44:34 -0700 (PDT) (envelope-from frank@exit.com) Received: from jill.exit.com (localhost [127.0.0.1]) by jill.exit.com (8.14.1/8.14.1) with ESMTP id l7RIiYXA004549 for ; Mon, 27 Aug 2007 11:44:34 -0700 (PDT) (envelope-from frank@exit.com) Received: (from frank@localhost) by jill.exit.com (8.14.1/8.14.1/Submit) id l7RIiYns004548 for hackers@freebsd.org; Mon, 27 Aug 2007 11:44:34 -0700 (PDT) (envelope-from frank@exit.com) X-Authentication-Warning: jill.exit.com: frank set sender to frank@exit.com using -f From: Frank Mayhar To: hackers@freebsd.org Content-Type: text/plain Content-Transfer-Encoding: 7bit Organization: Exit Consulting Date: Mon, 27 Aug 2007 11:44:33 -0700 Message-Id: <1188240273.84988.13.camel@jill.exit.com> Mime-Version: 1.0 X-Mailer: Evolution 2.10.3 FreeBSD GNOME Team Port X-Virus-Scanned: ClamAV 0.91.1/4076/Mon Aug 27 07:15:54 2007 on tinker.exit.com X-Virus-Status: Clean Cc: Subject: Getrusage(2) weirdness. X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: frank@exit.com List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 27 Aug 2007 19:22:12 -0000 I recently had occasion to need the ru_maxrss field returned from getrusage(2) in Linux 2.6, which as it happens was not implemented. So I implemented it. In the process I wrote a test program to validate my implementation. I also tried running the test under various other operating systems, including FreeBSD 6-stable. Most systems don't implement the field (including Solaris and MacOSX), FreeBSD is one of the few that does. Only, it does so weirdly. You can find the test program at http://www.exit.com/Archives/Linux/getrusage-test.c The output should be pretty self-explanatory. If you run it under FreeBSD 6.2 (at least), you will find that it give inconsistent results. Something like the following: jill ~>./getrusage-test before 0 after: 0 1: rusage_self: FAIL flag 6 granddad 0, kid1 0, kid2 0, kid3 0 kid4 0 kid5 2372 sz 1365 2: rusage_grandchildren: PASS flag 3 dad 0, kid1 2372, kid2 2372, kid3 2372 kid4 2372 sz 2048 3: rusage_children: FAIL flag 3 dad 0, kid1 2372, kid2 2372, kid3 2372 kid4 2372 sz 4096 4: rusage_ignorechildren: PASS jill ~>./getrusage-test before 0 after: 968 1: rusage_self: FAIL flag 6 granddad 968, kid1 0, kid2 0, kid3 0 kid4 0 kid5 0 sz 1365 2: rusage_grandchildren: FAIL flag 3 dad 968, kid1 0, kid2 0, kid3 0 kid4 3572 sz 2048 3: rusage_children: PASS flag 3 dad 1820, kid1 3572, kid2 3572, kid3 3572 kid4 3572 sz 4096 4: rusage_ignorechildren: PASS jill ~>./getrusage-test before 0 after: 0 1: rusage_self: FAIL flag 6 granddad 0, kid1 0, kid2 0, kid3 0 kid4 0 kid5 2336 sz 1365 2: rusage_grandchildren: PASS flag 3 dad 1760, kid1 2336, kid2 2336, kid3 2336 kid4 2336 sz 2048 3: rusage_children: FAIL flag 3 dad 1760, kid1 2336, kid2 2336, kid3 2336 kid4 2336 sz 4096 4: rusage_ignorechildren: PASS jill ~>./getrusage-test before 0 after: 1144 1: rusage_self: PASS flag 6 granddad 1144, kid1 0, kid2 0, kid3 0 kid4 0 kid5 0 sz 1365 2: rusage_grandchildren: FAIL flag 3 dad 1144, kid1 0, kid2 0, kid3 0 kid4 0 sz 2048 3: rusage_children: FAIL flag 3 dad 1144, kid1 0, kid2 0, kid3 0 kid4 0 sz 4096 4: rusage_ignorechildren: PASS jill ~>./getrusage-test before 0 after: 0 1: rusage_self: FAIL flag 6 granddad 0, kid1 0, kid2 0, kid3 0 kid4 0 kid5 1936 sz 1365 2: rusage_grandchildren: PASS flag 3 dad 1760, kid1 1936, kid2 1936, kid3 1936 kid4 1936 sz 2048 3: rusage_children: FAIL flag 3 dad 1760, kid1 1936, kid2 1936, kid3 1936 kid4 1936 sz 4096 4: rusage_ignorechildren: PASS jill ~>./getrusage-test before 0 after: 0 1: rusage_self: FAIL flag 6 granddad 0, kid1 0, kid2 0, kid3 0 kid4 0 kid5 0 sz 1365 2: rusage_grandchildren: FAIL flag 3 dad 0, kid1 0, kid2 0, kid3 0 kid4 3052 sz 2048 3: rusage_children: PASS flag 3 dad 0, kid1 3052, kid2 3052, kid3 3052 kid4 3052 sz 4096 4: rusage_ignorechildren: PASS jill ~>./getrusage-test before 0 after: 0 1: rusage_self: FAIL flag 6 granddad 0, kid1 0, kid2 0, kid3 0 kid4 0 kid5 0 sz 1365 2: rusage_grandchildren: FAIL flag 3 dad 0, kid1 0, kid2 0, kid3 0 kid4 3208 sz 2048 3: rusage_children: PASS flag 3 dad 0, kid1 3208, kid2 3208, kid3 3208 kid4 3208 sz 4096 4: rusage_ignorechildren: PASS jill ~>./getrusage-test before 492 after: 492 1: rusage_self: FAIL flag 6 granddad 492, kid1 0, kid2 0, kid3 0 kid4 0 kid5 0 sz 1365 2: rusage_grandchildren: FAIL flag 3 dad 492, kid1 0, kid2 0, kid3 0 kid4 0 sz 2048 3: rusage_children: FAIL flag 3 dad 492, kid1 0, kid2 0, kid3 0 kid4 0 sz 4096 4: rusage_ignorechildren: PASS jill ~>./getrusage-test before 444 after: 444 1: rusage_self: FAIL flag 6 granddad 444, kid1 0, kid2 0, kid3 0 kid4 0 kid5 0 sz 1365 2: rusage_grandchildren: FAIL flag 3 dad 444, kid1 0, kid2 0, kid3 0 kid4 0 sz 2048 3: rusage_children: FAIL flag 3 dad 444, kid1 0, kid2 0, kid3 0 kid4 0 sz 4096 4: rusage_ignorechildren: PASS -- Frank Mayhar frank@exit.com http://www.exit.com/ Exit Consulting http://www.gpsclock.com/ http://www.exit.com/blog/frank/ http://www.zazzle.com/fmayhar*