Как установить неотносительную задержку отправки для Cloudlets в CloudSim Plus?

Я бы хотел отложить прибытие Облачка, чтобы они прибыли позже. Я знаю о setSubmissionDelay(), но мне нужна задержка отправки, которая не связана с текущим временем симуляции, как setSubmissionDelay(). Например, если облачко имеет задержку 5 секунд, оно будет создано именно в это время, а не примерно через 5,10 секунды (0,10 секунды — это минимальное время между событиями). Я думал об использовании слушателя для прослушивания и перехвата, когда облачко собирается быть отправленным на виртуальную машину, чтобы захватить время в этот момент (скорее всего, на 0,10 или какое-то небольшое значение времени), а затем вычесть мое время задержки на это время (текущая задержка облачка - текущее время моделирования = неотносительная задержка отправки).

Проблема в том, что я не могу найти слушателя, который делает это. Глядя на вывод консоли ниже, я думаю, что, возможно, для печати используется прослушиватель или какой-то метод, облачка отправляется раньше, чем это. Если что-то подобное существует, я хотел бы использовать его. Любой доступ к документации или репозиториям, аналогичным целям, будет высоко оценен.

Ссылка: https://github.com/manoelcampos/cloudsim-plus/tree/master/cloudsim-plus/src/main/java/org/cloudbus/cloudsim

[0;39m[34mINFO  0.10: DatacenterBrokerSimple2: Sending Cloudlet 0 to Vm 0 in Host 0/DC 1 with a requested delay of 9 seconds.

person Chigozie A.    schedule 14.03.2020    source источник


Ответы (1)


Вам действительно нужна такая точность? 0,1 секунды - это действительно маленькое значение. В любом случае, вы можете установить для центра обработки данных schedulingInterval минимальный желаемый интервал (например, 1 секунду), а затем использовать onClockTickListener CloudSim Plus для отслеживания времени симуляции и отправки своих облачков, когда захотите. См. фрагмент кода ниже, но у вас нет гарантий, что событие будет запущено именно в то время, которое вы хотите.


public class Example{
    private static final int SCHEDULING_INTERVAL = 1; //in seconds

    public Example(){
       //.......... instantiate simulation objects here

       datacenter0.setSchedulingInterval(SCHEDULING_INTERVAL); 
       simulation.addOnClockTickListener(this::clockTickListener);

       //.......... the rest of the simulation code here
    }

    private void clockTickListener(final EventInfo info) {
        final int seconds = (int)info.getTime();

        if(seconds == 5) {
           //create and submit your cloudlets
        }
    }
}

Проверьте ссылку RandomCloudletsArrivalExample.java для получения дополнительной информации.

person Manoel Campos    schedule 19.03.2020