BW utilization

35 views
Skip to first unread message

Marios Avgeris

unread,
Mar 19, 2019, 6:52:54 AM3/19/19
to CloudSim Plus
Hello to everyone, 

recently I have been messing around with the cloudlets' bandwidth utilization but I find it hard to understand how it actually works. Let me explain.

What I am trying to do is create a number of cloudlets at a certain simulation time, let's say at time 0, that will somehow compete for the available bandwidth of the VM that they will be executed on. The behaviour that I was expecting is that if at least one of the cloudlets has its UitlizationModelBw set to UtilizationModelFull(), then the other cloudlets would have to stall until it finishes its transmission(?), simulating a bandwidth bottleneck.

However, I am not able to create this kind of effect even if I set every cloudlets' UitlizationModelBw to UtilizationModelFull(). It just seems that bandwidth utilization model doesn't affect execution time at all.

Probably there is something wrong with the way I am trying to achieve this, could you guide me through?

Regards,
Marios

Eduardo de Lucena Falcao

unread,
Mar 19, 2019, 8:42:34 AM3/19/19
to clouds...@googlegroups.com
From what I know, what affects the execution times is the number of Instructions to be processed and how the processing elements are allocated to VMs and to Cloudlets.
I haven't seen the bandwidth interfering in such time. Maybe the simulator considers this value to transfer the cloudlet from the Broker to the VM itself.

However, I've built something similar for the IOPS resource. An approach that I believe you could follow to consider bandwidth on the execution time.
First, Cloudlet should have an information of how much data it should consume to finish (for instance, 1TB).
Then, you could augment the function "updateProcessing" in CloudletSchedulerAbstract so that in each "simulation turn" (I believe it's scheduling time) the cloudlet consumes some info according to the amount of bandwidth it was allocated to it.

These are just some insight in how I think your problem could be addressed.
Hope you manage to achieve it.
 
Best regards

--
If you received an answer that worked for you, please be kind and reply to let everybody knows it worked.
http://cloudsimplus.org
---
You received this message because you are subscribed to the Google Groups "CloudSim Plus" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cloudsim-plu...@googlegroups.com.
To post to this group, send email to clouds...@googlegroups.com.
Visit this group at https://groups.google.com/group/cloudsim-plus.
To view this discussion on the web visit https://groups.google.com/d/msgid/cloudsim-plus/08ccc83a-9fef-43a3-9e58-fc5df6f3f521%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


--
Eduardo de Lucena Falcão

Manoel Campos

unread,
Mar 19, 2019, 9:46:06 AM3/19/19
to clouds...@googlegroups.com

Hello Marios

The behaviour that I was expecting is that if at least one of the cloudlets has its UitlizationModelBw set to UtilizationModelFull(), then the other cloudlets would have to stall until it finishes its transmission(?), simulating a bandwidth bottleneck.
However, I am not able to create this kind of effect even if I set every cloudlets' UitlizationModelBw to UtilizationModelFull().

That would be the expected behavior, but it doesn't work that way. This is a known issue inherited from CloudSim that was never included in the issues list. As I've been working with lots of other issues and features, I've never had time to think about that one.
At least, I included a WARN message showing when a Cloudlet tries to use more resources than it is available. 
You can filter WARN level messages using Log.setLevel(ch.qos.logback.classic.Level.WARN);
 
It just seems that bandwidth utilization model doesn't affect execution time at all.
No, it doesn't, but it should.
The network module has such a feature. Cloudlets can send and receive packets from each other.
Check the examples available at org.cloudbus.cloudsim.examples.network.applications package.

But as you'll see, the examples are more complex and require more effort to design.
You have to define the traffic as the number of packets to be transferred.

Using a UtilizationModel for BW we can abstract this low-level packet communication as you wish.
But in this case, currently you have to make sure one Cloudlet doesn't require more BW then it's available.

If you open an issue explaining what you just did here, 
I can take a look to check the complexity to fix it.
If you have any proposed solution, it would be great if you describe it in the issue.

It just crossed my mind that the Cloudlet execution (the FinishedLengthSoFar attribute)
could be updated only when the Cloudlet was able to use the required BW.
This will delay its termination.

Manoel Campos

unread,
Mar 19, 2019, 10:12:34 AM3/19/19
to clouds...@googlegroups.com
Hello Eduardo,

Maybe the simulator considers this value to transfer the cloudlet from the Broker to the VM itself.
It's not used that way. In fact, the time to transfer the Cloudlet to the VM is not considered.
On the other hand, if your Cloudlet has a list of required files, the time to transfer these files will.
If you have a list of HarddriveStorage attached to the DatacenterStorage, the time to transfer the files are computed based on the storage devices' speed. If you have a list of SanStorage, the network delay is included in the transfer time.

Some critical issues related to this were fixed in CloudSim Plus, such as #5 and #138.

However, I've built something similar for the IOPS resource. An approach that I believe you could follow to consider bandwidth on the execution time.
First, Cloudlet should have an information of how much data it should consume to finish (for instance, 1TB).
Then, you could augment the function "updateProcessing" in CloudletSchedulerAbstract so that in each "simulation turn" (I believe it's scheduling time) the cloudlet consumes some info according to the amount of bandwidth it was allocated to it.
 
I usully advise users to avoid changing framework classes. That is a bad practice since you may end up with a customized version that is incompatible with the original one. This way, you may struggle to update your fork to the latest official version.
Furthermore, you may be working with something useful to the community that could be shared.

So, if you are willing to contribute your changes to the project, you could discuss them here (or in private if you prefer)
so that we could try to find a solution that will be flexible enough to be included in CloudSim Plus code.

You help the community and make sure you'll be able to update your fork at any time, effortlessly.

Manoel Campos

unread,
Mar 19, 2019, 8:25:23 PM3/19/19
to clouds...@googlegroups.com
Marios,

I was thinking about this issue and it's more complex than it seems.

I just reviewed some parts of the network module and found out that the BW UtilizationModel (BW UM) is not used for anything.
We create a Host with a defined BW capacity. This capacity is used when placing or migrating VMs.

The Cloudlet's BW UM attribute should define the amount of BW the Cloudlet is expected to use along the time.
Different from local resources such as CPU or RAM, in order to really use BW, we would need to send packets
through the network. The way the BW UM is being used is as if BW was a local resource (such as RAM or CPU).
So, I don't think network simulations using this Cloudlet attribute will really have any valid results.
They are not sending packets to simulate network traffic, delay and possibly congestion.

Despite the VM BW is supposed to be used for limiting the amount of BW a VM can use,
that value is just being used when placing VMs.
After the placement, if you are using the network module (NetworkHost, NetworkVm, NetworkCloudlet),
the VM BW is not considered for anything else. 
If a VM try to send packets that require more BW than the VM is allowed to use, it will use 
(as long as the Host has available BW).

The Cloudlet BW UM would be used to limit the amount of BW a Cloudlet is allowed to consume
along the time. But if you are going to limit that, it would be a static value, in the same
way as the VM BW or Host BW. However, the values returned by a UM may be dynamic. 

Therefore, currently, the Cloudlet BW UM doesn't make sense.

If you are using the NetworkHost that is connected to an EdgeSwitch, the Host BW is the 
bandwidth of that Switch. This way, the  Host BW attribute is not used to define
the delay to transfer packets, but the EdgeSwitch BW.
Having these two different ways to get a BW for a Host is quite confusing.

This network module in CloudSim is totally buggy. I've been fixing lots of issues, namely:
5, 13, 19, 45, 49, 57, 126 (especially related to your scenario), 132, 137, 138.
But this is a more complex issue that may require structural changes.

Manoel Campos da Silva Filho Software Engineer

Computer Science and Engineering Ph.D. Student at University of Beira Interior (Portugal)

Professor at Federal Institute of Education, Science and Technology of Tocantins (Brazil)

http://manoelcampos.com


 about.me

Marios Avgeris

unread,
Mar 22, 2019, 6:35:03 AM3/22/19
to CloudSim Plus
Hi Manoel, Eduardo

thank you for your replies, I see now that it's really confusing to manipulate bandwidth as I wish.

However, do you think there is any other simple solution/bypass to achieve the bottleneck behaviour that I want to simulate? 

Regards,
--
Marios

Manoel Campos

unread,
Mar 22, 2019, 5:49:45 PM3/22/19
to clouds...@googlegroups.com
If you want a Cloudlet to wait until it sends or receives some network packets, the examples I mentioned do that.
But you may not be able to simulate traffic shaping.

If you update your fork and look at the NetworkHost.sendPacketsToExternalVms() method,
you'll see that a set of packets is sent using all the available switch bandwidth
(the transfer delay is computed based on the packets size and bandwidth capacity).
It doesn't consider any concurrent traffic.
This way, if you try to send more traffic than your switch has capacity to deal with,
probably there will be no additional delay due to network congestion.

You could implement an experiment to confirm this issue.
If you do that, please let us know the results and possibly share the code.

Manoel Campos da Silva Filho Software Engineer

Computer Science and Engineering Ph.D. Student at University of Beira Interior (Portugal)

Professor at Federal Institute of Education, Science and Technology of Tocantins (Brazil)

http://manoelcampos.com


 about.me

--
If you received an answer that worked for you, please be kind and reply to let everybody knows it worked.
http://cloudsimplus.org
---
You received this message because you are subscribed to the Google Groups "CloudSim Plus" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cloudsim-plu...@googlegroups.com.
To post to this group, send email to clouds...@googlegroups.com.
Visit this group at https://groups.google.com/group/cloudsim-plus.

Manoel Campos

unread,
Mar 30, 2019, 8:42:15 AM3/30/19
to clouds...@googlegroups.com
Hello Marios,
You may want to check this issue (that is now fixed): https://github.com/manoelcampos/cloudsim-plus/issues/171

Manoel Campos da Silva Filho Software Engineer

Computer Science and Engineering Ph.D. Student at University of Beira Interior (Portugal)

Professor at Federal Institute of Education, Science and Technology of Tocantins (Brazil)

http://manoelcampos.com


 about.me

Reply all
Reply to author
Forward
0 new messages