Merge pull request #3481 from poettering/relative-memcg
various changes, most importantly regarding memory metrics
This commit is contained in:
@@ -475,6 +475,24 @@ static void test_safe_atod(void) {
|
||||
assert_se(*e == ',');
|
||||
}
|
||||
|
||||
static void test_parse_percent(void) {
|
||||
assert_se(parse_percent("") == -EINVAL);
|
||||
assert_se(parse_percent("foo") == -EINVAL);
|
||||
assert_se(parse_percent("0") == -EINVAL);
|
||||
assert_se(parse_percent("50") == -EINVAL);
|
||||
assert_se(parse_percent("100") == -EINVAL);
|
||||
assert_se(parse_percent("-1") == -EINVAL);
|
||||
assert_se(parse_percent("0%") == 0);
|
||||
assert_se(parse_percent("55%") == 55);
|
||||
assert_se(parse_percent("100%") == 100);
|
||||
assert_se(parse_percent("-7%") == -ERANGE);
|
||||
assert_se(parse_percent("107%") == -ERANGE);
|
||||
assert_se(parse_percent("%") == -EINVAL);
|
||||
assert_se(parse_percent("%%") == -EINVAL);
|
||||
assert_se(parse_percent("%1") == -EINVAL);
|
||||
assert_se(parse_percent("1%%") == -EINVAL);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
log_parse_environment();
|
||||
log_open();
|
||||
@@ -488,6 +506,7 @@ int main(int argc, char *argv[]) {
|
||||
test_safe_atou16();
|
||||
test_safe_atoi16();
|
||||
test_safe_atod();
|
||||
test_parse_percent();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include "def.h"
|
||||
#include "fileio.h"
|
||||
#include "fs-util.h"
|
||||
#include "parse-util.h"
|
||||
#include "raw-clone.h"
|
||||
#include "rm-rf.h"
|
||||
#include "string-util.h"
|
||||
@@ -263,6 +264,53 @@ static void test_raw_clone(void) {
|
||||
}
|
||||
}
|
||||
|
||||
static void test_physical_memory(void) {
|
||||
uint64_t p;
|
||||
char buf[FORMAT_BYTES_MAX];
|
||||
|
||||
p = physical_memory();
|
||||
assert_se(p > 0);
|
||||
assert_se(p < UINT64_MAX);
|
||||
assert_se(p % page_size() == 0);
|
||||
|
||||
log_info("Memory: %s (%" PRIu64 ")", format_bytes(buf, sizeof(buf), p), p);
|
||||
}
|
||||
|
||||
static void test_physical_memory_scale(void) {
|
||||
uint64_t p;
|
||||
|
||||
p = physical_memory();
|
||||
|
||||
assert_se(physical_memory_scale(0, 100) == 0);
|
||||
assert_se(physical_memory_scale(100, 100) == p);
|
||||
|
||||
log_info("Memory original: %" PRIu64, physical_memory());
|
||||
log_info("Memory scaled by 50%%: %" PRIu64, physical_memory_scale(50, 100));
|
||||
log_info("Memory divided by 2: %" PRIu64, physical_memory() / 2);
|
||||
log_info("Page size: %zu", page_size());
|
||||
|
||||
/* There might be an uneven number of pages, hence permit these calculations to be half a page off... */
|
||||
assert_se(page_size()/2 + physical_memory_scale(50, 100) - p/2 <= page_size());
|
||||
assert_se(physical_memory_scale(200, 100) == p*2);
|
||||
|
||||
assert_se(physical_memory_scale(0, 1) == 0);
|
||||
assert_se(physical_memory_scale(1, 1) == p);
|
||||
assert_se(physical_memory_scale(2, 1) == p*2);
|
||||
|
||||
assert_se(physical_memory_scale(0, 2) == 0);
|
||||
|
||||
assert_se(page_size()/2 + physical_memory_scale(1, 2) - p/2 <= page_size());
|
||||
assert_se(physical_memory_scale(2, 2) == p);
|
||||
assert_se(physical_memory_scale(4, 2) == p*2);
|
||||
|
||||
assert_se(physical_memory_scale(0, UINT32_MAX) == 0);
|
||||
assert_se(physical_memory_scale(UINT32_MAX, UINT32_MAX) == p);
|
||||
|
||||
/* overflow */
|
||||
assert_se(physical_memory_scale(UINT64_MAX/4, UINT64_MAX) == UINT64_MAX);
|
||||
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
log_parse_environment();
|
||||
log_open();
|
||||
@@ -277,6 +325,8 @@ int main(int argc, char *argv[]) {
|
||||
test_log2i();
|
||||
test_execute_directory();
|
||||
test_raw_clone();
|
||||
test_physical_memory();
|
||||
test_physical_memory_scale();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user