Class: SISFC::VM

Inherits:
Object
  • Object
show all
Includes:
Logging
Defined in:
lib/sisfc/vm.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Logging

included, logger, #logger

Constructor Details

#initialize(vmid, dc_id, size, service_time_distribution, opts = {}) ⇒ VM

Returns a new instance of VM.



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/sisfc/vm.rb', line 22

def initialize(vmid, dc_id, size, service_time_distribution, opts={})
  @vmid             = vmid
  @dcid             = dc_id
  @size             = size
  @service_times_rv = ERV::RandomVariable.new(service_time_distribution[@size])

  # initialize request queue and related tracking information
  @busy          = false
  @request_queue = []

  @trace = opts[:trace] ? true : false
  @notes = opts[:notes]

  # @request_queue_info          = []
  # @request_currently_servicing = nil
end

Instance Attribute Details

#dc_idObject (readonly)

setup readable/accessible attributes



20
21
22
# File 'lib/sisfc/vm.rb', line 20

def dc_id
  @dc_id
end

#sizeObject (readonly)

setup readable/accessible attributes



20
21
22
# File 'lib/sisfc/vm.rb', line 20

def size
  @size
end

#vmidObject (readonly)

setup readable/accessible attributes



20
21
22
# File 'lib/sisfc/vm.rb', line 20

def vmid
  @vmid
end

Instance Method Details

#new_request(sim, r, time) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/sisfc/vm.rb', line 39

def new_request(sim, r, time)
  # put request w/ metadata at the end of the queue
  @request_queue << RequestInfo.new(r, @service_times_rv.next, time)

  if @trace
    @request_queue.each_cons(2) do |x,y|
      if y[2] < x[2]
        raise "Inconsistent ordering in request_queue!!!!"
      end
    end
  end

  # update queue size tracking information
  # @request_queue_info << { size: @request_queue.size, time: time }
  if @trace and @request_queue.size % 100 == 0
    logger.info "VM #{@vmid} with #{@notes} has #{@request_queue.size} requests in queue at time #{time} and is " +
       (@busy ? "busy" : "not busy")
  end

  try_servicing_new_request(sim, time) unless @busy
end

#request_finished(sim, time) ⇒ Object



61
62
63
64
# File 'lib/sisfc/vm.rb', line 61

def request_finished(sim, time)
  @busy = false
  try_servicing_new_request(sim, time)
end