diff options
| author | Matthijs Bijman <matthijs@bijman.org> | 2017-02-16 22:06:09 +0100 |
|---|---|---|
| committer | Matthijs Bijman <matthijs@bijman.org> | 2017-02-16 22:06:09 +0100 |
| commit | e0b305fd1d845cba1b11578722f88adb193f756e (patch) | |
| tree | 90440eafff0f2b72571eee8a9b9c644d39ae4b75 /Simulator | |
| parent | 6fa9f879a5dab29cdf481e70b6f303caf69bd76f (diff) | |
Update simulator to work with new db schema
The new schema removes the queued_simulation_section table and
introduces the state and last_simulated_tick columns to the experiments
table.
Diffstat (limited to 'Simulator')
| -rw-r--r-- | Simulator/Simulator.vcxproj | 18 | ||||
| -rw-r--r-- | Simulator/Simulator.vcxproj.filters | 93 | ||||
| -rw-r--r-- | Simulator/include/Simulator.h | 1 | ||||
| -rw-r--r-- | Simulator/include/database/Database.h | 4 | ||||
| -rw-r--r-- | Simulator/include/database/Queries.h | 15 | ||||
| -rw-r--r-- | Simulator/src/database/Database.cpp | 17 |
6 files changed, 92 insertions, 56 deletions
diff --git a/Simulator/Simulator.vcxproj b/Simulator/Simulator.vcxproj index 8f852ecf..aba44dba 100644 --- a/Simulator/Simulator.vcxproj +++ b/Simulator/Simulator.vcxproj @@ -30,7 +30,7 @@ <ProjectGuid>{7CF8EE44-A898-46CC-9F6C-1245D1F893BF}</ProjectGuid> <RootNamespace>Simulator</RootNamespace> <ProjectName>Simulator</ProjectName> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + <WindowsTargetPlatformVersion>10.0.14393.0</WindowsTargetPlatformVersion> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> @@ -109,7 +109,7 @@ <ClCompile> <WarningLevel>Level3</WarningLevel> <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(SolutionDir)external\sqlite3;$(ProjectDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(SolutionDir)opendc-simulator-dependencies\sqlite;$(ProjectDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> </ClCompile> <Link> <GenerateDebugInformation>true</GenerateDebugInformation> @@ -121,12 +121,12 @@ <ClCompile> <WarningLevel>Level3</WarningLevel> <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(SolutionDir)external\sqlite3;$(ProjectDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(SolutionDir)opendc-simulator-dependencies\sqlite;$(ProjectDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> </ClCompile> <Link> <GenerateDebugInformation>true</GenerateDebugInformation> <AdditionalDependencies>sqlite3.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>$(SolutionDir)external\sqlite3;</AdditionalLibraryDirectories> + <AdditionalLibraryDirectories>$(SolutionDir)opendc-simulator-dependencies\sqlite</AdditionalLibraryDirectories> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> @@ -135,7 +135,7 @@ <Optimization>MaxSpeed</Optimization> <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> - <AdditionalIncludeDirectories>$(SolutionDir)external\sqlite3;$(ProjectDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(SolutionDir)opendc-simulator-dependencies\sqlite;$(ProjectDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> </ClCompile> <Link> <GenerateDebugInformation>true</GenerateDebugInformation> @@ -151,14 +151,14 @@ <Optimization>MaxSpeed</Optimization> <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> - <AdditionalIncludeDirectories>$(SolutionDir)external\sqlite3;$(ProjectDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(SolutionDir)opendc-simulator-dependencies\sqlite;$(ProjectDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> </ClCompile> <Link> <GenerateDebugInformation>true</GenerateDebugInformation> <EnableCOMDATFolding>true</EnableCOMDATFolding> <OptimizeReferences>true</OptimizeReferences> <AdditionalDependencies>sqlite3.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>$(SolutionDir)external\sqlite3;</AdditionalLibraryDirectories> + <AdditionalLibraryDirectories>$(SolutionDir)opendc-simulator-dependencies\sqlite</AdditionalLibraryDirectories> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LibGen|x64'"> @@ -199,7 +199,7 @@ <AdditionalLibraryDirectories>$(SolutionDir)external\sqlite3;</AdditionalLibraryDirectories> </Link> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)external\sqlite3;$(SolutionDir)external\gtest;$(ProjectDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(SolutionDir)opendc-simulator-dependencies\sqlite;$(SolutionDir)external\gtest;$(ProjectDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> </ClCompile> </ItemDefinitionGroup> @@ -209,7 +209,7 @@ <AdditionalLibraryDirectories>$(SolutionDir)external\sqlite3;</AdditionalLibraryDirectories> </Link> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)external\sqlite3;$(SolutionDir)external\gtest;$(ProjectDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(SolutionDir)opendc-simulator-dependencies\sqlite;$(SolutionDir)external\gtest;$(ProjectDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> </ClCompile> </ItemDefinitionGroup> diff --git a/Simulator/Simulator.vcxproj.filters b/Simulator/Simulator.vcxproj.filters index 62867ed7..cd94ae30 100644 --- a/Simulator/Simulator.vcxproj.filters +++ b/Simulator/Simulator.vcxproj.filters @@ -21,9 +21,6 @@ <Filter Include="Source Files\Database"> <UniqueIdentifier>{d9c26546-3166-46e6-ac93-5559d5ab32b8}</UniqueIdentifier> </Filter> - <Filter Include="Header Files\Math"> - <UniqueIdentifier>{0717ffeb-69ab-4832-904c-3041b3b86ac5}</UniqueIdentifier> - </Filter> <Filter Include="Source Files\Simulation\Workloads"> <UniqueIdentifier>{f9450bee-6bd3-4870-ae67-d4e1a5c5c800}</UniqueIdentifier> </Filter> @@ -36,6 +33,18 @@ <Filter Include="Header Files\Simulation\Workloads"> <UniqueIdentifier>{ec05c495-e179-4db3-b21c-fd2292482f95}</UniqueIdentifier> </Filter> + <Filter Include="Source Files\Modeling\Machine"> + <UniqueIdentifier>{f691ce9e-8a17-4f0a-b661-7e8734ce37b6}</UniqueIdentifier> + </Filter> + <Filter Include="Header Files\Simulation\Schedulers"> + <UniqueIdentifier>{a5b36e44-8d0c-477b-a833-55467dc0cad1}</UniqueIdentifier> + </Filter> + <Filter Include="Header Files\Simulation\History"> + <UniqueIdentifier>{70aa99d9-c949-42b9-905a-6fcb59c259a5}</UniqueIdentifier> + </Filter> + <Filter Include="Header Files\Modeling\Machine"> + <UniqueIdentifier>{0bbea619-1ef1-4e50-b32e-fe9a4099a23a}</UniqueIdentifier> + </Filter> </ItemGroup> <ItemGroup> <ClCompile Include="src\database\Database.cpp"> @@ -50,29 +59,26 @@ <ClCompile Include="src\modeling\Entity.cpp"> <Filter>Source Files\Modeling</Filter> </ClCompile> - <ClCompile Include="src\modeling\machine\CPU.cpp"> + <ClCompile Include="src\Simulator.cpp"> <Filter>Source Files</Filter> </ClCompile> - <ClCompile Include="src\modeling\machine\Machine.cpp"> - <Filter>Source Files\Modeling</Filter> + <ClCompile Include="src\simulation\workloads\WorkloadPool.cpp"> + <Filter>Source Files\Simulation\Workloads</Filter> </ClCompile> - <ClCompile Include="src\modeling\machine\GPU.cpp"> - <Filter>Source Files</Filter> + <ClCompile Include="src\modeling\machine\Machine.cpp"> + <Filter>Source Files\Modeling\Machine</Filter> </ClCompile> - <ClCompile Include="src\simulation\workloads\WorkloadPool.cpp"> - <Filter>Source Files</Filter> + <ClCompile Include="src\modeling\machine\CPU.cpp"> + <Filter>Source Files\Modeling\Machine</Filter> </ClCompile> - <ClCompile Include="src\Simulator.cpp"> - <Filter>Source Files\Simulation</Filter> + <ClCompile Include="src\modeling\machine\GPU.cpp"> + <Filter>Source Files\Modeling\Machine</Filter> </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="include\database\Database.h"> <Filter>Header Files\Database</Filter> </ClInclude> - <ClInclude Include="include\Simulator.h"> - <Filter>Header Files\Simulation</Filter> - </ClInclude> <ClInclude Include="include\simulation\workloads\Workload.h"> <Filter>Header Files\Simulation\Workloads</Filter> </ClInclude> @@ -91,62 +97,65 @@ <ClInclude Include="include\modeling\Datacenter.h"> <Filter>Header Files\Modeling</Filter> </ClInclude> - <ClInclude Include="include\modeling\ModelingTypes.h"> - <Filter>Header Files\Modeling</Filter> - </ClInclude> <ClInclude Include="include\modeling\Room.h"> <Filter>Header Files\Modeling</Filter> </ClInclude> <ClInclude Include="include\modeling\TypeIndex.h"> <Filter>Header Files\Modeling</Filter> </ClInclude> - <ClInclude Include="include\modeling\machine\CPU.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="include\modeling\machine\Machine.h"> - <Filter>Header Files\Modeling</Filter> - </ClInclude> <ClInclude Include="include\modeling\Entity.h"> <Filter>Header Files\Modeling</Filter> </ClInclude> <ClInclude Include="include\modeling\Rack.h"> <Filter>Header Files\Modeling</Filter> </ClInclude> - <ClInclude Include="include\modeling\machine\GPU.h"> - <Filter>Header Files</Filter> + <ClInclude Include="include\simulation\Section.h"> + <Filter>Header Files\Simulation</Filter> </ClInclude> - <ClInclude Include="include\simulation\workloads\WorkloadPool.h"> + <ClInclude Include="include\Simulator.h"> <Filter>Header Files</Filter> </ClInclude> - <ClInclude Include="include\simulation\schedulers\FirstInFirstOutScheduler.h"> - <Filter>Header Files</Filter> + <ClInclude Include="include\simulation\Path.h"> + <Filter>Header Files\Simulation</Filter> </ClInclude> - <ClInclude Include="include\simulation\schedulers\Scheduler.h"> - <Filter>Header Files\Simulation\Workloads</Filter> + <ClInclude Include="include\simulation\Experiment.h"> + <Filter>Header Files\Simulation</Filter> + </ClInclude> + <ClInclude Include="include\simulation\schedulers\FirstInFirstOutScheduler.h"> + <Filter>Header Files\Simulation\Schedulers</Filter> </ClInclude> <ClInclude Include="include\simulation\schedulers\ShortestRemainingTimeScheduler.h"> - <Filter>Header Files</Filter> + <Filter>Header Files\Simulation\Schedulers</Filter> </ClInclude> - <ClInclude Include="include\simulation\history\SimulationHistory.h"> - <Filter>Header Files\Simulation</Filter> + <ClInclude Include="include\simulation\schedulers\Scheduler.h"> + <Filter>Header Files\Simulation\Schedulers</Filter> </ClInclude> <ClInclude Include="include\simulation\history\History.h"> - <Filter>Header Files</Filter> + <Filter>Header Files\Simulation\History</Filter> </ClInclude> <ClInclude Include="include\simulation\history\MachineSnapshot.h"> - <Filter>Header Files</Filter> + <Filter>Header Files\Simulation\History</Filter> + </ClInclude> + <ClInclude Include="include\simulation\history\SimulationHistory.h"> + <Filter>Header Files\Simulation\History</Filter> </ClInclude> <ClInclude Include="include\simulation\history\WorkloadSnapshot.h"> + <Filter>Header Files\Simulation\History</Filter> + </ClInclude> + <ClInclude Include="include\simulation\workloads\WorkloadPool.h"> <Filter>Header Files\Simulation\Workloads</Filter> </ClInclude> - <ClInclude Include="include\simulation\Section.h"> - <Filter>Header Files\Simulation</Filter> + <ClInclude Include="include\modeling\machine\CPU.h"> + <Filter>Header Files\Modeling\Machine</Filter> </ClInclude> - <ClInclude Include="include\simulation\Path.h"> - <Filter>Header Files</Filter> + <ClInclude Include="include\modeling\machine\GPU.h"> + <Filter>Header Files\Modeling\Machine</Filter> </ClInclude> - <ClInclude Include="include\simulation\Experiment.h"> - <Filter>Header Files</Filter> + <ClInclude Include="include\modeling\ModelingTypes.h"> + <Filter>Header Files\Modeling</Filter> + </ClInclude> + <ClInclude Include="include\modeling\machine\Machine.h"> + <Filter>Header Files\Modeling\Machine</Filter> </ClInclude> </ItemGroup> </Project>
\ No newline at end of file diff --git a/Simulator/include/Simulator.h b/Simulator/include/Simulator.h index 381639af..1e0aaeb6 100644 --- a/Simulator/include/Simulator.h +++ b/Simulator/include/Simulator.h @@ -72,6 +72,7 @@ namespace Simulation if ((*it).second.isFinished()) { std::cout << "Finished simulation." << std::endl; + database.finishExperiment((*it).first); it = experiments.erase(it); } else diff --git a/Simulator/include/database/Database.h b/Simulator/include/database/Database.h index 6e8bfeef..7f867d6c 100644 --- a/Simulator/include/database/Database.h +++ b/Simulator/include/database/Database.h @@ -49,6 +49,10 @@ namespace Database */ void dequeueExperiment(int id) const; + /* + Marks the given experiment as finished in the database. + */ + void finishExperiment(int id) const; /* Creates a simulation object from a simulation in the database. diff --git a/Simulator/include/database/Queries.h b/Simulator/include/database/Queries.h index 73afc1a1..33e8cdb9 100644 --- a/Simulator/include/database/Queries.h +++ b/Simulator/include/database/Queries.h @@ -6,11 +6,15 @@ namespace Database namespace Queries { Query<int> GET_QUEUED_EXPERIMENTS(std::string(R"query( - SELECT experiment_id FROM queued_experiments; + SELECT id FROM experiments WHERE state LIKE 'QUEUED'; )query")); - Query<> REMOVE_QUEUED_EXPERIMENT(std::string(R"query( - DELETE FROM queued_experiments WHERE experiment_id = $id; + Query<> SET_EXPERIMENT_STATE_SIMULATING(std::string(R"query( + UPDATE experiments SET state='SIMULATING' WHERE id=$id; + )query")); + + Query<> SET_EXPERIMENT_STATE_FINISHED(std::string(R"query( + UPDATE experiments SET state='FINISHED' WHERE id=$id; )query")); Query<int, int, int, int, std::string, std::string> GET_EXPERIMENT_BY_ID(std::string(R"query( @@ -25,7 +29,10 @@ namespace Database SELECT id, path_id, datacenter_id, start_tick FROM sections WHERE path_id = $id; )query")); - + Query<> WRITE_EXPERIMENT_LAST_SIMULATED_TICK(std::string(R"query( + UPDATE experiments SET last_simulated_tick = $val WHERE id = $id; + )query")); + /* Returns the type of the scheduler of the given simulation section. Returns: <std::string : scheduler_name> diff --git a/Simulator/src/database/Database.cpp b/Simulator/src/database/Database.cpp index bb76abda..b953bc73 100644 --- a/Simulator/src/database/Database.cpp +++ b/Simulator/src/database/Database.cpp @@ -76,6 +76,12 @@ namespace Database }); history.clearHistory(); + + uint32_t lastSimulatedTick = experiment.getCurrentTick() - 1; + QueryExecuter<> writeLastSimulatedTick(db); + writeLastSimulatedTick.setQuery(Queries::WRITE_EXPERIMENT_LAST_SIMULATED_TICK) + .bindParams<int, int>(lastSimulatedTick, experiment.getId()) + .executeOnce(); } int Database::pollQueuedExperiments() const @@ -91,11 +97,20 @@ namespace Database void Database::dequeueExperiment(int experimentId) const { QueryExecuter<> q(db); - q.setQuery(Queries::REMOVE_QUEUED_EXPERIMENT) + q.setQuery(Queries::SET_EXPERIMENT_STATE_SIMULATING) .bindParams<int>(experimentId) .executeOnce(); } + void Database::finishExperiment(int id) const + { + QueryExecuter<> q(db); + q.setQuery(Queries::SET_EXPERIMENT_STATE_FINISHED) + .bindParams<int>(id) + .executeOnce(); + } + + Simulation::Experiment Database::createExperiment(uint32_t experimentId) { // Retrieves the experiment data by ID |
