From owner-freebsd-hackers@FreeBSD.ORG Wed Feb 19 14:47:42 2014 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 72126E56; Wed, 19 Feb 2014 14:47:42 +0000 (UTC) Received: from mail.myota.org (mail.myota.org [85.10.206.105]) by mx1.freebsd.org (Postfix) with ESMTP id D88621D31; Wed, 19 Feb 2014 14:47:41 +0000 (UTC) Received: from mobile.client (177.189.166.190.f.sta.codetel.net.do [190.166.189.177] (may be forged)) (authenticated bits=128) by mail.myota.org (8.14.7/8.14.7) with ESMTP id s1JElZoj064223; Wed, 19 Feb 2014 15:47:37 +0100 (CET) (envelope-from mail@ma17.ata.myota.org) Received: from submit.client ([127.0.0.1]) by schlappy.local (8.14.7/8.14.7) with ESMTP id s1JElS4B003075; Wed, 19 Feb 2014 15:47:29 +0100 (CET) (envelope-from mail@ma17.ata.myota.org) Received: (from mu@schlappy.local) by schlappy.local (8.14.7/8.14.7/Submit) id s1JElS5L003074; Wed, 19 Feb 2014 15:47:28 +0100 (CET) (envelope-from mail@ma17.ata.myota.org) Date: Wed, 19 Feb 2014 15:47:28 +0100 From: Andre Albsmeier To: freebsd-hackers@freebsd.org, freebsd-threads@freebsd.org Subject: Re: pthread programming eats up resources (My or FreeBSD's fault?) Message-ID: <20140219144728.GA3036@schlappy> References: <20140218180646.GA67861@schlappy> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20140218180646.GA67861@schlappy> X-Echelon: 757, CIO, secure, Tower, SWAT X-Advice: Drop that crappy M$-Outlook, I'm tired of your viruses! User-Agent: Mutt/1.5.21 (2010-09-15) X-Greylist: Not delayed on 85.10.206.105, ACL: AUTH(59), Origin: DO, OS: FreeBSD 9.x X-Virus-Scanned: clamav-milter 0.98.1 at colo X-Virus-Status: Clean Cc: mail@ma17.ata.myota.org X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.17 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 19 Feb 2014 14:47:42 -0000 [Commenting my own mail from below and CC'ing freebsd-threads.] I have tested my code below on a Linux box (3.2.0) and here the behaviour is different and seems correct: While watching with top(1), VIRT climbs up to a few GB and collapses then to a few MB (somehow reminding me of some kind of garbage collection). Important thing is that RES always stays below 1MB. On FreeBSD SIZE and RES are about 100MB apart but both are increasing util 2GB and pth1 dies with Cannot map anonymous memory Out of memory So the question is: Is my programme buggy and Linux works around this bug or is there some kind of memory leak in the pthreads code in FreeBSD? -Andre ----- Forwarded message ----- Well, as these are my first steps regarding thread programming, it's probably my fault... Why does this programme slowly grow and grow until it hits resource limits? ----- snip pth1.c ----- #include #include #include void* mythread( void* arg ) { return NULL; } int main( int argc, const char* const argv[] ) { pthread_t pthr; int i; while( 1 ) { for( i=1000; i; i-- ) if( pthread_create( &pthr, NULL, mythread, NULL ) != 0 ) fprintf( stderr, "pthread_create\n" ); else pthread_detach( pthr ); putchar( '.' ); fflush( stdout ); usleep( 25000 ); } } ----- snap ----- Just to be sure I have also created the non-detaching version which behaves in the same way: ----- snip pth2.c ----- #include #include #include #define M 1000 pthread_t pthr[M]; void* mythread( void* arg ) { return NULL; } int main( int argc, const char* const argv[] ) { int i; while( 1 ) { for( i=M; i; i-- ) if( pthread_create( &pthr[i], NULL, mythread, NULL ) != 0 ) fprintf( stderr, "pthread_create\n" ); for( i=M; i; i-- ) if( pthread_join( pthr[i], NULL ) != 0 ) fprintf( stderr, "pthread_join\n" ); putchar( '.' ); fflush( stdout ); usleep( 25000 ); } } ----- snap ----- Compile them using -pthread and watch their ps output in another window (FreeBSD-9.2 but that shouldn't matter). So what am I doing wrong here? Thanks, -Andre