Skip to content

yuchengml/yusim

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Yusim

Yusim is a simple simulator based on Disksim program. We purposed to invoke two Disksim programs with two sub-processes to implement hybrid storage system.

In current version, we construct two sims(SSDsim and HDDsim) which respectively serves 'only one' request and follow a simple simulation progress(Wait/Serve/Wait/.../Shutdown). After each service, the sim returns a empty request(no other info.) with response time. That is Yusim.

Author: Yu-Cheng Yu (g1677321@gmail.com)

Feature

Simulator

  • Follow Disksim simulation included bus, controller and storage device.
  • Hybrid communication between SSD(considered as HDD-cache) and HDD should be concerned.
  • Replaceable caching policy.
  • Replaceable I/O request scheduler.
  • Support multi-user requests and system-defined user weights.
  • Block-level request delivery
  • Various experiment data, e.g., Response time, Throughtput, Hit rate and User info..

Policy

  • I/O Scheduler: Credit-based scheduler.
  • SSD Caching/Replacement Policy: Prize Caching.
  • SSD Caching Space: Logical Partition.

Repository contents

/src

  1. yu_parameter.h: System-defined parameters. Modification should pass self-validation.
  2. yusim.c, .h: Main interface.
  3. yu_syssim.c, .h: Simulator's behaviors.
  4. yu_ipc.c, .h: Use message queue in "Inter-Process Communication(IPC)".
  5. yu_structure.c, .h: Define system structure, e.g., User queue.
  6. yu_cache.c, .h: SSD cacahe management.
  7. yu_prize.c, .h: Prize management.
  8. yu_credit.c, .h: Credit distribution.
  9. yu_statistics.c, .h: User Statistics.
  10. yu_debug.c, .h: -
  11. Makefile: Modified Disksim version.
  12. yusim_batch.sh Batch execution.

Trace Format

[User_Weight_1] [User_Weight_2] [User_Weight_3] ...
[Request_Arrival_Time] [Device_number] [Block_Number] [Request_Size] [Request_Flag] [User_Number]
[Request_Arrival_Time] [Device_number] [Block_Number] [Request_Size] [Request_Flag] [User_Number]
[Request_Arrival_Time] [Device_number] [Block_Number] [Request_Size] [Request_Flag] [User_Number]
...

  1. [User_Weight] : An unsigned integer as "User Weight".

  2. (Disksim-defined) [Request_Arrival_Time] : Double-precision milliseconds.

  3. (Disksim-defined) [Device_number] : An unsigned integer as specified device. Consider multi-disk in one device parameter file(e.g., RAID).

  4. (Disksim-defined) [Block_Number] : An unsigned long as the start of accessed block. Due to address alignment for SSD, it must be a valid number.

  5. (Disksim-defined) [Request_Size] : An unsigned integer as the consecutive length. Due to address alignment for SSD, it must be a valid number.

  6. (Disksim-defined) [Request_Flag] : '1' assigned as "Read" request and '0' assigned as "Write" request.

  7. [User_Number] : An unsigned integer user number from '1' to 'N'.

Get started

1. Download Disksim4.0 & Build it!

2. Clone Yusim

3. Paste all files in /src into disksim/src

About

Using Disksims with two sub-processes to implement hybrid storage system

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors