blob: b48659048ab5b86aa59c021e8d8786816145d3d3 (
plain)
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
|
diff -Naurp sreadahead-0.02/readahead.c sreadahead-0.02-nice/readahead.c
--- sreadahead-0.02/readahead.c 2008-11-06 00:57:17.000000000 -0500
+++ sreadahead-0.02-nice/readahead.c 2008-11-06 02:28:29.000000000 -0500
@@ -26,7 +26,18 @@
#include <errno.h>
#include "readahead.h"
+#include <sys/syscall.h>
+# if defined(__i386__)
+# define __NR_ioprio_set 289
+# elif defined(__x86_64__)
+# define __NR_ioprio_set 251
+# else
+# error "Unsupported arch"
+# endif
+
+#define IOPRIO_WHO_PROCESS 1
+#define IOPRIO_CLASS_SHIFT 13
#define MAXR 1024
static struct readahead files[MAXR];
static unsigned int total_files = 0;
@@ -68,7 +79,15 @@ void *one_thread(void *ptr)
int main(int argc, char **argv)
{
- FILE *file = fopen("/etc/readahead.packed", "r");
+ int iopriority = 7; /* hard code for idle */
+ int iopriority_class = 3; /* 3 stands for idle */
+ int pid = 0;
+ FILE *file;
+
+ if (syscall(__NR_ioprio_set, IOPRIO_WHO_PROCESS, pid, iopriority | iopriority_class << IOPRIO_CLASS_SHIFT) == -1)
+ perror("Can not set priority to idle class");
+
+ file = fopen("/etc/readahead.packed", "r");
if (!file) {
perror("Couldnt open /etc/readahead.packed");
return -errno;
|