From owner-freebsd-ports-bugs@FreeBSD.ORG Mon May 16 06:50:03 2005 Return-Path: Delivered-To: freebsd-ports-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 2072116A4D0 for ; Mon, 16 May 2005 06:50:03 +0000 (GMT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id E37E443D9C for ; Mon, 16 May 2005 06:50:02 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.3/8.13.3) with ESMTP id j4G6o2mw089319 for ; Mon, 16 May 2005 06:50:02 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.3/8.13.1/Submit) id j4G6o2b7089318; Mon, 16 May 2005 06:50:02 GMT (envelope-from gnats) Resent-Date: Mon, 16 May 2005 06:50:02 GMT Resent-Message-Id: <200505160650.j4G6o2b7089318@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-ports-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Chatchawan Wongsiriprasert Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id ADED916A4CE for ; Mon, 16 May 2005 06:46:25 +0000 (GMT) Received: from www.freebsd.org (www.freebsd.org [216.136.204.117]) by mx1.FreeBSD.org (Postfix) with ESMTP id 7FF7943D2D for ; Mon, 16 May 2005 06:46:25 +0000 (GMT) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (localhost [127.0.0.1]) by www.freebsd.org (8.13.1/8.13.1) with ESMTP id j4G6kPbv039558 for ; Mon, 16 May 2005 06:46:25 GMT (envelope-from nobody@www.freebsd.org) Received: (from nobody@localhost) by www.freebsd.org (8.13.1/8.13.1/Submit) id j4G6kOfX039557; Mon, 16 May 2005 06:46:25 GMT (envelope-from nobody) Message-Id: <200505160646.j4G6kOfX039557@www.freebsd.org> Date: Mon, 16 May 2005 06:46:25 GMT From: Chatchawan Wongsiriprasert To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-2.3 Subject: ports/81093: lang/php4 - Slow serialize on FreeBSD X-BeenThere: freebsd-ports-bugs@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Ports bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 16 May 2005 06:50:03 -0000 >Number: 81093 >Category: ports >Synopsis: lang/php4 - Slow serialize on FreeBSD >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Mon May 16 06:50:02 GMT 2005 >Closed-Date: >Last-Modified: >Originator: Chatchawan Wongsiriprasert >Release: 4.8 , 5.4 >Organization: MiracleNet Group >Environment: FreeBSD server3.miraclenet.net 4.8-RELEASE-p27 FreeBSD 4.8-RELEASE-p27 #1: Mon Mar 14 23:10:10 UTC 2005 cws@server3.miraclenet.net:/usr/obj/usr/src/sys/RACKSPACE-US i386 FreeBSD server4.miraclenet.net 5.4-RELEASE-p1 FreeBSD 5.4-RELEASE-p1 #1: Mon May 16 00:39:02 EDT 2005 cws@server4.miraclenet.net:/usr/obj/usr/src/sys/SERVER4 i386 >Description: Serialize use a fix incremental value (SMART_STR_PREALLOC in php_smart_ptr.h) to expand the serailized string. It better for serialize to use exponential incremential value to reduce number of realloc because realloc is very slow on FreeBSD It took about 2 seconds to serialize 2MB array on FreeBSD. The same code run about 0.2 second on Linux >How-To-Repeat: The test code and data can be download at http://freebie.miraclenet.co.th/tmp/test_serialize.tgz >Fix: apply the patch http://freebie.miraclenet.co.th/tmp/patch-php_smart_str.h --- ext/standard/php_smart_str.h.org Wed Apr 16 16:12:37 2003 +++ ext/standard/php_smart_str.h Wed Apr 20 14:17:21 2005 @@ -29,7 +29,11 @@ #define smart_str_0(x) do { if ((x)->c) { (x)->c[(x)->len] = '\0'; } } while (0) #ifndef SMART_STR_PREALLOC -#define SMART_STR_PREALLOC 128 +#define SMART_STR_PREALLOC 1024 +#endif + +#ifndef SMART_PTR_MAX_PREALLOC +#define SMART_PTR_MAX_PREALLOC 1048576 #endif #ifdef SMART_STR_USE_REALLOC @@ -42,8 +46,11 @@ if (!d->c) d->len = d->a = 0; \ newlen = d->len + n; \ if (newlen >= d->a) {\ - d->c = SMART_STR_REALLOC(d->c, newlen + SMART_STR_PREALLOC + 1, what); \ - d->a = newlen + SMART_STR_PREALLOC; \ + size_t pre_alloc = newlen *2;\ + if ( pre_alloc > SMART_PTR_MAX_PREALLOC ) { pre_alloc = SMART_PTR_MAX_PREALLOC; }\ + else if ( pre_alloc < SMART_STR_PREALLOC) { pre_alloc = SMART_STR_PREALLOC; }\ + d->c = SMART_STR_REALLOC(d->c, newlen + pre_alloc + 1, what); \ + d->a = newlen + pre_alloc; \ }\ } >Release-Note: >Audit-Trail: >Unformatted: