Search in sources :

Example 6 with MuninnPageCache

use of org.neo4j.io.pagecache.impl.muninn.MuninnPageCache in project neo4j by neo4j.

the class ConfiguringPageCacheFactory method createPageCache.

protected PageCache createPageCache() {
    long pageCacheMaxMemory = getPageCacheMaxMemory(config);
    var memoryPool = memoryPools.pool(PAGE_CACHE, pageCacheMaxMemory, false, null);
    var memoryTracker = memoryPool.getPoolMemoryTracker();
    MemoryAllocator memoryAllocator = buildMemoryAllocator(pageCacheMaxMemory, memoryTracker);
    var bufferFactory = new ConfigurableIOBufferFactory(config, memoryTracker);
    MuninnPageCache.Configuration configuration = MuninnPageCache.config(memoryAllocator).memoryTracker(memoryTracker).bufferFactory(bufferFactory).preallocateStoreFiles(config.get(preallocate_store_files)).clock(clock).pageCacheTracer(pageCacheTracer);
    return new MuninnPageCache(swapperFactory, scheduler, configuration);
}
Also used : MemoryAllocator(org.neo4j.io.mem.MemoryAllocator) MuninnPageCache(org.neo4j.io.pagecache.impl.muninn.MuninnPageCache) ConfigurableIOBufferFactory(org.neo4j.configuration.pagecache.ConfigurableIOBufferFactory)

Example 7 with MuninnPageCache

use of org.neo4j.io.pagecache.impl.muninn.MuninnPageCache in project neo4j by neo4j.

the class PageCacheRule method getPageCache.

/**
 * Opens a new {@link PageCache} with the provided file system and config.
 *
 * @param factory {@link PageSwapperFactory} to use for the {@link PageCache}.
 * @param overriddenConfig specific {@link PageCacheConfig} overriding config provided in {@link PageCacheRule}
 * constructor, if any.
 * @return the opened {@link PageCache}.
 */
public PageCache getPageCache(PageSwapperFactory factory, PageCacheConfig overriddenConfig) {
    closeExistingPageCache();
    var memoryTracker = new LocalMemoryTracker();
    MemoryAllocator mman = MemoryAllocator.createAllocator(parse(selectConfig(baseConfig.memory, overriddenConfig.memory, "8 MiB")), memoryTracker);
    if (clock == null) {
        clock = Clocks.nanoClock();
    }
    MuninnPageCache.Configuration configuration = MuninnPageCache.config(mman).memoryTracker(memoryTracker).clock(clock);
    Integer pageSize = selectConfig(baseConfig.pageSize, overriddenConfig.pageSize, null);
    configuration = pageSize == null ? configuration : configuration.pageSize(pageSize);
    PageCacheTracer cacheTracer = selectConfig(baseConfig.tracer, overriddenConfig.tracer, PageCacheTracer.NULL);
    configuration = configuration.pageCacheTracer(cacheTracer);
    initializeJobScheduler();
    pageCache = new MuninnPageCache(factory, jobScheduler, configuration);
    pageCachePostConstruct(overriddenConfig);
    return pageCache;
}
Also used : MemoryAllocator(org.neo4j.io.mem.MemoryAllocator) MuninnPageCache(org.neo4j.io.pagecache.impl.muninn.MuninnPageCache) LocalMemoryTracker(org.neo4j.memory.LocalMemoryTracker) PageCacheTracer(org.neo4j.io.pagecache.tracing.PageCacheTracer)

Example 8 with MuninnPageCache

use of org.neo4j.io.pagecache.impl.muninn.MuninnPageCache in project neo4j by neo4j.

the class PageCacheStressTest method run.

public void run() throws Exception {
    try (FileSystemAbstraction fs = new DefaultFileSystemAbstraction();
        JobScheduler jobScheduler = new ThreadPoolJobScheduler()) {
        PageSwapperFactory swapperFactory = new SingleFilePageSwapperFactory(fs);
        try (PageCache pageCacheUnderTest = new MuninnPageCache(swapperFactory, jobScheduler, config(numberOfCachePages).pageCacheTracer(tracer))) {
            PageCacheStresser pageCacheStresser = new PageCacheStresser(numberOfPages, numberOfThreads, workingDirectory);
            pageCacheStresser.stress(pageCacheUnderTest, tracer, condition);
        }
    }
}
Also used : ThreadPoolJobScheduler(org.neo4j.test.scheduler.ThreadPoolJobScheduler) JobScheduler(org.neo4j.scheduler.JobScheduler) PageSwapperFactory(org.neo4j.io.pagecache.PageSwapperFactory) SingleFilePageSwapperFactory(org.neo4j.io.pagecache.impl.SingleFilePageSwapperFactory) DefaultFileSystemAbstraction(org.neo4j.io.fs.DefaultFileSystemAbstraction) FileSystemAbstraction(org.neo4j.io.fs.FileSystemAbstraction) DefaultFileSystemAbstraction(org.neo4j.io.fs.DefaultFileSystemAbstraction) MuninnPageCache(org.neo4j.io.pagecache.impl.muninn.MuninnPageCache) SingleFilePageSwapperFactory(org.neo4j.io.pagecache.impl.SingleFilePageSwapperFactory) ThreadPoolJobScheduler(org.neo4j.test.scheduler.ThreadPoolJobScheduler) PageCache(org.neo4j.io.pagecache.PageCache) MuninnPageCache(org.neo4j.io.pagecache.impl.muninn.MuninnPageCache)

Example 9 with MuninnPageCache

use of org.neo4j.io.pagecache.impl.muninn.MuninnPageCache in project neo4j by neo4j.

the class RandomPageCacheTestHarness method runIteration.

@SuppressWarnings("unchecked")
private void runIteration(long timeout, TimeUnit unit) throws Exception {
    assert filePageSize % recordFormat.getRecordSize() == 0 : "File page size must be a multiple of the record size";
    if (!fixedRandomSeed) {
        randomSeed = ThreadLocalRandom.current().nextLong();
    }
    FileSystemAbstraction fs = this.fs;
    Path[] files = buildFileNames();
    RandomAdversary adversary = new RandomAdversary(mischiefRate, failureRate, errorRate);
    adversary.setProbabilityFactor(0.0);
    if (useAdversarialIO) {
        adversary.setSeed(randomSeed);
        fs = new AdversarialFileSystemAbstraction(adversary, fs);
    }
    PageSwapperFactory swapperFactory = new SingleFilePageSwapperFactory(fs);
    JobScheduler jobScheduler = new ThreadPoolJobScheduler();
    MuninnPageCache cache = new MuninnPageCache(swapperFactory, jobScheduler, MuninnPageCache.config(cachePageCount).pageCacheTracer(tracer));
    if (filePageSize == 0) {
        filePageSize = cache.pageSize();
    }
    cache.setPrintExceptionsOnClose(false);
    Map<Path, PagedFile> fileMap = new HashMap<>(files.length);
    for (int i = 0; i < Math.min(files.length, initialMappedFiles); i++) {
        Path file = files[i];
        fileMap.put(file, cache.map(file, filePageSize, DEFAULT_DATABASE_NAME));
    }
    plan = plan(cache, files, fileMap);
    AtomicBoolean stopSignal = new AtomicBoolean();
    Callable<Void> planRunner = new PlanRunner(plan, stopSignal, profiler);
    Future<Void>[] futures = new Future[concurrencyLevel];
    for (int i = 0; i < concurrencyLevel; i++) {
        futures[i] = executorService.submit(planRunner);
    }
    if (preparation != null) {
        preparation.run(cache, this.fs, plan.getFilesTouched());
    }
    adversary.setProbabilityFactor(1.0);
    plan.start();
    long deadlineMillis = System.currentTimeMillis() + unit.toMillis(timeout);
    long now;
    try {
        for (Future<Void> future : futures) {
            now = System.currentTimeMillis();
            if (deadlineMillis < now) {
                throw new TimeoutException();
            }
            future.get(deadlineMillis - now, TimeUnit.MILLISECONDS);
        }
        adversary.setProbabilityFactor(0.0);
        runVerificationPhase(cache);
    } finally {
        stopSignal.set(true);
        adversary.setProbabilityFactor(0.0);
        try {
            for (Future<Void> future : futures) {
                future.get(10, TimeUnit.SECONDS);
            }
        } catch (InterruptedException | TimeoutException e) {
            for (Future<Void> future : futures) {
                future.cancel(true);
            }
            throw new RuntimeException(e);
        }
        try {
            plan.close();
            cache.close();
            jobScheduler.close();
            if (this.fs instanceof EphemeralFileSystemAbstraction) {
                this.fs.close();
                this.fs = new EphemeralFileSystemAbstraction();
            } else {
                for (Path file : files) {
                    Files.delete(file);
                }
            }
        } catch (IOException e) {
            throw new UncheckedIOException(e);
        }
    }
}
Also used : AdversarialFileSystemAbstraction(org.neo4j.adversaries.fs.AdversarialFileSystemAbstraction) EphemeralFileSystemAbstraction(org.neo4j.io.fs.EphemeralFileSystemAbstraction) FileSystemAbstraction(org.neo4j.io.fs.FileSystemAbstraction) HashMap(java.util.HashMap) EphemeralFileSystemAbstraction(org.neo4j.io.fs.EphemeralFileSystemAbstraction) UncheckedIOException(java.io.UncheckedIOException) MuninnPageCache(org.neo4j.io.pagecache.impl.muninn.MuninnPageCache) SingleFilePageSwapperFactory(org.neo4j.io.pagecache.impl.SingleFilePageSwapperFactory) ThreadPoolJobScheduler(org.neo4j.test.scheduler.ThreadPoolJobScheduler) TimeoutException(java.util.concurrent.TimeoutException) Path(java.nio.file.Path) JobScheduler(org.neo4j.scheduler.JobScheduler) ThreadPoolJobScheduler(org.neo4j.test.scheduler.ThreadPoolJobScheduler) PageSwapperFactory(org.neo4j.io.pagecache.PageSwapperFactory) SingleFilePageSwapperFactory(org.neo4j.io.pagecache.impl.SingleFilePageSwapperFactory) PagedFile(org.neo4j.io.pagecache.PagedFile) IOException(java.io.IOException) UncheckedIOException(java.io.UncheckedIOException) RandomAdversary(org.neo4j.adversaries.RandomAdversary) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Future(java.util.concurrent.Future) AdversarialFileSystemAbstraction(org.neo4j.adversaries.fs.AdversarialFileSystemAbstraction)

Aggregations

MuninnPageCache (org.neo4j.io.pagecache.impl.muninn.MuninnPageCache)9 SingleFilePageSwapperFactory (org.neo4j.io.pagecache.impl.SingleFilePageSwapperFactory)6 JobScheduler (org.neo4j.scheduler.JobScheduler)5 FileSystemAbstraction (org.neo4j.io.fs.FileSystemAbstraction)4 PageCache (org.neo4j.io.pagecache.PageCache)4 ThreadPoolJobScheduler (org.neo4j.test.scheduler.ThreadPoolJobScheduler)4 DefaultFileSystemAbstraction (org.neo4j.io.fs.DefaultFileSystemAbstraction)3 MemoryAllocator (org.neo4j.io.mem.MemoryAllocator)3 Path (java.nio.file.Path)2 Test (org.junit.jupiter.api.Test)2 ConfigurableIOBufferFactory (org.neo4j.configuration.pagecache.ConfigurableIOBufferFactory)2 EphemeralFileSystemAbstraction (org.neo4j.io.fs.EphemeralFileSystemAbstraction)2 PageSwapperFactory (org.neo4j.io.pagecache.PageSwapperFactory)2 IOException (java.io.IOException)1 UncheckedIOException (java.io.UncheckedIOException)1 HashMap (java.util.HashMap)1 Future (java.util.concurrent.Future)1 TimeoutException (java.util.concurrent.TimeoutException)1 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)1 RandomAdversary (org.neo4j.adversaries.RandomAdversary)1