1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 #ifndef MCA_MPOOL_HUGEPAGE_H
27 #define MCA_MPOOL_HUGEPAGE_H
28
29 #include "opal_config.h"
30 #include "opal/class/opal_list.h"
31 #include "opal/class/opal_free_list.h"
32 #include "opal/class/opal_rb_tree.h"
33 #include "opal/mca/event/event.h"
34 #include "opal/mca/mpool/mpool.h"
35 #include "opal/util/proc.h"
36 #include "opal/mca/allocator/allocator.h"
37 #include "opal/util/sys_limits.h"
38
39 BEGIN_C_DECLS
40 struct mca_mpool_hugepage_module_t;
41 typedef struct mca_mpool_hugepage_module_t mca_mpool_hugepage_module_t;
42
43 struct mca_mpool_hugepage_component_t {
44 mca_mpool_base_component_t super;
45 bool print_stats;
46 opal_list_t huge_pages;
47 mca_mpool_hugepage_module_t *modules;
48 int module_count;
49 opal_atomic_size_t bytes_allocated;
50 };
51 typedef struct mca_mpool_hugepage_component_t mca_mpool_hugepage_component_t;
52
53 OPAL_DECLSPEC extern mca_mpool_hugepage_component_t mca_mpool_hugepage_component;
54
55 struct mca_mpool_hugepage_module_t;
56
57 struct mca_mpool_hugepage_hugepage_t {
58
59 opal_list_item_t super;
60
61 unsigned long page_size;
62
63 char *path;
64
65 opal_atomic_int32_t count;
66
67 int mmap_flags;
68 };
69 typedef struct mca_mpool_hugepage_hugepage_t mca_mpool_hugepage_hugepage_t;
70
71 OBJ_CLASS_DECLARATION(mca_mpool_hugepage_hugepage_t);
72
73 struct mca_mpool_hugepage_module_t {
74 mca_mpool_base_module_t super;
75 mca_mpool_hugepage_hugepage_t *huge_page;
76 mca_allocator_base_module_t *allocator;
77 opal_mutex_t lock;
78 opal_rb_tree_t allocation_tree;
79 };
80
81
82
83
84 int mca_mpool_hugepage_module_init (mca_mpool_hugepage_module_t *mpool,
85 mca_mpool_hugepage_hugepage_t *huge_page);
86
87 void *mca_mpool_hugepage_seg_alloc (void *ctx, size_t *sizep);
88 void mca_mpool_hugepage_seg_free (void *ctx, void *addr);
89
90 END_C_DECLS
91 #endif