Skip to content

Commit ae95903

Browse files
committed
less_bucket hash MACRO
1 parent 03425c9 commit ae95903

File tree

2 files changed

+53
-8
lines changed

2 files changed

+53
-8
lines changed

storage/innobase/include/my_pmemobj.h

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -561,10 +561,35 @@ hash_f1(
561561
list.cur_size++;\
562562
}while (0)
563563

564+
/*Evenly distributed map that one space_id evenly distribute across buckets*/
564565
#define PMEM_HASH_KEY(hashed, key, n) do {\
565566
hashed = key ^ PMEM_HASH_MASK;\
566567
hashed = hashed % n;\
567568
}while(0)
569+
570+
#if defined (UNIV_PMEMOBJ_BUF_PARTITION)
571+
/*LESS_BUCKET partition
572+
*One space is mapped with as less buckets as possible
573+
@hashed [out]: return hashed value
574+
@space [in]: space_no
575+
@page [in]: page_no
576+
@n [in]: number of buckets
577+
@B [in]: number of bits present number of buckets
578+
@S [in]: number of bits present space_no
579+
@P [in]: number of bits present max number of pages per space on a bucket, this value is log2(page_per_bucket)
580+
* */
581+
#define PMEM_LESS_BUCKET_HASH_KEY(hashed, space, page)\
582+
PARTITION_FUNC1(hashed, space, page,\
583+
PMEM_N_BUCKETS,\
584+
PMEM_N_BUCKET_BITS,\
585+
PMEM_N_SPACE_BITS,\
586+
PMEM_PAGE_PER_BUCKET_BITS)
587+
588+
#define PARTITION_FUNC1(hashed, space, page, n, B, S, P) do {\
589+
hashed = (((space & (0xffffffff >> (32 - S))) << (B - S)) + ((page & (0xffffffff >> (32 - P - (B - S)))) >> P)) % n;\
590+
} while(0)
591+
#endif //UNIV_PMEMOBJ_BUF_PARTITION
592+
568593
#endif //UNIV_PMEMOBJ_BUF
569594

570595
#endif /*__PMEMOBJ_H__ */

storage/innobase/pmem/pmem0buf.cc

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -528,8 +528,13 @@ pm_buf_write(
528528
//UNIV_MEM_ASSERT_RW(src_data, page_size);
529529

530530
//PMEM_HASH_KEY(hashed, page_id.fold(), PMEM_N_BUCKETS);
531-
hashed = hash_f1(page_id.space(),
532-
page_id.page_no(), PMEM_N_BUCKETS, PMEM_PAGE_PER_BUCKET_BITS);
531+
#if defined (UNIV_PMEMOBJ_BUF_PARTITION)
532+
PMEM_LESS_BUCKET_HASH_KEY(hashed,page_id.space(), page_id.page_no());
533+
#else //EVEN_BUCKET
534+
PMEM_HASH_KEY(hashed, page_id.fold(), PMEM_N_BUCKETS);
535+
#endif
536+
//hashed = hash_f1(page_id.space(),
537+
// page_id.page_no(), PMEM_N_BUCKETS, PMEM_PAGE_PER_BUCKET_BITS);
533538

534539
retry:
535540
//the safe check
@@ -779,8 +784,13 @@ pm_buf_write_no_free_pool(
779784
//UNIV_MEM_ASSERT_RW(src_data, page_size);
780785

781786
//PMEM_HASH_KEY(hashed, page_id.fold(), PMEM_N_BUCKETS);
782-
hashed = hash_f1(page_id.space(),
783-
page_id.page_no(), PMEM_N_BUCKETS, PMEM_PAGE_PER_BUCKET_BITS);
787+
#if defined (UNIV_PMEMOBJ_BUF_PARTITION)
788+
PMEM_LESS_BUCKET_HASH_KEY(hashed,page_id.space(), page_id.page_no());
789+
#else //EVEN_BUCKET
790+
PMEM_HASH_KEY(hashed, page_id.fold(), PMEM_N_BUCKETS);
791+
#endif
792+
// hashed = hash_f1(page_id.space(),
793+
// page_id.page_no(), PMEM_N_BUCKETS, PMEM_PAGE_PER_BUCKET_BITS);
784794

785795

786796
retry:
@@ -973,8 +983,13 @@ pm_buf_write_with_flusher(
973983

974984
//PMEM_HASH_KEY(hashed, page_id.fold(), PMEM_N_BUCKETS);
975985

976-
hashed = hash_f1(page_id.space(),
977-
page_id.page_no(), PMEM_N_BUCKETS, PMEM_PAGE_PER_BUCKET_BITS);
986+
#if defined (UNIV_PMEMOBJ_BUF_PARTITION)
987+
PMEM_LESS_BUCKET_HASH_KEY(hashed,page_id.space(), page_id.page_no());
988+
#else //EVEN_BUCKET
989+
PMEM_HASH_KEY(hashed, page_id.fold(), PMEM_N_BUCKETS);
990+
#endif
991+
// hashed = hash_f1(page_id.space(),
992+
// page_id.page_no(), PMEM_N_BUCKETS, PMEM_PAGE_PER_BUCKET_BITS);
978993

979994
retry:
980995
//the safe check
@@ -1561,8 +1576,13 @@ pm_buf_read(
15611576
//bytes_read = 0;
15621577

15631578
//PMEM_HASH_KEY(hashed, page_id.fold(), PMEM_N_BUCKETS);
1564-
hashed = hash_f1(page_id.space(),
1565-
page_id.page_no(), PMEM_N_BUCKETS, PMEM_PAGE_PER_BUCKET_BITS);
1579+
#if defined (UNIV_PMEMOBJ_BUF_PARTITION)
1580+
PMEM_LESS_BUCKET_HASH_KEY(hashed,page_id.space(), page_id.page_no());
1581+
#else //EVEN_BUCKET
1582+
PMEM_HASH_KEY(hashed, page_id.fold(), PMEM_N_BUCKETS);
1583+
#endif
1584+
// hashed = hash_f1(page_id.space(),
1585+
// page_id.page_no(), PMEM_N_BUCKETS, PMEM_PAGE_PER_BUCKET_BITS);
15661586
TOID_ASSIGN(cur_list, (D_RO(buf->buckets)[hashed]).oid);
15671587
if ( TOID_IS_NULL(cur_list)) {
15681588
//assert(!TOID_IS_NULL(cur_list));

0 commit comments

Comments
 (0)