From 9b01ddd641e72c2d7fb5864f0079a5a39563eb7d Mon Sep 17 00:00:00 2001 From: Brian Quinion Date: Thu, 26 Apr 2012 01:35:06 +0100 Subject: [PATCH] set osm2pgsql cache memory to a default based on memory in the machine --- lib/lib.php | 14 ++++++++++++++ utils/setup.php | 20 +++++++++++--------- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/lib/lib.php b/lib/lib.php index 1564a83c..889cb2cf 100644 --- a/lib/lib.php +++ b/lib/lib.php @@ -57,6 +57,20 @@ return sizeof($aMatches[0]); } + function getTotalMemoryMB() + { + $sCPU = file_get_contents('/proc/meminfo'); + preg_match('#MemTotal: +([0-9]+) kB#', $sCPU, $aMatches); + return (int)($aMatches[1]/1024); + } + + function getCacheMemoryMB() + { + $sCPU = file_get_contents('/proc/meminfo'); + preg_match('#Cached: +([0-9]+) kB#', $sCPU, $aMatches); + return (int)($aMatches[1]/1024); + } + function bySearchRank($a, $b) { if ($a['iSearchRank'] == $b['iSearchRank']) return 0; diff --git a/utils/setup.php b/utils/setup.php index d7aa3bc7..6415ea12 100755 --- a/utils/setup.php +++ b/utils/setup.php @@ -50,6 +50,15 @@ $iInstances = getProcessorCount(); echo "WARNING: resetting threads to $iInstances\n"; } + + // Assume we can steal all the cache memory in the box (unless told otherwise) + $iCacheMemory = (isset($aCMDResult['osm2pgsql-cache'])?$aCMDResult['osm2pgsql-cache']:getCacheMemoryMB()); + if ($iCacheMemory > getTotalMemoryMB()) + { + $iCacheMemory = getCacheMemoryMB(); + echo "WARNING: resetting cache memory to $iCacheMemory\n"; + } + if (isset($aCMDResult['osm-file']) && !isset($aCMDResult['osmosis-init-date'])) { $sBaseFile = basename($aCMDResult['osm-file']); @@ -83,7 +92,7 @@ $oDB =& getDB(); passthru('createlang plpgsql '.$aDSNInfo['database']); - $pgver = (float) CONST_Postgresql_Version; + $pgver = (float) CONST_Postgresql_Version; if ($pgver < 9.1) { pgsqlRunScriptFile(CONST_Path_Postgresql_Contrib.'/hstore.sql'); } else { @@ -109,14 +118,7 @@ $osm2pgsql = CONST_Osm2pgsql_Binary; if (!file_exists($osm2pgsql)) fail("please download and build osm2pgsql"); $osm2pgsql .= ' -lsc -O gazetteer --hstore'; - if (isset($aCMDResult['osm2pgsql-cache'])) - { - $osm2pgsql .= ' -C '.$aCMDResult['osm2pgsql-cache']; - } - else - { - $osm2pgsql .= ' -C 15000'; - } + $osm2pgsql .= ' -C '.$iCacheMemory; $osm2pgsql .= ' -d '.$aDSNInfo['database'].' '.$aCMDResult['osm-file']; passthru($osm2pgsql); -- 2.39.5