Skip to content

Commit 133dd2d

Browse files
committed
benchmarks/lockhammer/src/alloc.c, alloc.h
Memory allocation routines using either posix_memalign or hugetlb page. hugetlb page allocation using mmap() improves reproducibility - using a hugepage lets the same physical address to be used run-to-run Use pagemap.h to get the physical address of the obtained memory to help identify that the same physical address is reused. Change-Id: I070fafc4463b3e81a36bdc0d32e79b40af28c1b0
1 parent 3845a54 commit 133dd2d

File tree

2 files changed

+401
-0
lines changed

2 files changed

+401
-0
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
2+
/*
3+
* Copyright (c) 2017-2025, The Linux Foundation. All rights reserved.
4+
*
5+
* SPDX-License-Identifier: BSD-3-Clause
6+
*
7+
* Redistribution and use in source and binary forms, with or without
8+
* modification, are permitted provided that the following conditions are
9+
* met:
10+
* * Redistributions of source code must retain the above copyright
11+
* notice, this list of conditions and the following disclaimer.
12+
* * Redistributions in binary form must reproduce the above
13+
* copyright notice, this list of conditions and the following
14+
* disclaimer in the documentation and/or other materials provided
15+
* with the distribution.
16+
* * Neither the name of The Linux Foundation nor the names of its
17+
* contributors may be used to endorse or promote products derived
18+
* from this software without specific prior written permission.
19+
*
20+
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
21+
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
22+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
23+
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
24+
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
27+
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28+
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
29+
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
30+
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31+
*/
32+
33+
34+
#ifndef ALLOC_H
35+
#define ALLOC_H
36+
37+
enum {
38+
HUGEPAGES_NONE,
39+
HUGEPAGES_DEFAULT,
40+
HUGEPAGES_64K,
41+
HUGEPAGES_2M,
42+
HUGEPAGES_32M,
43+
HUGEPAGES_512M,
44+
HUGEPAGES_1G,
45+
HUGEPAGES_16G,
46+
HUGEPAGES_MAX_ENUM
47+
};
48+
49+
50+
void * do_hugepage_alloc(int use_hugepages, size_t hugepage_req_physaddr, int verbose);
51+
void * do_alloc(size_t length, int use_hugepages, size_t nonhuge_alignment, size_t hugepage_req_physaddr, int verbose);
52+
void print_hugepage_physaddr_and_exit(void * mmap_ret);
53+
54+
// hugepage flag parameter parsing
55+
int parse_hugepage_parameter(const char * optarg);
56+
const char * hugepage_map (int enum_param_value);
57+
58+
// function prototypes used by osq_lock
59+
uintptr_t get_phys_addr(uintptr_t vaddr);
60+
61+
#endif
62+
63+
/* vim: set tabstop=4 shiftwidth=4 softtabstop=4 expandtab: */

0 commit comments

Comments
 (0)