Check-in [22c09ebad1]
Overview
Comment:More profiling work
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 22c09ebad1ae10459df42b05cba1a7ef27c8cd04b3baf915f30783f7afff2960
User & Date: rkeene on 2019-09-20 20:52:40
Other Links: manifest | tags
Context
2019-10-09
20:37
Switch to perfect hashing for lookups, to save space check-in: a719156faf user: rkeene tags: trunk
2019-09-20
20:52
More profiling work check-in: 22c09ebad1 user: rkeene tags: trunk
20:30
Added a "do-profile" target which uses OProfile to profile check-in: 3cae553059 user: rkeene tags: trunk
Changes

Modified .fossil-settings/ignore-glob from [7ee6f2e4ca] to [5dadc8b9dc].

19
20
21
22
23
24
25

26

27


19
20
21
22
23
24
25
26

27
28
29
30







+
-
+

+
+
xvfs-create-standalone.new
xvfs-create-standalone
xvfs-test-coverage
__test__.tcl
sdks
xvfs_random.so
xvfs_synthetic.so
profile-bare
profile
profile-gperf
oprofile_data
gmon.out
callgrind.out

Modified Makefile from [fa807992c6] to [fa4437d0b1].

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
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







-
+
-
-
-
+

+
+
+
-
+

+
-
+

+
+
+
+














-
+
+
+







	rm -f xvfs-test-coverage.info
	lcov --capture --directory . --output-file xvfs-test-coverage.info
	rm -rf xvfs-test-coverage
	mkdir xvfs-test-coverage
	genhtml xvfs-test-coverage.info --output-directory xvfs-test-coverage
	rm -f xvfs-test-coverage.info

profile: profile.c Makefile
profile-bare: profile.c example.c xvfs-core.h xvfs-core.c Makefile
	rm -f example-client$(LIB_SUFFIX) xvfs$(LIB_SUFFIX)
	$(MAKE) xvfs$(LIB_SUFFIX) example-client$(LIB_SUFFIX) XVFS_ADD_CPPFLAGS="-UXVFS_DEBUG"
	$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -UUSE_TCL_STUBS ./xvfs$(LIB_SUFFIX) ./example-client$(LIB_SUFFIX) -o profile profile.c -ltcl
	$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -UUSE_TCL_STUBS -o profile-bare profile.c -ltcl

profile-gperf: profile.c example.c xvfs-core.h xvfs-core.c Makefile
	$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -pg -UUSE_TCL_STUBS -o profile-gperf profile.c -ltcl

do-profile: profile Makefile
do-profile: profile-bare profile-gperf Makefile
	rm -rf oprofile_data
	rm -f gmon.out callgrind.out
	LD_LIBRARY_PATH='$(shell pwd):$(LD_LIBRARY_PATH)' operf ./profile
	operf ./profile-bare
	opreport
	./profile-gperf
	gprof ./profile-gperf
	valgrind --tool=callgrind --callgrind-out-file=callgrind.out ./profile-bare 10 2
	callgrind_annotate callgrind.out

clean:
	rm -f xvfs-create-standalone.new xvfs-create-standalone
	rm -f example.c example.c.new
	rm -f example-standalone$(LIB_SUFFIX) example-standalone.o
	rm -f example-client.o example-client$(LIB_SUFFIX)
	rm -f example-flexible.o example-flexible$(LIB_SUFFIX)
	rm -f xvfs.o xvfs$(LIB_SUFFIX)
	rm -f example-standalone.gcda example-standalone.gcno
	rm -f example-client.gcda example-client.gcno
	rm -f example-flexible.gcda example-flexible.gcno
	rm -f xvfs_random$(LIB_SUFFIX) xvfs_synthetic$(LIB_SUFFIX)
	rm -f xvfs.gcda xvfs.gcno
	rm -f __test__.tcl
	rm -f profile
	rm -f profile-bare profile-gperf
	rm -f gmon.out
	rm -f callgrind.out
	rm -rf oprofile_data
	rm -f xvfs-test-coverage.info
	rm -rf xvfs-test-coverage

distclean: clean

.PHONY: all clean distclean test do-test do-coverage do-benchmark do-profile

Modified profile.c from [e65448a613] to [2186d5269d].

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
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


+

+
+
+
-
+
-


+


+
+
+
+
+
+
+
+
+
+
+















-
-
-
-
-
-








+
+
-
-
+
+



-
+


-
-
-
-
-



#include <tcl.h>
#include <stdio.h>
#include <stdlib.h>

#undef  XVFS_DEBUG
#define XVFS_MODE_STANDALONE
#include "example.c"
extern int Xvfs_Init(Tcl_Interp *interp);

extern int Xvfs_example_Init(Tcl_Interp *interp);
int main(int argc, char **argv) {
	Tcl_Interp *interp;
	int profileTests, profileBenchmark;
	int tclRet;
	int try;

	profileTests = 0;
	profileBenchmark = 1000000;

	if (argc > 1) {
		profileBenchmark = atoi(argv[1]);
	}

	if (argc > 2) {
		profileTests = atoi(argv[2]);
	}

	interp = Tcl_CreateInterp();
	if (!interp) {
		fprintf(stderr, "Tcl_CreateInterp failed\n");

		return(1);
	}

	tclRet = Tcl_Init(interp);
	if (tclRet != TCL_OK) {
		fprintf(stderr, "Tcl_Init failed: %s\n", Tcl_GetStringResult(interp));

		return(1);
	}

	tclRet = Xvfs_Init(interp);
	if (tclRet != TCL_OK) {
		fprintf(stderr, "Xvfs_Init failed: %s\n", Tcl_GetStringResult(interp));

		return(1);
	}
	tclRet = Xvfs_example_Init(interp);
	if (tclRet != TCL_OK) {
		fprintf(stderr, "Xvfs_example_Init failed: %s\n", Tcl_GetStringResult(interp));

		return(1);
	}

	Tcl_Eval(interp, "proc benchmark args { glob -directory //xvfs:/example * }");
	for (try = 0; try < profileBenchmark; try++) {
		Tcl_Eval(interp, "benchmark");

#ifdef XVFS_PROFILE_TESTS
	}

	Tcl_Eval(interp, "proc exit args {}");
	Tcl_Eval(interp, "proc puts args {}");
	Tcl_SetVar(interp, "argv", "-verbose {}", 0);
	for (try = 0; try < 1000; try++) {
	for (try = 0; try < profileTests; try++) {
		Tcl_EvalFile(interp, "//xvfs:/example/main.tcl");
	}
#else
	for (try = 0; try < 1000000; try++) {
		Tcl_Eval(interp, "benchmark");
	}
#endif

	return(0);
}