Package xyz.cofe.cbuffer.page
Class CCachePagedData
- java.lang.Object
-
- xyz.cofe.cbuffer.page.CachePagedDataBase<CCachePagedData.State,UsedPagesInfo,DirtyPagedDataSafe>
-
- xyz.cofe.cbuffer.page.CCachePagedData
-
- All Implemented Interfaces:
Flushable,ExtendablePages<UsedPagesInfo>,PagedData<UsedPagesInfo>,PageLock,ReduciblePages<UsedPagesInfo>,ResizablePages<UsedPagesInfo>
public class CCachePagedData extends CachePagedDataBase<CCachePagedData.State,UsedPagesInfo,DirtyPagedDataSafe> implements PageLock
Кеш страниц, с разделением на быструю и медленную память с поддержкой многопоточности
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classCCachePagedData.State
-
Field Summary
Fields Modifier and Type Field Description protected ObjectcloseSync-
Fields inherited from class xyz.cofe.cbuffer.page.CachePagedDataBase
state
-
-
Constructor Summary
Constructors Modifier Constructor Description protectedCCachePagedData(CCachePagedData.State state)CCachePagedData(DirtyPagedDataSafe cachePages, ResizablePages<UsedPagesInfo> persistentPages)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected intallocCachePage()Выделение свободной страницыprotected intcache2persist(int cachePage)Возвращает индекс постоянной страницы для кешированной страницыprotected intcache2persist_mut(int cachePage)protected xyz.cofe.fn.Tuple2<List<Integer>,List<Integer>>cleanDirtyPages()Получение списка чистых/грязных страницvoidclose()protected booleandirty(int cachePage)Проверка, что страница является "грязной"protected booleandirty_mut(int cachePage)xyz.cofe.fn.Tuple2<UsedPagesInfo,UsedPagesInfo>extendPages(int pages)Расширение кол-ва используемых страницvoidflush()Принудительная запись накопившийся изменений на диск/носитель информацииprotected intflush(int cachePage)Сохранение страницы кешаprotected intflush_mut(int cachePage)protected booleanisClosed()protected List<Lock>lockPersistPages(int from, int toExc, Function<ReadWriteLock,Lock> lockType)protected byte[]map(int cachePage, int persistPage)Проецирование страницы из постоянной памяти на кешUsedPagesInfomemoryInfo()Получение информации о памятиprotected intpersist2cache(int persistPage)Возвращает индекс кешированной страницы для постоянной страницыprotected intpersist2cache_mut(int persistPage)byte[]readPage(int page)Чтение страницы.protected byte[]readPage_alloc(int page)protected byte[]readPage_mapped(int cidx, int page)voidreadPageLock(int from, int toExc, Runnable code)Блокировка диапазона страниц для чтения - shared блокировкаxyz.cofe.fn.Tuple2<UsedPagesInfo,UsedPagesInfo>reducePages(int pages)Уменьшение кол-ва используемых страницxyz.cofe.fn.Tuple2<UsedPagesInfo,UsedPagesInfo>resizeCachePages(int pages)Изменение размера кеша.xyz.cofe.fn.Tuple2<UsedPagesInfo,UsedPagesInfo>resizePages(int pages)Изменение кол-ва выделенных страницprotected intunmap(int cachePage)выгрузка страницыprotected intunmapCandidate(List<Integer> pages, boolean clean)Выбор кандидата (страница кеша) на выгрузкуvoidwritePage(int page, byte[] data)Запись страницыprotected voidwritePage_alloc(int page, byte[] data)protected voidwritePage_mapped(int cidx, int page, byte[] data)voidwritePageLock(int from, int toExc, Runnable code)Блокировка диапазона страниц для записи - эксклюзивная блокировка-
Methods inherited from class xyz.cofe.cbuffer.page.CachePagedDataBase
cacheHitMiss, flush0
-
-
-
-
Field Detail
-
closeSync
protected final Object closeSync
-
-
Constructor Detail
-
CCachePagedData
protected CCachePagedData(CCachePagedData.State state)
-
CCachePagedData
public CCachePagedData(DirtyPagedDataSafe cachePages, ResizablePages<UsedPagesInfo> persistentPages)
-
-
Method Detail
-
isClosed
protected boolean isClosed()
- Overrides:
isClosedin classCachePagedDataBase<CCachePagedData.State,UsedPagesInfo,DirtyPagedDataSafe>
-
close
public void close()
-
memoryInfo
public UsedPagesInfo memoryInfo()
Description copied from interface:PagedDataПолучение информации о памяти- Specified by:
memoryInfoin interfacePagedData<UsedPagesInfo>- Overrides:
memoryInfoin classCachePagedDataBase<CCachePagedData.State,UsedPagesInfo,DirtyPagedDataSafe>- Returns:
- Получение информации о памяти
-
persist2cache
protected int persist2cache(int persistPage)
Description copied from class:CachePagedDataBaseВозвращает индекс кешированной страницы для постоянной страницы- Overrides:
persist2cachein classCachePagedDataBase<CCachePagedData.State,UsedPagesInfo,DirtyPagedDataSafe>- Parameters:
persistPage- постоянная страница, допустимые значения: от 0 и более- Returns:
- значение: от 0 и более - целевая страница кеша, или -1 (и меньше) - страница не спроецирована
-
persist2cache_mut
protected int persist2cache_mut(int persistPage)
-
cache2persist
protected int cache2persist(int cachePage)
Description copied from class:CachePagedDataBaseВозвращает индекс постоянной страницы для кешированной страницы- Overrides:
cache2persistin classCachePagedDataBase<CCachePagedData.State,UsedPagesInfo,DirtyPagedDataSafe>- Parameters:
cachePage- кешированная страница, допустимые значения: от 0 и более- Returns:
- значение: от 0 и более - постоянная страница (индекс), или -1 (и меньше) - страница не спроецирована (свободная ячейка кеша)
-
cache2persist_mut
protected int cache2persist_mut(int cachePage)
- Overrides:
cache2persist_mutin classCachePagedDataBase<CCachePagedData.State,UsedPagesInfo,DirtyPagedDataSafe>
-
dirty
protected boolean dirty(int cachePage)
Description copied from class:CachePagedDataBaseПроверка, что страница является "грязной"- Overrides:
dirtyin classCachePagedDataBase<CCachePagedData.State,UsedPagesInfo,DirtyPagedDataSafe>- Parameters:
cachePage- индекс страницы кеша- Returns:
- true - содержит не сохраненные изменения
-
dirty_mut
protected boolean dirty_mut(int cachePage)
- Overrides:
dirty_mutin classCachePagedDataBase<CCachePagedData.State,UsedPagesInfo,DirtyPagedDataSafe>
-
flush
protected int flush(int cachePage)
Description copied from class:CachePagedDataBaseСохранение страницы кеша- Overrides:
flushin classCachePagedDataBase<CCachePagedData.State,UsedPagesInfo,DirtyPagedDataSafe>- Parameters:
cachePage- индекс страницы кеша- Returns:
- индекс persistentPage или значение меньше 0
-
flush_mut
protected int flush_mut(int cachePage)
- Overrides:
flush_mutin classCachePagedDataBase<CCachePagedData.State,UsedPagesInfo,DirtyPagedDataSafe>
-
flush
public void flush()
Description copied from interface:FlushableПринудительная запись накопившийся изменений на диск/носитель информации- Specified by:
flushin interfaceFlushable- Overrides:
flushin classCachePagedDataBase<CCachePagedData.State,UsedPagesInfo,DirtyPagedDataSafe>
-
unmap
protected int unmap(int cachePage)
Description copied from class:CachePagedDataBaseвыгрузка страницы- Overrides:
unmapin classCachePagedDataBase<CCachePagedData.State,UsedPagesInfo,DirtyPagedDataSafe>- Parameters:
cachePage- страница- Returns:
- индекс persistentPage или значение меньше 0
-
cleanDirtyPages
protected xyz.cofe.fn.Tuple2<List<Integer>,List<Integer>> cleanDirtyPages()
Description copied from class:CachePagedDataBaseПолучение списка чистых/грязных страниц- Overrides:
cleanDirtyPagesin classCachePagedDataBase<CCachePagedData.State,UsedPagesInfo,DirtyPagedDataSafe>- Returns:
- чистые/грязные страницы (cachePage)
-
unmapCandidate
protected int unmapCandidate(List<Integer> pages, boolean clean)
Description copied from class:CachePagedDataBaseВыбор кандидата (страница кеша) на выгрузку- Overrides:
unmapCandidatein classCachePagedDataBase<CCachePagedData.State,UsedPagesInfo,DirtyPagedDataSafe>- Parameters:
pages- список страниц из которых выборclean- true - это список чистых страниц,
false - это список грязных страниц- Returns:
- страница или -1 (и меньше),
-
allocCachePage
protected int allocCachePage()
Description copied from class:CachePagedDataBaseВыделение свободной страницыВозможные сценарии
- В кеше есть еще не размеченная область cache2prst[x] < 0
- В кеше есть чистые страницы которые можно занять
- В кеше нет чистых страниц, необходимо выгружать страницу
Используется в
CachePagedDataBase.readPage_alloc(int),CachePagedDataBase.writePage_alloc(int, byte[])- Overrides:
allocCachePagein classCachePagedDataBase<CCachePagedData.State,UsedPagesInfo,DirtyPagedDataSafe>- Returns:
- индекс страницы
-
map
protected byte[] map(int cachePage, int persistPage)Description copied from class:CachePagedDataBaseПроецирование страницы из постоянной памяти на кеш- Overrides:
mapin classCachePagedDataBase<CCachePagedData.State,UsedPagesInfo,DirtyPagedDataSafe>- Parameters:
cachePage- страница кеш-памятиpersistPage- страница постоянной памяти- Returns:
- содержание спроецированной страницы
-
readPage
public byte[] readPage(int page)
Description copied from class:CachePagedDataBaseЧтение страницы.Варианты
- Страница спроецирована
- Страница не спроецирована
- необходимо - выделить свободную страницу в кеше
- если не достигнут предел по кешу
- тогда занять свободную страницу
- иначе выгрузить редко используемую страницу и занять ее
- Specified by:
readPagein interfacePagedData<UsedPagesInfo>- Overrides:
readPagein classCachePagedDataBase<CCachePagedData.State,UsedPagesInfo,DirtyPagedDataSafe>- Parameters:
page- индекс страницы, от 0 и более- Returns:
- массив байтов, по размеру равный
UsedPagesInfo.pageSize()или меньше, если последняя страница
-
readPage_mapped
protected byte[] readPage_mapped(int cidx, int page)- Overrides:
readPage_mappedin classCachePagedDataBase<CCachePagedData.State,UsedPagesInfo,DirtyPagedDataSafe>
-
readPage_alloc
protected byte[] readPage_alloc(int page)
- Overrides:
readPage_allocin classCachePagedDataBase<CCachePagedData.State,UsedPagesInfo,DirtyPagedDataSafe>
-
writePage
public void writePage(int page, byte[] data)Description copied from class:CachePagedDataBaseЗапись страницыВозможные варианты
Страница спроецирована (
CachePagedDataBase.writePage_mapped(int, int, byte[]))- изменить страницу в кеше
- отметить страницу как dirty (auto)
Страница не спроецирована (
CachePagedDataBase.writePage_alloc(int, byte[]))- необходимо - выделить свободную страницу в кеше
- если не достигнут предел по кешу
- тогда занять свободную страницу
- иначе выгрузить редко используемую страницу и занять ее
- если не достигнут предел по кешу
- если data меньше pageSize
- считать страницу из persist в cache
- изменить страницу в кеше
- отметить страницу как dirty (auto)
- Specified by:
writePagein interfacePagedData<UsedPagesInfo>- Overrides:
writePagein classCachePagedDataBase<CCachePagedData.State,UsedPagesInfo,DirtyPagedDataSafe>- Parameters:
page- индекс страницы, от 0 и болееdata- массив байтов, размер не должен превышатьUsedPagesInfo.pageSize()
-
writePage_mapped
protected void writePage_mapped(int cidx, int page, byte[] data)- Overrides:
writePage_mappedin classCachePagedDataBase<CCachePagedData.State,UsedPagesInfo,DirtyPagedDataSafe>
-
writePage_alloc
protected void writePage_alloc(int page, byte[] data)- Overrides:
writePage_allocin classCachePagedDataBase<CCachePagedData.State,UsedPagesInfo,DirtyPagedDataSafe>
-
extendPages
public xyz.cofe.fn.Tuple2<UsedPagesInfo,UsedPagesInfo> extendPages(int pages)
Description copied from interface:ExtendablePagesРасширение кол-ва используемых страниц- Specified by:
extendPagesin interfaceExtendablePages<UsedPagesInfo>- Overrides:
extendPagesin classCachePagedDataBase<CCachePagedData.State,UsedPagesInfo,DirtyPagedDataSafe>- Parameters:
pages- сколько страниц нужно добавить- Returns:
- Сколько было и сколько стало памяти
-
reducePages
public xyz.cofe.fn.Tuple2<UsedPagesInfo,UsedPagesInfo> reducePages(int pages)
Description copied from interface:ReduciblePagesУменьшение кол-ва используемых страниц- Specified by:
reducePagesin interfaceReduciblePages<UsedPagesInfo>- Overrides:
reducePagesin classCachePagedDataBase<CCachePagedData.State,UsedPagesInfo,DirtyPagedDataSafe>- Parameters:
pages- сколько страниц нужно убрать- Returns:
- Сколько было и сколько стало памяти
-
resizeCachePages
public xyz.cofe.fn.Tuple2<UsedPagesInfo,UsedPagesInfo> resizeCachePages(int pages)
Description copied from class:CachePagedDataBaseИзменение размера кеша.- Overrides:
resizeCachePagesin classCachePagedDataBase<CCachePagedData.State,UsedPagesInfo,DirtyPagedDataSafe>- Parameters:
pages- сколько страниц отвести под кеш- Returns:
- Сколько было и сколько стало памяти
-
resizePages
public xyz.cofe.fn.Tuple2<UsedPagesInfo,UsedPagesInfo> resizePages(int pages)
Description copied from interface:ResizablePagesИзменение кол-ва выделенных страниц- Specified by:
resizePagesin interfaceResizablePages<UsedPagesInfo>- Parameters:
pages- целевое кол-во страниц- Returns:
- Сколько было и сколько стало памяти
-
lockPersistPages
protected List<Lock> lockPersistPages(int from, int toExc, Function<ReadWriteLock,Lock> lockType)
-
writePageLock
public void writePageLock(int from, int toExc, Runnable code)Description copied from interface:PageLockБлокировка диапазона страниц для записи - эксклюзивная блокировка- Specified by:
writePageLockin interfacePageLock- Parameters:
from- начало диапазонаtoExc- (исключительно) конец диапазонаcode- код исполняемый во время блокировки
-
readPageLock
public void readPageLock(int from, int toExc, Runnable code)Description copied from interface:PageLockБлокировка диапазона страниц для чтения - shared блокировка- Specified by:
readPageLockin interfacePageLock- Parameters:
from- начало диапазонаtoExc- (исключительно) конец диапазонаcode- код исполняемый во время блокировки
-
-