File: fix-non-linux

package info (click to toggle)
litl 0.1.9-13
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 2,188 kB
  • sloc: sh: 4,251; ansic: 3,322; makefile: 138
file content (107 lines) | stat: -rw-r--r-- 3,694 bytes parent folder | download | duplicates (3)
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
commit 86c0692ecff8abad6d1bbb86596384a1a2bf3e8d
Author: francois.trahay <francois.trahay@telecom-sudparis.eu>
Date:   Wed Aug 16 10:21:21 2017 +0200

    fix the compilation of litl on non-linux machines

diff --git a/src/litl_write.c b/src/litl_write.c
index 77b8f0b..ce39079 100644
--- a/src/litl_write.c
+++ b/src/litl_write.c
@@ -538,11 +538,15 @@ static void __litl_write_allocate_buffer(litl_write_trace_t* trace) {
      that makes sure the page table is populated. This way, the page faults
      caused by litl are sensibly reduced.
   */
+#ifdef __linux__
+  /* some mmap options (eg. MAP_POPULATE) are linux specific. Use malloc on the other platforms */
 #define USE_MMAP
+#endif
+
 #ifdef USE_MMAP
   size_t length = trace->buffer_size + __litl_get_reg_event_size(LITL_MAX_PARAMS) + __litl_get_reg_event_size(1);
-  
-  trace->buffers[thread_id]->buffer_ptr = mmap(NULL, 
+
+  trace->buffers[thread_id]->buffer_ptr = mmap(NULL,
 					  length,
 					  PROT_READ|PROT_WRITE,
 					  MAP_SHARED|MAP_ANONYMOUS|MAP_POPULATE,
commit e6b49bbd2e3b54f7cad5e5a1e06034940e968f5f
Author: francois.trahay <francois.trahay@telecom-sudparis.eu>
Date:   Wed Aug 16 10:50:55 2017 +0200

    improve mmap usage on non-linux machines

diff --git a/src/litl_write.c b/src/litl_write.c
index ce39079..50673a4 100644
--- a/src/litl_write.c
+++ b/src/litl_write.c
@@ -538,31 +538,39 @@ static void __litl_write_allocate_buffer(litl_write_trace_t* trace) {
      that makes sure the page table is populated. This way, the page faults
      caused by litl are sensibly reduced.
   */
-#ifdef __linux__
-  /* some mmap options (eg. MAP_POPULATE) are linux specific. Use malloc on the other platforms */
 #define USE_MMAP
-#endif
 
 #ifdef USE_MMAP
   size_t length = trace->buffer_size + __litl_get_reg_event_size(LITL_MAX_PARAMS) + __litl_get_reg_event_size(1);
 
+  int mmap_flags = MAP_SHARED|MAP_ANONYMOUS;
+
+#ifdef MAP_POPULATE
+  /* make sure the pages are in the page table. This should reduce page faults when recording events  */
+  mmap_flags |= MAP_POPULATE;
+#endif
+
   trace->buffers[thread_id]->buffer_ptr = mmap(NULL,
-					  length,
-					  PROT_READ|PROT_WRITE,
-					  MAP_SHARED|MAP_ANONYMOUS|MAP_POPULATE,
-					  -1,
-					  0);
+					       length,
+					       PROT_READ|PROT_WRITE,
+					       flags,
+					       -1,
+					       0);
   if(trace->buffers[thread_id]->buffer_ptr == MAP_FAILED) {
     perror("mmap");
   }
+
+#ifdef MAP_POPULATE
   /* touch the first pages */
   if(length> 1024*1024)
     length=1024*1024;
+#endif	/* if MAP_POPULATE is not available, touch the whole buffer to avoid future page faults */
   memset(trace->buffers[thread_id]->buffer_ptr, 0, length);
-#else
+
+#else  /* USE_MMAP */
   size_t length = trace->buffer_size + __litl_get_reg_event_size(LITL_MAX_PARAMS) + __litl_get_reg_event_size(1);
   trace->buffers[thread_id]->buffer_ptr = malloc(length);
-#endif
+#endif	/* USE_MMAP */
 
   if (!trace->buffers[thread_id]->buffer_ptr) {
     perror("Could not allocate memory buffer for the thread\n!");
commit 386f1ed5837b5de6c38aacc5e0d90b8911700462
Author: francois.trahay <francois.trahay@telecom-sudparis.eu>
Date:   Wed Aug 16 11:15:23 2017 +0200

    fix previous commit

diff --git a/src/litl_write.c b/src/litl_write.c
index 50673a4..fab3c0c 100644
--- a/src/litl_write.c
+++ b/src/litl_write.c
@@ -553,7 +553,7 @@ static void __litl_write_allocate_buffer(litl_write_trace_t* trace) {
   trace->buffers[thread_id]->buffer_ptr = mmap(NULL,
 					       length,
 					       PROT_READ|PROT_WRITE,
-					       flags,
+					       mmap_flags,
 					       -1,
 					       0);
   if(trace->buffers[thread_id]->buffer_ptr == MAP_FAILED) {