init
This commit is contained in:
166
src/org/cloudbus/cloudsim/SanStorage.java
Normal file
166
src/org/cloudbus/cloudsim/SanStorage.java
Normal file
@@ -0,0 +1,166 @@
|
||||
/*
|
||||
* Title: CloudSim Toolkit
|
||||
* Description: CloudSim (Cloud Simulation) Toolkit for Modeling and Simulation of Clouds
|
||||
* Licence: GPL - http://www.gnu.org/copyleft/gpl.html
|
||||
*
|
||||
* Copyright (c) 2009-2012, The University of Melbourne, Australia
|
||||
*/
|
||||
|
||||
package org.cloudbus.cloudsim;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* SANStorage represents a storage area network composed of a set of harddisks connected in a LAN.
|
||||
* Capacity of individual disks are abstracted, thus only the overall capacity of the SAN is
|
||||
* considered. WARNING: This class is not yet fully functional. Effects of network contention are
|
||||
* not considered in the simulation. So, time for file transfer is underestimated in the presence of
|
||||
* high network load.
|
||||
*
|
||||
* @author Rodrigo N. Calheiros
|
||||
* @since CloudSim Toolkit 1.0
|
||||
*/
|
||||
public class SanStorage extends HarddriveStorage {
|
||||
|
||||
/** The bandwidth. */
|
||||
double bandwidth;
|
||||
|
||||
/** The network latency. */
|
||||
double networkLatency;
|
||||
|
||||
/**
|
||||
* Creates a new SAN with a given capacity, latency, and bandwidth of the network connection.
|
||||
*
|
||||
* @param capacity Storage device capacity
|
||||
* @param bandwidth Network bandwidth
|
||||
* @param networkLatency Network latency
|
||||
* @throws ParameterException when the name and the capacity are not valid
|
||||
*/
|
||||
public SanStorage(double capacity, double bandwidth, double networkLatency) throws ParameterException {
|
||||
super(capacity);
|
||||
this.bandwidth = bandwidth;
|
||||
this.networkLatency = networkLatency;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new SAN with a given capacity, latency, and bandwidth of the network connection.
|
||||
*
|
||||
* @param name the name of the new harddrive storage
|
||||
* @param capacity Storage device capacity
|
||||
* @param bandwidth Network bandwidth
|
||||
* @param networkLatency Network latency
|
||||
* @throws ParameterException when the name and the capacity are not valid
|
||||
*/
|
||||
public SanStorage(String name, double capacity, double bandwidth, double networkLatency)
|
||||
throws ParameterException {
|
||||
super(name, capacity);
|
||||
this.bandwidth = bandwidth;
|
||||
this.networkLatency = networkLatency;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a file for which the space has already been reserved.
|
||||
*
|
||||
* @param file the file to be added
|
||||
* @return the time (in seconds) required to add the file
|
||||
*/
|
||||
@Override
|
||||
public double addReservedFile(File file) {
|
||||
double time = super.addReservedFile(file);
|
||||
time += networkLatency;
|
||||
time += file.getSize() * bandwidth;
|
||||
|
||||
return time;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the maximum transfer rate of the storage in MB/sec.
|
||||
*
|
||||
* @return the maximum transfer rate in MB/sec
|
||||
*/
|
||||
@Override
|
||||
public double getMaxTransferRate() {
|
||||
|
||||
double diskRate = super.getMaxTransferRate();
|
||||
|
||||
// the max transfer rate is the minimum between
|
||||
// the network bandwidth and the disk rate
|
||||
if (diskRate < bandwidth) {
|
||||
return diskRate;
|
||||
}
|
||||
return bandwidth;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a file to the storage.
|
||||
*
|
||||
* @param file the file to be added
|
||||
* @return the time taken (in seconds) for adding the specified file
|
||||
*/
|
||||
@Override
|
||||
public double addFile(File file) {
|
||||
double time = super.addFile(file);
|
||||
|
||||
time += networkLatency;
|
||||
time += file.getSize() * bandwidth;
|
||||
|
||||
return time;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a set of files to the storage. Runs through the list of files and save all of them. The
|
||||
* time taken (in seconds) for adding each file can also be found using
|
||||
* {@link gridsim.datagrid.File#getTransactionTime()}.
|
||||
*
|
||||
* @param list the files to be added
|
||||
* @return the time taken (in seconds) for adding the specified files
|
||||
*/
|
||||
@Override
|
||||
public double addFile(List<File> list) {
|
||||
double result = 0.0;
|
||||
if (list == null || list.size() == 0) {
|
||||
Log.printLine(getName() + ".addFile(): Warning - list is empty.");
|
||||
return result;
|
||||
}
|
||||
|
||||
Iterator<File> it = list.iterator();
|
||||
File file = null;
|
||||
while (it.hasNext()) {
|
||||
file = it.next();
|
||||
result += this.addFile(file); // add each file in the list
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes a file from the storage. The time taken (in seconds) for deleting the file can also
|
||||
* be found using {@link gridsim.datagrid.File#getTransactionTime()}.
|
||||
*
|
||||
* @param fileName the name of the file to be removed
|
||||
* @param file the file which is removed from the storage is returned through this parameter
|
||||
* @return the time taken (in seconds) for deleting the specified file
|
||||
*/
|
||||
@Override
|
||||
public double deleteFile(String fileName, File file) {
|
||||
return this.deleteFile(file);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes a file from the storage. The time taken (in seconds) for deleting the file can also
|
||||
* be found using {@link gridsim.datagrid.File#getTransactionTime()}.
|
||||
*
|
||||
* @param file the file which is removed from the storage is returned through this parameter
|
||||
* @return the time taken (in seconds) for deleting the specified file
|
||||
*/
|
||||
@Override
|
||||
public double deleteFile(File file) {
|
||||
double time = super.deleteFile(file);
|
||||
|
||||
time += networkLatency;
|
||||
time += file.getSize() * bandwidth;
|
||||
|
||||
return time;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user