summaryrefslogtreecommitdiffstats
path: root/SD-VBS/tools
diff options
context:
space:
mode:
Diffstat (limited to 'SD-VBS/tools')
-rwxr-xr-xSD-VBS/tools/preloadbin0 -> 17416 bytes
-rw-r--r--SD-VBS/tools/preload.c70
2 files changed, 70 insertions, 0 deletions
diff --git a/SD-VBS/tools/preload b/SD-VBS/tools/preload
new file mode 100755
index 0000000..b2e70fc
--- /dev/null
+++ b/SD-VBS/tools/preload
Binary files differ
diff --git a/SD-VBS/tools/preload.c b/SD-VBS/tools/preload.c
new file mode 100644
index 0000000..24cf428
--- /dev/null
+++ b/SD-VBS/tools/preload.c
@@ -0,0 +1,70 @@
1#include "stdio.h"
2#include "stdlib.h"
3#include "unistd.h"
4#include <fcntl.h>
5#include <sys/stat.h>
6#include <sys/mman.h>
7#include <signal.h>
8
9
10static void sig_int(int signo){
11 return;
12}
13int main(int argc, char* argv[]){
14 if(argc < 2){
15 printf("Too few arguments!\n");
16 exit(1);
17 }
18 int fd = open(argv[1], O_RDONLY);
19 if(fd < 0){
20 printf("open failure\n");
21 exit(1);
22 }
23
24 struct stat st;
25 if(fstat(fd, &st) < 0){
26 printf("stat error\n");
27 exit(1);
28 }
29 int len = st.st_size;
30 printf("size = %d\n", len);
31 void* pmap;
32 pmap = mmap(0, len, PROT_READ,MAP_SHARED | MAP_POPULATE,fd, 0);
33
34 printf("pmap = 0x%016x\n", pmap);
35 if(!pmap){
36 printf("map error\n");
37 close(fd);
38 exit(1);
39 }
40
41
42 for(int i = 0; i < len;i++){
43 char c = ((char*)pmap)[i];
44 }
45 printf("pinning pages...\n");
46 if(mlock(pmap, len) == -1){
47 printf("mlock error");
48 close(fd);
49 exit(1);
50 }
51
52 printf("done pinning...\n");
53
54
55
56 sigset_t set;
57 sigemptyset(&set);
58 sigaddset(&set,SIGINT);
59 int sig;
60 signal(SIGINT, sig_int);
61 sigwait(&set, &sig);
62 printf("unpinning pages...\n");
63
64 if(munlock(pmap, len) < 0){
65 printf("munlock error\n");
66 }
67 munmap(pmap, len);
68 close(fd);
69 return 0;
70}