Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix bugs on this branch. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | mmap-on-demand |
Files: | files | file ages | folders |
SHA1: |
0cbb5cc2cdc91da23cce3823f3542da8 |
User & Date: | dan 2013-02-05 09:51:19.506 |
Context
2013-03-02
| ||
09:15 | Merge trunk changes into this branch. check-in: 6666862302 user: dan tags: mmap-on-demand | |
2013-02-05
| ||
09:51 | Fix bugs on this branch. check-in: 0cbb5cc2cd user: dan tags: mmap-on-demand | |
2013-02-04
| ||
19:04 | Map and unmap parts of the database file on an LRU basis to limit the amount of address space consumed at any one time (for 32-bit address spaces). It looks like this might be slower than read() and write() anyway... check-in: d1b1a9e969 user: dan tags: mmap-on-demand | |
Changes
Changes to src/lsm_file.c.
︙ | ︙ | |||
824 825 826 827 828 829 830 831 832 833 834 835 836 837 | pFS->pDb = pDb; pFS->pEnv = pDb->pEnv; if( pDb->compress.xCompress ){ pFS->pCompress = &pDb->compress; }else{ pFS->mmapmgr.eUseMmap = pDb->eMmap; pFS->mmapmgr.nMapsz = 1*1024*1024; } /* Make a copy of the database and log file names. */ memcpy(pFS->zDb, zDb, nDb+1); memcpy(pFS->zLog, zDb, nDb); memcpy(&pFS->zLog[nDb], "-log", 5); | > > | 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 | pFS->pDb = pDb; pFS->pEnv = pDb->pEnv; if( pDb->compress.xCompress ){ pFS->pCompress = &pDb->compress; }else{ pFS->mmapmgr.eUseMmap = pDb->eMmap; pFS->mmapmgr.nMapsz = 1*1024*1024; pFS->mmapmgr.nMapsz = 4*1024; } /* Make a copy of the database and log file names. */ memcpy(pFS->zDb, zDb, nDb+1); memcpy(pFS->zLog, zDb, nDb); memcpy(&pFS->zLog[nDb], "-log", 5); |
︙ | ︙ | |||
1539 1540 1541 1542 1543 1544 1545 | fsPageAddToLru(pFS, p); p->pFS = pFS; } p->iPg = iReal; p->aData = fsMmapRef(pFS, iOff, pFS->nPagesize, &p->pRef, &rc); if( rc!=LSM_OK ){ | | > | 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 | fsPageAddToLru(pFS, p); p->pFS = pFS; } p->iPg = iReal; p->aData = fsMmapRef(pFS, iOff, pFS->nPagesize, &p->pRef, &rc); if( rc!=LSM_OK ){ p->pHashNext = pFS->pFree; pFS->pFree = p; p = 0; } }else{ /* Search the hash-table for the page */ iHash = fsHashKey(pFS->nHash, iReal); for(p=pFS->apHash[iHash]; p; p=p->pHashNext){ |
︙ | ︙ | |||
1628 1629 1630 1631 1632 1633 1634 | int lsmFsReadSyncedId(lsm_db *db, int iMeta, i64 *piVal){ FileSystem *pFS = db->pFS; int rc = LSM_OK; assert( iMeta==1 || iMeta==2 ); if( pFS->mmapmgr.eUseMmap!=LSM_MMAP_OFF ){ MmapMgrRef *pRef = 0; | | > | | | 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 | int lsmFsReadSyncedId(lsm_db *db, int iMeta, i64 *piVal){ FileSystem *pFS = db->pFS; int rc = LSM_OK; assert( iMeta==1 || iMeta==2 ); if( pFS->mmapmgr.eUseMmap!=LSM_MMAP_OFF ){ MmapMgrRef *pRef = 0; u8 *pMap; /* Mapping of meta pages */ int iOff = (iMeta==2 ? LSM_META_PAGE_SIZE : 0); pMap = (u8 *)fsMmapRef(pFS, iOff, LSM_META_PAGE_SIZE, &pRef, &rc); if( rc==LSM_OK ){ *piVal = (i64)lsmGetU64(pMap); fsMmapUnref(pFS, &pRef); } }else{ MetaPage *pMeta = 0; rc = lsmFsMetaPageGet(pFS, 0, iMeta, &pMeta); if( rc==LSM_OK ){ *piVal = (i64)lsmGetU64(pMeta->aData); |
︙ | ︙ |
Changes to src/lsm_unix.c.
︙ | ︙ | |||
195 196 197 198 199 200 201 | if( prc!=0 ) return LSM_IOERR_BKPT; if( nByte<=0 ){ sz = (size_t)(LSM_MAX(nByte*-1, (i64)buf.st_size)); }else{ sz = (size_t)nByte; } | < > | > | 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 | if( prc!=0 ) return LSM_IOERR_BKPT; if( nByte<=0 ){ sz = (size_t)(LSM_MAX(nByte*-1, (i64)buf.st_size)); }else{ sz = (size_t)nByte; } if( (off+sz)>buf.st_size ){ prc = ftruncate(p->fd, (off+sz)); if( prc!=0 ) return LSM_IOERR_BKPT; } *ppOut = mmap(0, sz, PROT_READ|PROT_WRITE, MAP_SHARED, p->fd, off); if( *ppOut==MAP_FAILED ){ return LSM_IOERR_BKPT; } *pszOut = (i64)sz; return LSM_OK; } static int lsmPosixOsUnmap( lsm_file *pFile, |
︙ | ︙ |