Как установить относительную задержку отправки для Cloudlets в CloudSim Plus? - PullRequest
0 голосов
/ 15 марта 2020

Я бы хотел отложить прибытие Клаудлета, чтобы они прибыли позже. Я знаю о setSubmissionDelay(), но я хотел, чтобы задержка отправки не относилась к текущему времени моделирования, как setSubmissionDelay(). Например, если облачко имеет задержку в 5 секунд, оно будет создано именно в это время, а не примерно на 5,10 секунды (0,10 секунды от минимального времени между событиями). Я подумал об использовании прослушивателя для прослушивания и перехвата, когда облачный сервер собирается быть представлен на виртуальную машину, чтобы захватить время в этот момент (вероятно, на .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.

1 Ответ

2 голосов
/ 19 марта 2020

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


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 для получения дополнительной информации.

...