Skip to content

Commit

Permalink
potentially speed up the database expansion on Windows and macOS
Browse files Browse the repository at this point in the history
  • Loading branch information
krangelov committed Jan 18, 2024
1 parent 5e664b6 commit 577ea67
Showing 1 changed file with 11 additions and 16 deletions.
27 changes: 11 additions & 16 deletions src/runtime/c/pgf/db.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,13 @@ static inline ssize_t get_mmap_size(size_t init_size, size_t page_size)
return mmap_size;
}

static inline ssize_t get_mremap_size(size_t file_size, size_t block_size, size_t free_size, size_t page_size)
{
size_t n_pages =
((file_size - free_size + block_size + page_size - 1) / page_size);
return get_next_padovan(n_pages) * page_size ;
}

PGF_INTERNAL
PgfDB::PgfDB(const char* filepath, int flags, int mode, size_t init_size) {
bool is_new = false;
Expand Down Expand Up @@ -825,11 +832,8 @@ PGF_INTERNAL_DECL object PgfDB::new_block_descr(object o, size_t size, txn_t txn

size_t free_size = mmap_size - top;
if (block_size > free_size) {
size_t alloc_size =
((block_size - free_size + page_size - 1) / page_size) * page_size;
size_t new_size =
ms->file_size + alloc_size;

get_mremap_size(ms->file_size, block_size, free_size, page_size);
resize_map(new_size, true);
}

Expand Down Expand Up @@ -881,11 +885,8 @@ object PgfDB::upd_block_descr(object map, object left, object right)

size_t free_size = mmap_size - top;
if (block_size > free_size) {
size_t alloc_size =
((block_size - free_size + page_size - 1) / page_size) * page_size;
size_t new_size =
ms->file_size + alloc_size;

get_mremap_size(ms->file_size, block_size, free_size, page_size);
resize_map(new_size, true);

// refresh the pointer
Expand Down Expand Up @@ -1295,11 +1296,8 @@ object PgfDB::malloc_internal(size_t bytes)

size_t free_size = mmap_size - top;
if (block_size > free_size) {
size_t alloc_size =
((block_size - free_size + page_size - 1) / page_size) * page_size;
size_t new_size =
ms->file_size + alloc_size;

get_mremap_size(ms->file_size, block_size, free_size, page_size);
resize_map(new_size, true);
}

Expand Down Expand Up @@ -1331,11 +1329,8 @@ object PgfDB::realloc_internal(object oldo, size_t old_bytes, size_t new_bytes,
ssize_t free_size = mmap_size - top;

if (nb > free_size) {
size_t alloc_size =
((nb - free_size + page_size - 1) / page_size) * page_size;
size_t new_size =
ms->file_size + alloc_size;

get_mremap_size(ms->file_size, nb, free_size, page_size);
resize_map(new_size, true);
}

Expand Down

0 comments on commit 577ea67

Please sign in to comment.