-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathpredict.h
90 lines (75 loc) · 2.55 KB
/
predict.h
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
/*
* * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* * This code is free software; you can redistribute it and/or modify it
* * under the terms of the GNU General Public License version 2 only, as
* * published by the Free Software Foundation.
* *
* * This code is distributed in the hope that it will be useful, but WITHOUT
* * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* * version 2 for more details (a copy is included in the LICENSE file that
* * accompanied this code).
* *
* * You should have received a copy of the GNU General Public License version
* * 2 along with this work; if not, write to the Free Software Foundation,
* * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
* *
* * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* * or visit www.oracle.com if you need additional information or have any
* * questions.
* */
#ifndef PREDICT_H
#define PREDICT_H
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdarg.h>
#include <string.h>
#include <syslog.h>
#ifdef __cplusplus
extern "C" {
#endif
/* Size of sliding window for computing trend line */
#define LSQ_LOOKBACK 8
/* How often should data be sampled and trend analyzed*/
#define LOW_PERIODICITY 60
#define NORM_PERIODICITY 30
#define HIGH_PERIODICITY 15
#define MAX_ORDER 11
#define MEMPREDICT_RECLAIM 0x01
#define MEMPREDICT_COMPACT 0x02
#define MEMPREDICT_LOWER_WMARKS 0x04
extern long compaction_rate, reclaim_rate;
extern int debug_mode, verbose, max_compaction_order, periodicity;
struct lsq_struct {
int next;
int ready;
long long y[LSQ_LOOKBACK];
long long x[LSQ_LOOKBACK];
};
enum output_type {
OUTPUT_OBSERVATIONS,
OUTPUT_PREDICTIONS,
MAX_OUTPUT
};
struct frag_info {
long long free_pages;
long long msecs;
};
unsigned long predict(struct frag_info *, struct lsq_struct *,
unsigned long, unsigned long, int);
#define log_err(...) log_msg(LOG_ERR, __VA_ARGS__)
#define log_warn(...) log_msg(LOG_WARNING, __VA_ARGS__)
#define log_dbg(...) if (debug_mode) \
log_msg(LOG_DEBUG, __VA_ARGS__)
#define log_info(verb_level, ...) if (verbose >= verb_level) \
log_msg(LOG_INFO, __VA_ARGS__)
/* Use pr_info to log info irrespective of verbosity level */
#define pr_info(...) log_msg(LOG_INFO, __VA_ARGS__)
extern void log_msg(int level, char *fmt, ...);
#ifdef __cplusplus
}
#endif
#endif /* PREDICT_H */