File: madvise.c

package info (click to toggle)
systemtap 5.1-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 47,964 kB
  • sloc: cpp: 80,838; ansic: 54,757; xml: 49,725; exp: 43,665; sh: 11,527; python: 5,003; perl: 2,252; tcl: 1,312; makefile: 1,006; javascript: 149; lisp: 105; awk: 101; asm: 91; java: 70; sed: 16
file content (132 lines) | stat: -rw-r--r-- 3,654 bytes parent folder | download | duplicates (5)
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/* COVERAGE: madvise */

#include <stdio.h>
#include <string.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <linux/limits.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
    char *str_for_file = "abcdefghijklmnopqrstuvwxyz12345\n";
    char filename[PATH_MAX];
    int i, fd;
    void *file;
    size_t size = 40960;

    /* Create a temporary file. */
    sprintf(filename, "%s-out.%d", *argv, getpid());
    fd = open(filename, O_RDWR | O_CREAT, 0664);

    /* Writing 40 KB of data into this file [32 * 1280 = 40960] */
    for (i = 0; i < 1280; i++)
	write(fd, str_for_file, strlen(str_for_file));

    /* Map the input file into memory */
    file = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0);

    madvise((void *)-1, size, MADV_NORMAL);
    //staptest// madvise (0x[f]+, 40960, MADV_NORMAL) = -NNNN (EINVAL)

    /* Ignore return code */
    madvise(file, (size_t)-1, MADV_NORMAL);
#if __WORDSIZE == 64
    //staptest// madvise (XXXX, 18446744073709551615, MADV_NORMAL) = -NNNN
#else
    //staptest// madvise (XXXX, 4294967295, MADV_NORMAL) = -NNNN
#endif

    madvise(file, size, -1);
    //staptest// madvise (XXXX, 40960, 0xffffffff) = -NNNN (EINVAL)

    madvise(file, size, MADV_NORMAL);
    //staptest// madvise (XXXX, 40960, MADV_NORMAL) = 0

    madvise(file, size, MADV_RANDOM);
    //staptest// madvise (XXXX, 40960, MADV_RANDOM) = 0

    madvise(file, size, MADV_SEQUENTIAL);
    //staptest// madvise (XXXX, 40960, MADV_SEQUENTIAL) = 0

    madvise(file, size, MADV_WILLNEED);
    //staptest// madvise (XXXX, 40960, MADV_WILLNEED) = 0

    madvise(file, size, MADV_DONTNEED);
    //staptest// madvise (XXXX, 40960, MADV_DONTNEED) = 0

#ifdef MADV_FREE
    /* Ignore return value */
    madvise(file, size, MADV_FREE);
    //staptest// madvise (XXXX, 40960, MADV_FREE)
#endif

    /* Ignore return value */
    madvise(file, size, MADV_REMOVE);
    //staptest// madvise (XXXX, 40960, MADV_REMOVE)

    madvise(file, size, MADV_DONTFORK);
    //staptest// madvise (XXXX, 40960, MADV_DONTFORK) = 0

    madvise(file, size, MADV_DOFORK);
    //staptest// madvise (XXXX, 40960, MADV_DOFORK) = 0

    /* NB: the following two can cause alarming kernel messages to appear
       in the logs.  Ignore these:
       [107552.743276] Injecting memory failure for page 7d42f at 55578000
       [107552.745627] MCE 0x7d42f: dirty LRU page recovery: Recovered
    */

#ifdef MADV_HWPOISON
    /* Ignore return value */
    madvise(file, size, MADV_HWPOISON);
    //staptest// madvise (XXXX, 40960, MADV_HWPOISON)
#endif

#ifdef MADV_SOFT_OFFLINE
    madvise(file, size, MADV_SOFT_OFFLINE);
    //staptest// madvise (XXXX, 40960, MADV_SOFT_OFFLINE) = 0
#endif

#ifdef MADV_MERGEABLE
    madvise(file, size, MADV_MERGEABLE);
    //staptest// madvise (XXXX, 40960, MADV_MERGEABLE) = 0
#endif

#ifdef MADV_UNMERGEABLE
    madvise(file, size, MADV_UNMERGEABLE);
    //staptest// madvise (XXXX, 40960, MADV_UNMERGEABLE) = 0
#endif

#ifdef MADV_HUGEPAGE
    /* Ignore return value */
    madvise(file, size, MADV_HUGEPAGE);
    //staptest// madvise (XXXX, 40960, MADV_HUGEPAGE)
#endif

#ifdef MADV_NOHUGEPAGE
    /* Ignore return value */
    madvise(file, size, MADV_NOHUGEPAGE);
    //staptest// madvise (XXXX, 40960, MADV_NOHUGEPAGE)
#endif

#ifdef MADV_DONTDUMP
    madvise(file, size, MADV_DONTDUMP);
    //staptest// madvise (XXXX, 40960, MADV_DONTDUMP) = 0
#endif

#ifdef MADV_DODUMP
    madvise(file, size, MADV_DODUMP);
    //staptest// madvise (XXXX, 40960, MADV_DODUMP) = 0
#endif

    /* Cleanup. */
    munmap(file, size);

    close(fd);
    unlink(filename);

    return 0;
}