Skip to content

Commit

Permalink
Log a warning on badly balanced page cache configurations
Browse files Browse the repository at this point in the history
  • Loading branch information
chrisvest committed May 22, 2015
1 parent 6b33b72 commit aa784f4
Show file tree
Hide file tree
Showing 8 changed files with 31 additions and 13 deletions.
Expand Up @@ -76,7 +76,7 @@ public Result runFullConsistencyCheck( File storeDir,
Log log = logProvider.getLog( getClass() );
DefaultFileSystemAbstraction fileSystem = new DefaultFileSystemAbstraction();
ConfiguringPageCacheFactory pageCacheFactory = new ConfiguringPageCacheFactory(
fileSystem, tuningConfiguration, PageCacheTracer.NULL );
fileSystem, tuningConfiguration, PageCacheTracer.NULL, logProvider.getLog( PageCache.class ) );
PageCache pageCache = pageCacheFactory.getOrCreatePageCache();

try
Expand Down
Expand Up @@ -55,6 +55,7 @@
import org.neo4j.kernel.lifecycle.LifeSupport;
import org.neo4j.kernel.monitoring.Monitors;
import org.neo4j.kernel.monitoring.tracing.Tracers;
import org.neo4j.logging.Log;
import org.neo4j.logging.LogProvider;
import org.neo4j.logging.NullLogProvider;

Expand Down Expand Up @@ -224,13 +225,14 @@ protected Neo4jJobScheduler createJobScheduler()

protected PageCache createPageCache( FileSystemAbstraction fileSystem, Config config, LogService logging, Tracers tracers)
{
Log pageCacheLog = logging.getInternalLog( PageCache.class );
ConfiguringPageCacheFactory pageCacheFactory = new ConfiguringPageCacheFactory(
fileSystem, config, tracers.pageCacheTracer );
fileSystem, config, tracers.pageCacheTracer, pageCacheLog );
PageCache pageCache = pageCacheFactory.getOrCreatePageCache();

if ( config.get( GraphDatabaseSettings.dump_configuration ) )
{
pageCacheFactory.dumpConfiguration( logging.getInternalLog( PageCache.class ) );
pageCacheFactory.dumpConfiguration();
}
return pageCache;
}
Expand Down
Expand Up @@ -39,14 +39,16 @@ public class ConfiguringPageCacheFactory
private final PageSwapperFactory swapperFactory;
private final Config config;
private final PageCacheTracer tracer;
private final Log log;
private PageCache pageCache;

public ConfiguringPageCacheFactory(
FileSystemAbstraction fs, Config config, PageCacheTracer tracer )
FileSystemAbstraction fs, Config config, PageCacheTracer tracer, Log log )
{
this.swapperFactory = new SingleFilePageSwapperFactory( fs );
this.config = config;
this.tracer = tracer;
this.log = log;
}

public synchronized PageCache getOrCreatePageCache()
Expand All @@ -69,18 +71,25 @@ protected PageCache createPageCache()

public int calculateMaxPages( Config config )
{
long availableMemory = config.get( pagecache_memory );
long pageCacheMemory = config.get( pagecache_memory );
long maxHeap = Runtime.getRuntime().maxMemory();
if ( pageCacheMemory / maxHeap > 100 )
{
log.warn( "The memory configuration looks unbalanced. It is generally recommended to have at least " +
"10 KiB of heap memory, for every 1 MiB of page cache memory. The current configuration is " +
"allocating %s bytes for the page cache, and %s bytes for the heap.", pageCacheMemory, maxHeap );
}
long pageSize = config.get( mapped_memory_page_size );
long pageCount = availableMemory / pageSize;
return (int) Math.min( Integer.MAX_VALUE, pageCount );
long pageCount = pageCacheMemory / pageSize;
return (int) Math.min( Integer.MAX_VALUE - 2000, pageCount );
}

public int calculatePageSize( Config config )
{
return config.get( mapped_memory_page_size ).intValue();
}

public void dumpConfiguration( Log log )
public void dumpConfiguration()
{
long totalPhysicalMemory = totalPhysicalMemory();
String totalPhysicalMemMb = totalPhysicalMemory == -1? "?" : "" + totalPhysicalMemory / 1024 / 1024;
Expand Down
Expand Up @@ -25,6 +25,7 @@
import org.neo4j.io.pagecache.PageCache;
import org.neo4j.io.pagecache.tracing.PageCacheTracer;
import org.neo4j.kernel.configuration.Config;
import org.neo4j.logging.FormattedLogProvider;

/*
* This class is an helper to allow to construct properly a page cache in the few places we need it without all
Expand All @@ -51,8 +52,9 @@ public static PageCache createPageCache(
Config baseConfig = new Config( MapUtil.stringMap(
GraphDatabaseSettings.pagecache_memory.name(), "8M" ) );
Config finalConfig = baseConfig.with( config.getParams() );
FormattedLogProvider logProvider = FormattedLogProvider.toOutputStream( System.err );
ConfiguringPageCacheFactory pageCacheFactory = new ConfiguringPageCacheFactory(
fileSystem, finalConfig, PageCacheTracer.NULL );
fileSystem, finalConfig, PageCacheTracer.NULL, logProvider.getLog( PageCache.class ) );
return pageCacheFactory.getOrCreatePageCache();
}
}
Expand Up @@ -134,6 +134,7 @@
import org.neo4j.kernel.impl.util.Neo4jJobScheduler;
import org.neo4j.kernel.lifecycle.LifeSupport;
import org.neo4j.logging.Log;
import org.neo4j.logging.NullLog;
import org.neo4j.logging.NullLogProvider;
import org.neo4j.kernel.monitoring.Monitors;

Expand Down Expand Up @@ -240,7 +241,7 @@ public Label apply( long from )
this.fileSystem = fileSystem;
this.storeDir = storeDir;
ConfiguringPageCacheFactory pageCacheFactory = new ConfiguringPageCacheFactory(
fileSystem, config, PageCacheTracer.NULL );
fileSystem, config, PageCacheTracer.NULL, NullLog.getInstance() );
PageCache pageCache = pageCacheFactory.getOrCreatePageCache();

JobScheduler jobScheduler = life.add( new Neo4jJobScheduler() );
Expand Down
Expand Up @@ -25,6 +25,7 @@
import org.neo4j.io.pagecache.PageCache;
import org.neo4j.io.pagecache.tracing.PageCacheTracer;
import org.neo4j.kernel.configuration.Config;
import org.neo4j.logging.NullLog;
import org.neo4j.test.EphemeralFileSystemRule;

import static org.hamcrest.CoreMatchers.equalTo;
Expand All @@ -49,7 +50,7 @@ public void shouldUseConfiguredPageSizeAndFitAsManyPagesAsItCan() throws Throwab

// When
ConfiguringPageCacheFactory pageCacheFactory = new ConfiguringPageCacheFactory(
fsRule.get(), config, PageCacheTracer.NULL );
fsRule.get(), config, PageCacheTracer.NULL, NullLog.getInstance() );
PageCache cache = pageCacheFactory.getOrCreatePageCache();

// Then
Expand Down
Expand Up @@ -43,6 +43,7 @@
import org.neo4j.kernel.impl.store.StoreAccess;
import org.neo4j.kernel.impl.store.StoreFactory;
import org.neo4j.kernel.monitoring.Monitors;
import org.neo4j.logging.NullLog;
import org.neo4j.logging.NullLogProvider;
import org.neo4j.perftest.enterprise.generator.DataGenerator;
import org.neo4j.perftest.enterprise.util.Configuration;
Expand Down Expand Up @@ -120,7 +121,7 @@ private static void run( Configuration configuration ) throws Exception
Config tuningConfiguration = buildTuningConfiguration( configuration );
fileSystem = new DefaultFileSystemAbstraction();
ConfiguringPageCacheFactory pageCacheFactory = new ConfiguringPageCacheFactory(
fileSystem, tuningConfiguration, PageCacheTracer.NULL );
fileSystem, tuningConfiguration, PageCacheTracer.NULL, NullLog.getInstance() );
pageCache = pageCacheFactory.getOrCreatePageCache();
DirectStoreAccess directStoreAccess = createScannableStores( storeDir, tuningConfiguration );

Expand Down
Expand Up @@ -38,6 +38,7 @@
import org.neo4j.kernel.impl.pagecache.ConfiguringPageCacheFactory;
import org.neo4j.kernel.impl.store.RecordStore;
import org.neo4j.kernel.impl.store.StoreAccess;
import org.neo4j.logging.NullLog;
import org.neo4j.perftest.enterprise.util.Configuration;
import org.neo4j.perftest.enterprise.util.Conversion;
import org.neo4j.perftest.enterprise.util.Parameters;
Expand Down Expand Up @@ -121,7 +122,8 @@ public static void run( Configuration configuration ) throws IOException
batchInserter.shutdown();
}
ConfiguringPageCacheFactory pageCacheFactory = new ConfiguringPageCacheFactory(
new DefaultFileSystemAbstraction(), new Config( config ), PageCacheTracer.NULL );
new DefaultFileSystemAbstraction(), new Config( config ), PageCacheTracer.NULL,
NullLog.getInstance() );
PageCache pageCache = pageCacheFactory.getOrCreatePageCache();
StoreAccess stores = new StoreAccess( pageCache, storeDir );
try
Expand Down

0 comments on commit aa784f4

Please sign in to comment.