Commit 41a598e2 authored by Lennart Poettering's avatar Lennart Poettering

readahead: disable on low memory machines

parent 4030d7a9
......@@ -50,6 +50,12 @@
#define MINCORE_VEC_SIZE (READAHEAD_FILE_SIZE_MAX/PAGE_SIZE)
/* fixme:
*
* - detect ssd/lvm/... on btrfs
* - read ahead directories
*/
static int btrfs_defrag(int fd) {
struct btrfs_ioctl_vol_args data;
......@@ -302,10 +308,7 @@ static int collect(const char *root) {
ul = fd_first_block(m->fd);
if ((k = hashmap_put(files, p, ULONG_TO_PTR(ul))) < 0) {
if (k != -EEXIST)
log_warning("set_put() failed: %s", strerror(-k));
log_warning("set_put() failed: %s", strerror(-k));
free(p);
}
}
......@@ -355,7 +358,7 @@ static int collect(const char *root) {
if (on_ssd || on_btrfs) {
/* On SSD or on btrfs, just write things out in the
* order the files where accessed. */
* order the files were accessed. */
HASHMAP_FOREACH_KEY(q, p, files, i)
pack_file(pack, p, on_btrfs);
......@@ -442,6 +445,11 @@ int main(int argc, char *argv[]) {
log_parse_environment();
log_open();
if (!enough_ram()) {
log_info("Disabling readahead collector due to low memory.");
return 0;
}
if (collect(argc >= 2 ? argv[1] : "/") < 0)
return 1;
......
......@@ -23,6 +23,7 @@
#include <libudev.h>
#include <stdlib.h>
#include <string.h>
#include <sys/sysinfo.h>
#include "log.h"
#include "readahead-common.h"
......@@ -105,3 +106,13 @@ finish:
return b;
}
bool enough_ram(void) {
struct sysinfo si;
assert_se(sysinfo(&si) >= 0);
return si.totalram > 127 * 1024*1024; /* Enable readahead only
* with at least 128MB
* memory */
}
......@@ -31,4 +31,6 @@ int file_verify(int fd, const char *fn, struct stat *st);
int fs_on_ssd(const char *p);
bool enough_ram(void);
#endif
......@@ -206,6 +206,11 @@ int main(int argc, char*argv[]) {
log_parse_environment();
log_open();
if (!enough_ram()) {
log_info("Disabling readahead replay due to low memory.");
return 0;
}
if (replay(argc >= 2 ? argv[1] : "/") < 0)
return 1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment