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


xvfs-create-standalone.new
xvfs-create-standalone
xvfs-test-coverage
__test__.tcl
sdks
xvfs_random.so
xvfs_synthetic.so

profile
oprofile_data









>
|

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




do-profile: profile Makefile
	rm -rf oprofile_data

	LD_LIBRARY_PATH='$(shell pwd):$(LD_LIBRARY_PATH)' operf ./profile
	opreport





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







|
<
<
|

>
>
>
|

>
|

>
>
>
>














|
>
>







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-bare: profile.c example.c xvfs-core.h xvfs-core.c Makefile


	$(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-bare profile-gperf Makefile
	rm -rf oprofile_data
	rm -f gmon.out callgrind.out
	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-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
#include <tcl.h>
#include <stdio.h>





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 tclRet;
	int try;












	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 * }");



#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++) {
		Tcl_EvalFile(interp, "//xvfs:/example/main.tcl");
	}
#else
	for (try = 0; try < 1000000; try++) {
		Tcl_Eval(interp, "benchmark");
	}
#endif

	return(0);
}


>

>
>
>
|
<


>


>
>
>
>
>
>
>
>
>
>
>















<
<
<
<
<
<








>
>
|
|



|


<
<
<
<
<



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"


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_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");
	}

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






	return(0);
}