167 lines
4.8 KiB
Java
167 lines
4.8 KiB
Java
/*
|
|
* 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;
|
|
}
|
|
|
|
}
|