-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathCHANGELOG
201 lines (126 loc) · 6.62 KB
/
CHANGELOG
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
0.1 - pre3
* First multicore (fixed dual-core) QSIM library to boot Linux and provide
full API with queues and atomic instruction callbacks.
* First draft of documentation.
0.1 - pre4
* Added support for arbitrary numbers of cores.
* Finished documenting the Qsim::QemuCpu class.
* Fixed bug that was causing inter-processor interrupts to be dropped if more
than one was sent, or if the timer interrupt was sent before the IPI was
handled.
* Broken multithreaded support. Needs overhaul inside and outside of QEMU to
prevent race conditions in simulations with large number of processors.
* Started work on the QSIM Trace Machine, qtm, a multithreaded trace generator
for workload analysis.
0.1 - pre5
* Fixed a bug that was causing inocorrect physical addresses to be generated
for instruction callbacks.
* Improved stability; boots and runs benchmark without deadlock every time.
* Gave sample applications, 'hacks', a separate build directory, populated with
symlinks to allow running directly from this directory.
* Introduced "vistrace.cpp", a program for creating visual representations of
memory access patterns.
* Made the temporary file system somewhat more robust. Multiple QSIM instances
can now be run simultaneously in the same working directory. There are still
unlikely-to-be-encountered race conditions with temporary filenames, though.
(see BUGS for details)
0.1 - pre6
* Now successfully boots and runs programs with more than 8 CPUs.
* CPU threads in QTM will now run in parallel. Atomic operations are (must be)
protected by a readers/writer lock. (The atomic operation is the "writer",
all threads not executing atomic operations are the "readers".)
* Ctrl+C now works as expected.
* Added a preliminary debugger, QDB (with its own laundry list of bugs). This
will eventually be spun off as a separate project.
0.1 - pre7
* Fixed a major bug in the initialization of synchronization variables that
caused infrequent lock-ups on start.
* Application start and end magic CPUIDs (0xaaaaaaaa, 0xfa11dead)
* QDB commandline interface started (still *very* alpha).
0.1 - pre8
* Added configurable RAM size.
* Replaced inefficient OS swapcontext with qsim-context.h implementation. This
takes the single-stepping speed from 1.5MIPS to a far more tolerable 6.3MIPS.
* Added return value to interrupt callbacks. They can now return nonzero on
trap instructions to circumvent the normal interrupt handlers. This can be
used to simulate hardware traps in software.
* Added value field to "out" instruction helpers in QEMU. This allows simple
emulation of I/O ports using I/O callbacks.
* Load callbacks now happen before the load takes place, and store callbacks
following the store. This way, the value being loaded can be modified or the
value being stored replaced.
* Added a new callback system to CDomain that allows for chaining of multiple
callbacks, each of which can be an arbitrary class member function.
* Renamed CDomain to OSDomain. "Coherence domain" as a name for this structure
was somewhere between misleading and just plain wrong.
* Fixed 255 CPU limit, finally. Now the limit is based on external software and
hardware constraints.
0.1
* Busybox, Linux, and QEMU are now grabbed from upstream and distributed as
patchsets.
* Added register callbacks
* Added instructon type to instruction callbacks.
* Introduced simplesim simulator back end.
* Re-worked the Linux port.
* Introduced remote/ for distributed operation.
* Introduced qsim-fastforwarder and saved state.
* Introduced qsim-io to transfer files to the guest.
* Removed the benchmarks from the main source directory.
* Fixed a ton of minor issues and bugs.
0.1.1
* Running QSim no longer requires access to the QEMU source directory in order
to open the (unused) PC BIOS image.
* The build process now downloads BusyBox by script (it is no longer included
in the distribution).
* Callbacks setters now return handles, which can be used to un-set callbacks.
* Benchmarks can now be loaded from .tar images through qsim-io. The
QSim::load_file() function in qsim-load.h provides this functionality.
* The benchmarks are no longer part of the main repository, and building kernel
images is no longer a required part of the QSim build process.
0.1.2
* Fixed compiler specific crashes.
* Added script to make tarballs.
* Fixed bug in set_reg() for flags register.
0.1.3
* Re-packaged QSim client as a library, which is installed to $QSIM_PREFIX/lib
by the remote/client/ makefile.
* Makefiles now (mostly) respect $QSIM_PREFIX
0.1.4
* Fixed bug in QSim client; now respects $QSIM_PREFIX.
* The QEMU library is now placed in $QSIM_PREFIX/lib and found relative to
$QSIM_PREFIX/lib (if set) or /usr/local/lib by libqsim.so. This finally
eliminates the need to have a symlink called libqemu.so in the working
directory.
* Added simple zero-run compression to state file save/load functions. The
result is a massive space savings in state files (with 3GB of guest RAM,
files were 3GB, now they're ~28MB).
0.1.5
* Improved multithreaded support in QEMU. The global lock has been replaced
with smaller-grained readers/writer locks interleaved on cache line
boundaries. The locking infrastructure has been moved to a header file,
qsim-lock.h, where it can be further tweaked independently of the QEMU
modifications.
* Server exits when final client disconnects.
* App start and end callbacks can now return nonzero to cause run() to exit
prematurely. Used by load_file to run in blocks of 1000 instructions instead
of advancing one instruction at a time, for a speedup of the initialization
phase of over 5.
* Both Qsim::load_file() and qsim-fastforwarder now run idle guest cores two
orders of magnitude less frequently than active ones. The result is faster
times for both mkstate.sh and load_file().
* Completely rewritten, parallel, coherent version of qcache.
* Now uses optional QSIM_TMP environment variable to locate the temporary
files.
* OSDomain::booted() deprecated in favor of identical function
OSDomain::runnable(); renamed to make its function more apparent.
0.2
* Added sampling profiler "qsim-prof". This provides a low-overhead technique
for obtaining instruction traces of guest applications.
* Added models for cache, DRAM, and CPU beyond what was provided by simplesim.
With these models, QSim could be used as a standalone simulation
infrastructure or a trace generator for further simulation tools.
* Added callback type for translation.
* Multiple OSDomains per process. It is finally possible to run multiple
separate QSim emulators in the same address space.
0.3
* Removed remote QSim support.