aboutsummaryrefslogtreecommitdiffstats
path: root/meta/recipes-core/systemd/systemd/0002-readahead-chunk-on-spinning-media.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-core/systemd/systemd/0002-readahead-chunk-on-spinning-media.patch')
-rw-r--r--meta/recipes-core/systemd/systemd/0002-readahead-chunk-on-spinning-media.patch142
1 files changed, 0 insertions, 142 deletions
diff --git a/meta/recipes-core/systemd/systemd/0002-readahead-chunk-on-spinning-media.patch b/meta/recipes-core/systemd/systemd/0002-readahead-chunk-on-spinning-media.patch
deleted file mode 100644
index d57a01c916..0000000000
--- a/meta/recipes-core/systemd/systemd/0002-readahead-chunk-on-spinning-media.patch
+++ /dev/null
@@ -1,142 +0,0 @@
-Upstream-Status: Backport
-
--Khem 2013/03/28
-
-From 94243ef299425d6c7089a7a05c48c9bb8f6cf3da Mon Sep 17 00:00:00 2001
-From: Auke Kok <auke-jan.h.kok@intel.com>
-Date: Fri, 22 Mar 2013 15:09:45 -0700
-Subject: [PATCH 02/17] readahead: chunk on spinning media
-
-Readahead has all sorts of bad side effects depending on your
-storage media. On rotating disks, it may be degrading startup
-performance if enough requests are queued spanning linearly
-over all blocks early at boot, and mount, blkid and friends
-want to insert reads to the start of these block devices after.
-
-The end result is that on spinning disks with ext3/4 that udev
-and mounts take a very long time, and nothing really happens until
-readahead is completely finished.
-
-This has the net effect that the CPU is almost entirely idle
-for the entire period that readahead is working. We could have
-finished starting up quite a lot of services in this time if
-we were smarter at how we do readahead.
-
-This patch sorts all requests into 2 second "chunks" and sub-sorts
-each chunk by block. This adds a single cross-drive seek per "chunk"
-but has the benefit that we will have a lot of the blocks we need
-early on in the boot sequence loaded into memory faster.
-
-For a comparison of how before/after bootcharts look (ext4 on a
-mobile 5400rpm 250GB drive) please look at:
-
- http://foo-projects.org/~sofar/blocked-tests/
-
-There are bootcharts in the "before" and "after" folders where you
-should be able to see that many low-level services finish 5-7
-seconds earlier with the patch applied (after).
----
- Makefile.am | 2 +-
- src/readahead/readahead-collect.c | 28 +++++++++++++++++++++++++---
- 2 files changed, 26 insertions(+), 4 deletions(-)
-
-diff --git a/Makefile.am b/Makefile.am
-index 37c1cc2..5861976 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -2956,7 +2956,7 @@ systemd_readahead_SOURCES = \
- systemd_readahead_LDADD = \
- libsystemd-shared.la \
- libsystemd-daemon.la \
-- libudev.la
-+ libudev.la -lm
-
- dist_doc_DATA += \
- src/readahead/sd-readahead.c \
-diff --git a/src/readahead/readahead-collect.c b/src/readahead/readahead-collect.c
-index 5d07f47..5d22949 100644
---- a/src/readahead/readahead-collect.c
-+++ b/src/readahead/readahead-collect.c
-@@ -42,6 +42,7 @@
- #include <sys/vfs.h>
- #include <getopt.h>
- #include <sys/inotify.h>
-+#include <math.h>
-
- #ifdef HAVE_FANOTIFY_INIT
- #include <sys/fanotify.h>
-@@ -67,6 +68,7 @@
- */
-
- static ReadaheadShared *shared = NULL;
-+static struct timespec starttime;
-
- /* Avoid collisions with the NULL pointer */
- #define SECTOR_TO_PTR(s) ULONG_TO_PTR((s)+1)
-@@ -205,6 +207,7 @@ static unsigned long fd_first_block(int fd) {
- struct item {
- const char *path;
- unsigned long block;
-+ unsigned long bin;
- };
-
- static int qsort_compare(const void *a, const void *b) {
-@@ -213,6 +216,13 @@ static int qsort_compare(const void *a, const void *b) {
- i = a;
- j = b;
-
-+ /* sort by bin first */
-+ if (i->bin < j->bin)
-+ return -1;
-+ if (i->bin > j->bin)
-+ return 1;
-+
-+ /* then sort by sector */
- if (i->block < j->block)
- return -1;
- if (i->block > j->block)
-@@ -250,6 +260,8 @@ static int collect(const char *root) {
- goto finish;
- }
-
-+ clock_gettime(CLOCK_MONOTONIC, &starttime);
-+
- /* If there's no pack file yet we lower the kernel readahead
- * so that mincore() is accurate. If there is a pack file
- * already we assume it is accurate enough so that kernel
-@@ -447,10 +459,21 @@ static int collect(const char *root) {
- free(p);
- else {
- unsigned long ul;
-+ struct timespec ts;
-+ struct item *entry;
-+
-+ entry = new0(struct item, 1);
-
- ul = fd_first_block(m->fd);
-
-- if ((k = hashmap_put(files, p, SECTOR_TO_PTR(ul))) < 0) {
-+ clock_gettime(CLOCK_MONOTONIC, &ts);
-+
-+ entry->block = ul;
-+ entry->path = strdup(p);
-+ entry->bin = round((ts.tv_sec - starttime.tv_sec +
-+ ((ts.tv_nsec - starttime.tv_nsec) / 1000000000.0)) / 2.0);
-+
-+ if ((k = hashmap_put(files, p, entry)) < 0) {
- log_warning("set_put() failed: %s", strerror(-k));
- free(p);
- }
-@@ -518,8 +541,7 @@ done:
-
- j = ordered;
- HASHMAP_FOREACH_KEY(q, p, files, i) {
-- j->path = p;
-- j->block = PTR_TO_SECTOR(q);
-+ memcpy(j, q, sizeof(struct item));
- j++;
- }
-
---
-1.7.9.5
-