We used EXPLAIN QUERY PLAN and detected differences between machines.
Matthias found out that faster machines (DRAM server) use the "ranges_index"
for the "Transactions" table. But other machines (our laptops) use the primary
key defined for that table. Removing the primary key the performance issues
were solved.
IMPORTANT:
Though the mechanism to choose the proper metrics according to the bankwise
logic configuraiton is working fine, we need to check if all calculations are
correct. For exmple: check if the calculation of the total time in SREFB is
correct.
Lines which start with '#' will be ignored by trace players.
From IP_GFRBM.pdf:
STL syntax supports only single line comments. A single-line comment is
everything on a line following but not including the first occurrence of the #
character and up to, but not including the end of the line. For example:
# this is a comment
Comments should always begin in a new line.
Created an extra file memUtil.py which contains utilities that can be imported
and used by other script files.
The idea is to improve maintainability by avoiding duplicate code.
The following metrics will be generated:
- time in PDNA in ns
- time in PDNA percent
- time in PDNP in ns
- time in PDNP percent
- time in SREF in ns
- time in SREF percent
- time in power down states in ns
- time in power down states percent
Other changes:
Avoid a crash that was generated for channels which no accesses performed by
trace players. Now a message will be displayed explained that no metrics were
generated due to the lack of accesses.
These changes are a step forward in the direction of the PEP8 style guide for
python code. They do not affect functionality itself.
See also:
https://www.python.org/dev/peps/pep-0008/
These changes are a step forward in the direction of the PEP8 style guide for
python code. They do not affect functionality itself.
See also:
https://www.python.org/dev/peps/pep-0008/
Created classes to get easily memory specifications and memory configurations.
Each class handles the peculiarities of the related XML file.
Other changes:
- git ignore file updated.
In order to avoid the gcc warning" 'will be initialized after' we need to make
sure the members appear in the initializer list in the same order as they
appear in the class.
Other improvements:
- Added option to save changes to databases (e.g., save comments).
- When a database file changes on disk (overwritten by a rerun of DRAMSys or
changed by any external agent) the action save changes to DB is disabled,
since it is not safe anymore.
- Implemented menu options coherence. All actions except for "Open" (reload,
close, save, test and metrics) remain disabled until some database file is
open.
- Created a shortcut to close all: CTRL+Q
- Status messages containing a timestamp are displayed in the lower left
corner of the traceAnalyzer window when:
- User reloads the databases.
- User saves changes to the databases.
- Any of the open database files has changed on disk.
Phases are recorded by the TlmRecorder by calling the following method:
recordPhase(payload, phase, recordingTime)
In the current design we can find calls to this method in Dram.h, Controller.h
and Arbiter.h.
Inside the TlmRecorder (TlmRecorder.cpp) some phases are terminating phases.
Terminating phases recorded by the controller:
END_RESP (end response)
END_REFA (refresh all)
END_REFB (refresh Bank)
Example:
The DRAM receives transaction with phase BEGIN_REFA and sends to the
controller transaction with phase END_REFA.
IMPORTANT: the DRAM adds the execution time of the related command
(Command::AutoRefresh) to the delay.
The controller calls recordPhase() and the phase this triggers the termination
of the related phase in the TlmRecorder.
Terminating phases recorded by the DRAM:
END_PDNA (end power down active)
END_PDNP (end precharge powerdown)
END_SREF (end self-refresh)
END_PDNAB (end power down active bank)
END_PDNPB (end precharge powerdown bank)
END_SREFB (end self-refresh bank)
These phases were being recorded without taking into consideration the
execution time of the associated command (Command::PDNAX, Command::PDNPX and
Command::SREFX). All of them take one clock cycle to execute.
As result the phases were reduced by 1 clock cycle in the traceAnalyzer
output.
The data structure that stores last commands is initialized with NOPs. So it
is possible to get a NOP as return of state.getLastScheduledCommand(bank).