Search in sources :

Example 31 with DefaultPageCacheTracer

use of org.neo4j.io.pagecache.tracing.DefaultPageCacheTracer in project neo4j by neo4j.

the class CrashGenerationCleanerTest method tracePageCacheAccessInCleaners.

@Test
void tracePageCacheAccessInCleaners() throws IOException {
    int numberOfPages = randomRule.intBetween(100, 1000);
    Page[] pages = new Page[numberOfPages];
    for (int i = 0; i < numberOfPages; i++) {
        Page page = randomPage(0, new MutableInt());
        pages[i] = page;
    }
    initializeFile(pagedFile, pages);
    var cacheTracer = new DefaultPageCacheTracer();
    assertThat(cacheTracer.pins()).isZero();
    assertThat(cacheTracer.unpins()).isZero();
    assertThat(cacheTracer.hits()).isZero();
    var cleaner = new CrashGenerationCleaner(pagedFile, treeNode, 0, pages.length, unstableTreeState.stableGeneration(), unstableTreeState.unstableGeneration(), NO_MONITOR, cacheTracer, "test tree");
    cleaner.clean(executor);
    assertThat(cacheTracer.pins()).isEqualTo(pages.length);
    assertThat(cacheTracer.unpins()).isEqualTo(pages.length);
    assertThat(cacheTracer.hits()).isEqualTo(pages.length);
}
Also used : MutableInt(org.apache.commons.lang3.mutable.MutableInt) DefaultPageCacheTracer(org.neo4j.io.pagecache.tracing.DefaultPageCacheTracer) Test(org.junit.jupiter.api.Test)

Example 32 with DefaultPageCacheTracer

use of org.neo4j.io.pagecache.tracing.DefaultPageCacheTracer in project neo4j by neo4j.

the class KernelStatementTest method emptyPageCacheStatisticOnClosedStatement.

@Test
void emptyPageCacheStatisticOnClosedStatement() {
    var transaction = mock(KernelTransactionImplementation.class, RETURNS_DEEP_STUBS);
    try (var statement = createStatement(transaction)) {
        var cursorContext = new CursorContext(new DefaultPageCursorTracer(new DefaultPageCacheTracer(), "test"));
        statement.initialize(Mockito.mock(Locks.Client.class), cursorContext, 100);
        statement.acquire();
        cursorContext.getCursorTracer().beginPin(false, 1, null).hit();
        cursorContext.getCursorTracer().beginPin(false, 1, null).hit();
        cursorContext.getCursorTracer().beginPin(false, 1, null).beginPageFault(1, 2).done();
        assertEquals(2, statement.getHits());
        assertEquals(1, statement.getFaults());
        statement.close();
        assertEquals(0, statement.getHits());
        assertEquals(0, statement.getFaults());
    }
}
Also used : DefaultPageCursorTracer(org.neo4j.io.pagecache.tracing.cursor.DefaultPageCursorTracer) CursorContext(org.neo4j.io.pagecache.context.CursorContext) DefaultPageCacheTracer(org.neo4j.io.pagecache.tracing.DefaultPageCacheTracer) Test(org.junit.jupiter.api.Test)

Example 33 with DefaultPageCacheTracer

use of org.neo4j.io.pagecache.tracing.DefaultPageCacheTracer in project neo4j by neo4j.

the class PageCacheStressTesting method shouldBehaveCorrectlyUnderStress.

@Test
public void shouldBehaveCorrectlyUnderStress() throws Exception {
    int durationInMinutes = parseInt(fromEnv("PAGE_CACHE_STRESS_DURATION", "1"));
    int numberOfPages = parseInt(fromEnv("PAGE_CACHE_STRESS_NUMBER_OF_PAGES", "10000"));
    int numberOfThreads = parseInt(fromEnv("PAGE_CACHE_STRESS_NUMBER_OF_THREADS", "8"));
    int numberOfCachePages = parseInt(fromEnv("PAGE_CACHE_STRESS_NUMBER_OF_CACHE_PAGES", "1000"));
    File baseDir = new File(fromEnv("PAGE_CACHE_STRESS_WORKING_DIRECTORY", getProperty("java.io.tmpdir")));
    File workingDirectory = new File(baseDir, "working");
    DefaultPageCacheTracer monitor = new DefaultPageCacheTracer();
    PageCacheStressTest runner = new PageCacheStressTest.Builder().with(timePeriod(durationInMinutes, MINUTES)).withNumberOfPages(numberOfPages).withNumberOfThreads(numberOfThreads).withNumberOfCachePages(numberOfCachePages).withWorkingDirectory(ensureExistsAndEmpty(workingDirectory)).with(monitor).build();
    runner.run();
    long faults = monitor.faults();
    long evictions = monitor.evictions();
    long pins = monitor.pins();
    long unpins = monitor.unpins();
    long flushes = monitor.flushes();
    System.out.printf(" - page faults: %d%n - evictions: %d%n - pins: %d%n - unpins: %d%n - flushes: %d%n", faults, evictions, pins, unpins, flushes);
    // let's cleanup disk space when everything went well
    FileUtils.deleteRecursively(workingDirectory);
}
Also used : PageCacheStressTest(org.neo4j.io.pagecache.stress.PageCacheStressTest) File(java.io.File) DefaultPageCacheTracer(org.neo4j.io.pagecache.tracing.DefaultPageCacheTracer) PageCacheStressTest(org.neo4j.io.pagecache.stress.PageCacheStressTest) Test(org.junit.Test)

Example 34 with DefaultPageCacheTracer

use of org.neo4j.io.pagecache.tracing.DefaultPageCacheTracer in project neo4j by neo4j.

the class BatchingNeoStores method batchingNeoStores.

public static BatchingNeoStores batchingNeoStores(FileSystemAbstraction fileSystem, File storeDir, RecordFormats recordFormats, Configuration config, LogService logService, AdditionalInitialIds initialIds, Config dbConfig) {
    Config neo4jConfig = getNeo4jConfig(config, dbConfig);
    final PageCacheTracer tracer = new DefaultPageCacheTracer();
    PageCache pageCache = createPageCache(fileSystem, neo4jConfig, logService.getInternalLogProvider(), tracer, DefaultPageCursorTracerSupplier.INSTANCE);
    BatchingNeoStores batchingNeoStores = new BatchingNeoStores(fileSystem, pageCache, storeDir, recordFormats, neo4jConfig, logService, initialIds, false, tracer::bytesWritten);
    return batchingNeoStores;
}
Also used : Config(org.neo4j.kernel.configuration.Config) DefaultPageCacheTracer(org.neo4j.io.pagecache.tracing.DefaultPageCacheTracer) PageCacheTracer(org.neo4j.io.pagecache.tracing.PageCacheTracer) PageCache(org.neo4j.io.pagecache.PageCache) DefaultPageCacheTracer(org.neo4j.io.pagecache.tracing.DefaultPageCacheTracer)

Example 35 with DefaultPageCacheTracer

use of org.neo4j.io.pagecache.tracing.DefaultPageCacheTracer in project neo4j by neo4j.

the class EncodingIdMapperTest method tracePageCacheAccessOnCollisions.

@Test
public void tracePageCacheAccessOnCollisions() {
    EncodingIdMapper.Monitor monitor = mock(EncodingIdMapper.Monitor.class);
    Encoder encoder = mock(Encoder.class);
    when(encoder.encode(any())).thenReturn(12345L);
    var pageCacheTracer = new DefaultPageCacheTracer();
    IdMapper mapper = mapper(encoder, Radix.STRING, monitor, pageCacheTracer);
    PropertyValueLookup ids = (nodeId, cursorContext) -> {
        cursorContext.getCursorTracer().beginPin(false, 1, null).done();
        return nodeId + "";
    };
    int expectedCollisions = 2;
    for (int i = 0; i < expectedCollisions; i++) {
        mapper.put(ids.lookupProperty(i, NULL), i, Group.GLOBAL);
    }
    ProgressListener progress = mock(ProgressListener.class);
    Collector collector = mock(Collector.class);
    mapper.prepare(ids, collector, progress);
    verifyNoMoreInteractions(collector);
    verify(monitor).numberOfCollisions(expectedCollisions);
    assertEquals(expectedCollisions, pageCacheTracer.pins());
    assertEquals(expectedCollisions, pageCacheTracer.unpins());
}
Also used : ArgumentMatchers.any(org.mockito.ArgumentMatchers.any) ArgumentMatchers.anyLong(org.mockito.ArgumentMatchers.anyLong) NO_MONITOR(org.neo4j.internal.batchimport.cache.idmapping.string.EncodingIdMapper.NO_MONITOR) NumberArrayFactories(org.neo4j.internal.batchimport.cache.NumberArrayFactories) Collector(org.neo4j.internal.batchimport.input.Collector) CursorContext(org.neo4j.io.pagecache.context.CursorContext) RunWith(org.junit.runner.RunWith) Parameters(org.junit.runners.Parameterized.Parameters) Groups(org.neo4j.internal.batchimport.input.Groups) Random(java.util.Random) DefaultPageCacheTracer(org.neo4j.io.pagecache.tracing.DefaultPageCacheTracer) AtomicReference(java.util.concurrent.atomic.AtomicReference) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) RandomRule(org.neo4j.test.rule.RandomRule) Mockito.verifyNoMoreInteractions(org.mockito.Mockito.verifyNoMoreInteractions) MutableLong(org.apache.commons.lang3.mutable.MutableLong) IdMapper(org.neo4j.internal.batchimport.cache.idmapping.IdMapper) PageCacheTracer(org.neo4j.io.pagecache.tracing.PageCacheTracer) NULL(org.neo4j.io.pagecache.context.CursorContext.NULL) Assert.fail(org.junit.Assert.fail) Math.toIntExact(java.lang.Math.toIntExact) ProgressListener(org.neo4j.internal.helpers.progress.ProgressListener) NONE(org.neo4j.internal.helpers.progress.ProgressListener.NONE) Parameterized(org.junit.runners.Parameterized) LongFunction(java.util.function.LongFunction) PropertyValueLookup(org.neo4j.internal.batchimport.PropertyValueLookup) Collection(java.util.Collection) Set(java.util.Set) Test(org.junit.Test) Mockito.times(org.mockito.Mockito.times) UUID(java.util.UUID) Mockito.when(org.mockito.Mockito.when) Mockito.verify(org.mockito.Mockito.verify) AtomicLong(java.util.concurrent.atomic.AtomicLong) Factory(org.neo4j.function.Factory) GLOBAL(org.neo4j.internal.batchimport.input.Group.GLOBAL) List(java.util.List) INSTANCE(org.neo4j.memory.EmptyMemoryTracker.INSTANCE) Rule(org.junit.Rule) Group(org.neo4j.internal.batchimport.input.Group) Assert.assertFalse(org.junit.Assert.assertFalse) Race(org.neo4j.test.Race) Assert.assertEquals(org.junit.Assert.assertEquals) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) Mockito.mock(org.mockito.Mockito.mock) PrimitiveLongCollections.count(org.neo4j.collection.PrimitiveLongCollections.count) ProgressListener(org.neo4j.internal.helpers.progress.ProgressListener) PropertyValueLookup(org.neo4j.internal.batchimport.PropertyValueLookup) Collector(org.neo4j.internal.batchimport.input.Collector) IdMapper(org.neo4j.internal.batchimport.cache.idmapping.IdMapper) DefaultPageCacheTracer(org.neo4j.io.pagecache.tracing.DefaultPageCacheTracer) Test(org.junit.Test)

Aggregations

DefaultPageCacheTracer (org.neo4j.io.pagecache.tracing.DefaultPageCacheTracer)79 Test (org.junit.jupiter.api.Test)66 CursorContext (org.neo4j.io.pagecache.context.CursorContext)49 PageCursorTracer (org.neo4j.io.pagecache.tracing.cursor.PageCursorTracer)26 Path (java.nio.file.Path)11 RepeatedTest (org.junit.jupiter.api.RepeatedTest)10 MutableLong (org.apache.commons.lang3.mutable.MutableLong)9 Transaction (org.neo4j.graphdb.Transaction)9 PageCache (org.neo4j.io.pagecache.PageCache)9 Test (org.junit.Test)5 BeforeEach (org.junit.jupiter.api.BeforeEach)5 DelegatingPageCache (org.neo4j.io.pagecache.DelegatingPageCache)5 PagedFile (org.neo4j.io.pagecache.PagedFile)5 Config (org.neo4j.configuration.Config)3 PageCacheTest (org.neo4j.io.pagecache.PageCacheTest)3 PageCursor (org.neo4j.io.pagecache.PageCursor)3 PageCacheStressTest (org.neo4j.io.pagecache.stress.PageCacheStressTest)3 PageCacheTracer (org.neo4j.io.pagecache.tracing.PageCacheTracer)3 DefaultPageCursorTracer (org.neo4j.io.pagecache.tracing.cursor.DefaultPageCursorTracer)3 NodeRecord (org.neo4j.kernel.impl.store.record.NodeRecord)3