cache line locking on AMD x86_64 utilising L3 CAT pseudo-locking
26

Configure Feed

Select the types of activity you want to include in your feed.

icepick / include / icepick.h
3.8 kB 111 lines
1#ifndef ICEPICK_H 2#define ICEPICK_H 3 4#include <stddef.h> 5#include <stdint.h> 6#include <stdbool.h> 7 8#define ICEPICK_E_NO_CAT (-1) 9#define ICEPICK_E_PERMISSION (-2) 10#define ICEPICK_E_NO_CLOS (-3) 11#define ICEPICK_E_TOO_LARGE (-4) 12#define ICEPICK_E_NUMA (-5) 13#define ICEPICK_E_HUGEPAGE (-6) 14#define ICEPICK_E_VERIFY (-7) 15#define ICEPICK_E_INVALID (-8) 16#define ICEPICK_E_ALLOC (-9) 17#define ICEPICK_E_MSR (-10) 18#define ICEPICK_E_THREAD (-11) 19 20typedef enum { 21 ICEPICK_PRIME_TEMPORAL, 22 ICEPICK_PRIME_PREFETCHT2, 23 ICEPICK_PRIME_PREFETCHNTA, 24 ICEPICK_PRIME_NT_STORE, 25} icepick_prime_strategy_t; 26 27typedef enum { 28 ICEPICK_PATTERN_SEQUENTIAL, 29 ICEPICK_PATTERN_REVERSE, 30 ICEPICK_PATTERN_STRIDED, 31 ICEPICK_PATTERN_POINTER_CHASE, 32} icepick_access_pattern_t; 33 34typedef enum { 35 ICEPICK_CORE_ANY, 36 ICEPICK_CORE_PCORE, 37 ICEPICK_CORE_ECORE, 38} icepick_core_type_t; 39 40typedef struct icepick_topology icepick_topology_t; 41typedef struct icepick_region icepick_region_t; 42typedef struct icepick_monitor icepick_monitor_t; 43 44typedef struct { 45 size_t size; 46 unsigned clos_id; 47 int numa_node; 48 bool huge_pages; 49 bool verify; 50 bool auto_monitor; 51 uint64_t pmu_poll_interval_ns; 52 uint64_t probe_interval_ns; 53 uint32_t miss_threshold; 54 icepick_prime_strategy_t prime_strategy; 55 icepick_access_pattern_t access_pattern; 56 size_t stride_bytes; 57 unsigned prime_iterations; 58 unsigned mba_throttle; 59 icepick_core_type_t core_type; 60} icepick_config_t; 61 62typedef struct { 63 uint64_t mean_ns; 64 uint64_t stddev_ns; 65 uint64_t p50_ns; 66 uint64_t p99_ns; 67 uint64_t p999_ns; 68 uint64_t min_ns; 69 uint64_t max_ns; 70} icepick_latency_stats_t; 71 72int icepick_discover_topology(icepick_topology_t **topo); 73void icepick_free_topology(icepick_topology_t *topo); 74 75unsigned icepick_topology_l3_ways(const icepick_topology_t *topo); 76size_t icepick_topology_l3_size(const icepick_topology_t *topo); 77size_t icepick_topology_way_size(const icepick_topology_t *topo); 78unsigned icepick_topology_max_clos(const icepick_topology_t *topo); 79unsigned icepick_topology_ccx_count(const icepick_topology_t *topo); 80bool icepick_topology_cat_supported(const icepick_topology_t *topo); 81bool icepick_topology_mba_supported(const icepick_topology_t *topo); 82bool icepick_topology_mba_is_linear(const icepick_topology_t *topo); 83unsigned icepick_topology_max_mba_thrtl(const icepick_topology_t *topo); 84bool icepick_topology_is_hybrid(const icepick_topology_t *topo); 85unsigned icepick_topology_pcore_count(const icepick_topology_t *topo); 86unsigned icepick_topology_ecore_count(const icepick_topology_t *topo); 87 88int icepick_lock(icepick_topology_t *topo, const icepick_config_t *cfg, icepick_region_t **region); 89int icepick_unlock(icepick_region_t *region); 90 91void *icepick_region_ptr(const icepick_region_t *region); 92size_t icepick_region_size(const icepick_region_t *region); 93unsigned icepick_region_clos(const icepick_region_t *region); 94 95int icepick_verify(const icepick_region_t *region, icepick_latency_stats_t *stats); 96 97int icepick_bench(void *ptr, size_t size, size_t iterations, 98 icepick_latency_stats_t *stats); 99 100int icepick_monitor_start(icepick_region_t *region, icepick_monitor_t **mon); 101int icepick_monitor_start_ex(icepick_region_t *region, uint64_t pmu_poll_ns, 102 uint64_t probe_ns, uint32_t miss_thresh, 103 icepick_monitor_t **mon); 104int icepick_monitor_stop(icepick_monitor_t *mon); 105uint64_t icepick_monitor_eviction_count(const icepick_monitor_t *mon); 106uint64_t icepick_monitor_reprime_count(const icepick_monitor_t *mon); 107bool icepick_monitor_is_degraded(const icepick_monitor_t *mon); 108 109const char *icepick_strerror(int err); 110 111#endif