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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
// This file is part of context-allocator. It is subject to the license terms in the COPYRIGHT file found in the top-level directory of this distribution and at https://raw.githubusercontent.com/lemonrock/context-allocator/master/COPYRIGHT. No part of context-allocator, including this file, may be copied, modified, propagated, or distributed except according to the terms contained in the COPYRIGHT file. // Copyright © 2019 The developers of context-allocator. See the COPYRIGHT file in the top-level directory of this distribution and at https://raw.githubusercontent.com/lemonrock/context-allocator/master/COPYRIGHT. /// Request that an allocation uses huge pages. /// /// The allocation being requested has to be aligned to the size requested, viz it is best to only make allocations that use the configured huge page size. /// /// On x86-64, this should be `2Mb` or `1Gb`. /// /// Currently such requests assume that transparent huge pages are in effect. /// /// On operating systems other than Android and Linux, huge page size has no effect. #[derive(Debug, Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash)] #[repr(i32)] pub enum HugePageSize { /// Regular, non-huge-page. None = 0, /// Equivalent to `MAP_HUGETLB`. #[cfg(any(target_os = "android", target_os = "linux"))] Default = MAP_HUGETLB | 0 << Self::MAP_HUGE_SHIFT, /// Equivalent to `MAP_HUGETLB | MAP_HUGE_64KB`. /// /// Suitable for ? #[cfg(any(target_os = "android", target_os = "linux"))] _64Kb = MAP_HUGETLB | 16 << Self::MAP_HUGE_SHIFT, /// Equivalent to `MAP_HUGETLB | MAP_HUGE_512KB`. /// /// Suitable for ? #[cfg(any(target_os = "android", target_os = "linux"))] _512Kb = MAP_HUGETLB | 19 << Self::MAP_HUGE_SHIFT, /// Equivalent to `MAP_HUGETLB | MAP_HUGE_1Mb`. /// /// Suitable for ? #[cfg(any(target_os = "android", target_os = "linux"))] _1Mb = MAP_HUGETLB | 20 << Self::MAP_HUGE_SHIFT, /// Equivalent to `MAP_HUGETLB | MAP_HUGE_2MB`. /// /// Suitable for x86-64. #[cfg(any(target_os = "android", target_os = "linux"))] _2Mb = MAP_HUGETLB | 21 << Self::MAP_HUGE_SHIFT, /// Equivalent to `MAP_HUGETLB | MAP_HUGE_8MB`. /// /// Suitable for ? #[cfg(any(target_os = "android", target_os = "linux"))] _8Mb = MAP_HUGETLB | 23 << Self::MAP_HUGE_SHIFT, /// Equivalent to `MAP_HUGETLB | MAP_HUGE_16MB`. /// /// Suitable for ? #[cfg(any(target_os = "android", target_os = "linux"))] _16Mb = MAP_HUGETLB | 24 << Self::MAP_HUGE_SHIFT, /// Equivalent to `MAP_HUGETLB | MAP_HUGE_32MB`. /// /// Suitable for ? #[cfg(any(target_os = "android", target_os = "linux"))] _32Mb = MAP_HUGETLB | 25 << Self::MAP_HUGE_SHIFT, /// Equivalent to `MAP_HUGETLB | MAP_HUGE_256MB`. /// /// Suitable for ? #[cfg(any(target_os = "android", target_os = "linux"))] _256Mb = MAP_HUGETLB | 28 << Self::MAP_HUGE_SHIFT, /// Equivalent to `MAP_HUGETLB | MAP_HUGE_512MB`. /// /// Suitable for ? #[cfg(any(target_os = "android", target_os = "linux"))] _512Mb = MAP_HUGETLB | 29 << Self::MAP_HUGE_SHIFT, /// Equivalent to `MAP_HUGETLB | MAP_HUGE_1GB`. /// /// Suitable for x86-64. #[cfg(any(target_os = "android", target_os = "linux"))] _1Gb = MAP_HUGETLB | 30 << Self::MAP_HUGE_SHIFT, /// Equivalent to `MAP_HUGETLB | MAP_HUGE_2GB`. /// /// Suitable for ? #[cfg(any(target_os = "android", target_os = "linux"))] _2Gb = MAP_HUGETLB | 31 << Self::MAP_HUGE_SHIFT, /// Equivalent to `MAP_HUGETLB | MAP_HUGE_16GB`. /// /// Suitable for PowerPC. #[cfg(any(target_os = "android", target_os = "linux"))] _16Gb = MAP_HUGETLB | 34 << Self::MAP_HUGE_SHIFT, } impl Default for HugePageSize { #[inline(always)] fn default() -> Self { HugePageSize::None } } impl HugePageSize { #[cfg(any(target_os = "android", target_os = "linux"))] const MAP_HUGE_SHIFT: i32 = 26; }