Upload
hoangkhanh
View
227
Download
2
Embed Size (px)
Citation preview
Modeling and Simulation of Concurrent Workload
Processing in Cloud-Distributed Enterprise Information
Systems
Alexandru-Florian Antonescu
12, Torsten Braun
2
[email protected], [email protected]
1SAP (Switzerland) Inc.
2University of Bern
Products & Innovation, Research Communication and Distributed Systems (CDS)
Althardstrasse 80, 8105 Regensdorf, Switzerland Neubrückstrasse 10, 3012 Bern, Switzerland
ABSTRACTCloud Computing enables provisioning and distribution ofhighly scalable services in a reliable, on-demand and sustain-able manner. Distributed Enterprise Information Systems(dEIS) are a class of applications with important economicvalue and with strong requirements in terms of performanceand reliability. In order to validate dEIS architectures, sta-bility, scaling and SLA compliance, large testing deploy-ments are necessary, adding complexity to the design andtesting of such systems. To fill this gap, we present and val-idate a methodology for modeling and simulating such com-plex distributed systems using the CloudSim cloud comput-ing simulator, based on measurement data from an actualdistributed system. We present an approach for creatinga performance-based model of a distributed cloud applica-tion using recorded service performance traces. We thenshow how to integrate the created model into CloudSim.We validate the CloudSim simulation model by comparingperformance traces gathered during distributed concurrentexperiments with simulation results using di↵erent VM con-figurations. We demonstrate the usefulness of using a cloudsimulator for modeling properties of real cloud-distributedapplications.
Categories and Subject DescriptorsC.2.4 [Distributed Systems]: Distributed applications
KeywordsCloud Computing; Distributed Applications; PerformanceProfiling; Modelling and Simulation
1. INTRODUCTIONCloud Computing [9] enables provisioning and distribu-
tion of highly scalable services in a reliable, on-demand and
Permission to make digital or hard copies of all or part of this work for
personal or classroom use is granted without fee provided that copies are not
made or distributed for profit or commercial advantage and that copies bear
this notice and the full citation on the first page. Copyrights for components
of this work owned by others than ACM must be honored. Abstracting with
credit is permitted. To copy otherwise, or republish, to post on servers or to
redistribute to lists, requires prior specific permission and/or a fee. Request
permissions from [email protected].
DCC’14 August 18 2014, Chicago, IL, USA
Copyright 2014 ACM 978-1-4503-2992-7/14/08 ...$15.00.
http://dx.doi.org/10.1145/2627566.2627575.
sustainable manner. Often, the applications running in thesedistributed environments are designed to concurrently exe-cute workload, making use of available multi-core comput-ing resources. As example, distributed Enterprise Informa-tion Systems [11] often interact with large-scale distributeddatabases, requiring distributed processing of results comingfrom multiple systems.
In order to validate certain properties of distributed cloudsystems, it is often the case that large-scale hardware test-beds are used for observing the application behavior underconditions similar to those met in production environments.However, getting access to such large, distributed testbedscan be di�cult, and reproducing results is often not possi-ble, due to the use of shared physical computing and net-work resources. This leads to the need of modeling cloudapplications and resources in order to perform simulationsfor testing ”cloud-aware” software management algorithms.Examples of such complex interactions to be modeled andsimulated are cloud infrastructure management [4], or Ser-vice Level Agreement-driven benchmarking of cloud servicesscaling[2].
We extend the work in [2] and [4] by building a simula-tion model for a distributed enterprise information system(dEIS) based on performance measurements gathered in asmall-scale distributed testbed. We show how to analyze andmodel the distributed interactions between the dEIS entitiesin a state-of-the-art cloud simulator. We then perform mul-tiple distributed experiments with varying concurrent work-load. Finally, we compare the experimental results to thesimulation, by running the same workload scenario.
Our main contributions can be summarized as follows. Wepresent an approach for analyzing and structuring monitor-ing information belonging to distributed cloud services inorder to build a model of the distributed application. Weshow how to integrate the application’s performance modelin a cloud simulator, by converting from time-bound serviceperformance indicators to CPU and network resource uti-lization. We describe an approach for increasing the scale ofcloud simulation and for testing the distributed application’sbehavior under di↵erent concurrent workloads.
The rest of our paper is organized as follows. Section 2presents the related work in the field of cloud simulators aswell as modeling and simulation of distributed cloud appli-cations. Section 3 presents the algorithms used for buildingthe simulation models and for modeling a distributed ap-plication in CloudSim. Section 4 presents the evaluation
11
CS LB WK STCreate Session
Submit Request
Select available WK serviceCreate new session
Schedule Request
Submit RequestSend ACK
Send Results
Close SessionSend ACK
Send ACK
Return Session
Schedule Result ProcessingFormat Results
Send Result
Schedule Result ProcessingValidate Response
Get datasourceSchedule Request ExecutionObtain Database Connection
Execute QueryExtract Result
Figure 1: EIS Services Interactions
results, and finally, Section 5 draws conclusions and givesfuture research directions.
2. CLOUD SIMULATORCloudSim [8] positions itself as a cloud simulator for both
applications and infrastructure, as it allows modeling of hard-ware and software cloud resources. Among the modeledphysical entities there are hosts, network links and datacen-ters, while the modeled software entities are virtual machines(VMs), brokers and cloudlets (tasks). The mentioned enti-ties are manipulated using a Java API. The simulator is im-plemented using discrete event communication. CloudSimprovides a wide selection of resource allocation policies forVM-to-host and task-to-VM mapping.
Buyya et al. [5] presented an approach for simulating largescale cloud environments by using CloudSim. While they de-scribed the steps required for simulating a large number ofhosts and network connections, they did not show how toalso model applications using the CloudSim simulator. Ourwork fills this gap by presenting a methodology for simulat-ing a large-scale distributed application.
Garg et al. [7] extend CloudSim with more advancednetwork simulation capabilities. They model the datacen-ter network landscape by introducing switch and networkpacket simulation entities. The authors simulate a networkapplication using four VMs and compare the results to thesimulator, in a similar manner to our approach.
3. PERFORMANCE ANALYSIS AND MOD-ELING OF A DISTRIBUTED SYSTEM
As representative dEIS distributed application we usedthe one described in [1, 2, 3]. The targeted dEIS system iscomposed of four core services: one or more Thin Clients(CS), a Load Balancer (LB), one or more Worker services(WK), and one or more Database Storage services (ST).Each service runs in its own VM and communicates asyn-chronously with the other services using a distributed servicemessaging bus. Fig. 1 presents the interactions between var-ious dEIS services when executing a CS-initiated request.This also shows the breakdown of operations executed ateach service, which serves as the foundation for building asimulation model of dEIS.
0
100
200
10:26 10:28 10:30 10:32 10:34 10:36
mill
iseco
nds (1) Roundtrip to create LB session
2030405060
10:26 10:28 10:30 10:32 10:34 10:36
mill
iseco
nds (2) Roundtrip to send request to WK
0
50
100
150
10:26 10:28 10:30 10:32 10:34 10:36
mill
iseco
nds (3) Scheduling of Resp. Processing
0
5
10
15
10:26 10:28 10:30 10:32 10:34 10:36
mill
iseco
nds (4) Response Processing
20
40
60
10:26 10:28 10:30 10:32 10:34 10:36
Perc
enta
ge
(5) VM CPU Load
707500
710000
712500
715000
10:26 10:28 10:30 10:32 10:34 10:36
KB
ytes
(6) Memory Usage
10000
30000
50000
10:26 10:28 10:30 10:32 10:34 10:36Time
Byt
es
(7) Network bytes read
1000
4500
8000
10:26 10:28 10:30 10:32 10:34 10:36Time
Byt
es
(8) Network bytes written
Figure 2: dEIS Consumer Service Performance In-
dicators
In order to simulate the dEIS application, we first recordedkey performance indicators of dEIS services under constantworkload. We then used these monitoring traces to createthe dEIS’s simulation model composed of a large numberof single requests’ execution measurements. For a given re-quest we measured the round-trip times for the service callsdisplayed in Fig. 1, as well as the durations of the service-local calls.
For building the application performance profile we ap-plied the following algorithm. We instantiated one VM foreach (Consumer) CS, (Load Balancer) LB, (Worker) WKand (Storage) ST services. We initialized the concurrentload with 1 and the benchmark time duration with 10 min-utes. Every 10 milliseconds the number of active requestsar executed by the system was compared to the target load,and if ar was below load, then a number of load�ar CS re-quests would be generated. For each end-to-end request, thefollowing parameters were recorded: round trip durations,service-local operation durations and VM-level performancemetrics (CPU, memory, network, disk). By recording allthese parameters for each distributed request, a performancebenchmark profile was generated under the constant work-load load.
After running the benchmark described above, the dEISperformance profiles for constant concurrent load between1 and max.load will be known and the performance profilewill be generated with all service call round-trip times andservice-local operation durations. This profile will then beused during the simulation, as described later in this section.
In order to build the application’s performance profile thefollowing assumptions were made: (1) load balancing is ap-plied at the LB service and (2) CS requests are indepen-dently executed by the dEIS services. This allows to extendthe performance profile recorded with one VM per dEIS ser-vice to any number of VMs, as the performance of individ-ual services will be influenced only by the level of concurrentworkload and not by the number of running VMs.
3.1 dEIS Performance ProfilingWe analyze performance profiles generated for each dEIS
service while the system was sequentially executing requests
12
0
1
2
3
10:26 10:28 10:30 10:32 10:34 10:36
count
(1) session−create
0.0
0.5
1.0
1.5
2.0
10:26 10:28 10:30 10:32 10:34 10:36
mill
iseco
nds (2) concurrent sessions
20
30
40
10:26 10:28 10:30 10:32 10:34 10:36
Perc
enta
ge
(3) CPU utilization
427000
428000
429000
430000
10:26 10:28 10:30 10:32 10:34 10:36
KB
ytes
(4) memory usage
01000200030004000
10:26 10:28 10:30 10:32 10:34 10:36Time
Byt
es
(5) network read
0
2000
4000
10:26 10:28 10:30 10:32 10:34 10:36Time
Byt
es
(6) network write
Figure 3: dEIS Load Balancer Service Performance
Indicators
40
60
80
10:26 10:28 10:30 10:32 10:34 10:36
mill
iseco
nds
(1) Request Scheduling Duration
10
20
30
40
50
10:26 10:28 10:30 10:32 10:34 10:36
mill
iseco
nds
(2) Roundtrip to send request to ST
0
5
10
10:26 10:28 10:30 10:32 10:34 10:36
mill
iseco
nds
(3) Scheduling of Resp. Processing
5
10
15
20
10:26 10:28 10:30 10:32 10:34 10:36
mill
iseco
nds
(4) Response Processing
21242730
10:26 10:28 10:30 10:32 10:34 10:36Time
mill
iseco
nds (5) Roundtrip to send response to CS
Figure 4: dEIS Worker Service - Application Per-
formance Indicators
for 10 minutes, at a fixed concurrent workload. The physi-cal setup consisted of three servers with Intel(R) Core(TM)2Duo CPU E8400 CPUs, 4GB of memory and 1 Gbps net-work interface. CS and LB VMs were co-located on the sameserver, while WK and ST were each located on a separateserver. A fourth server was used for running validation ex-periments, by using two additional VMs, one VM for theWK service and one VM for the ST service.
In Fig. 2 we show the performance profile of the dEIS CSservice (thin client). Four application metrics were recordedfor the CS service: (1) round-trip time for creating a LBsession and receiving a confirmation acknowledgment, (2)round-trip time for sending a request to the WK service,(3) the time during which the response was queued beforebeing selected for processing, and (4) time for validatingthe response. For the VM performance there were also fourmetrics gathered: (5) VM CPU utilization percentage, (6)memory usage, (7) network bytes read, and (8) networkbytes written. The network bytes read correspond to themessages received from LB (session creation confirmation,around 4KB) and WK (processing result, 10-30KB), andhave a large variance. The CPU utilization has low valuesand is almost constant at around 20%, as expected for a thinclient application.
In Fig. 3 we present the performance profile of the dEIS
1000
1500
10:26 10:28 10:30 10:32 10:34 10:36
Byt
es
(1) Netw. bytes read send req. to ST
0
1000
2000
3000
4000
10:26 10:28 10:30 10:32 10:34 10:36
Byt
es
(2) Netw. bytes written send req. to ST
1000
2000
3000
10:26 10:28 10:30 10:32 10:34 10:36
Byt
es
(3) Netw. bytes read send resp. to CS
10000
20000
30000
40000
10:26 10:28 10:30 10:32 10:34 10:36
Byt
es
(4) Netw. bytes written send resp. to CS
40506070
10:28 10:30 10:32 10:34 10:36Time
(5) VM CPU Load
592000
594000
596000
10:28 10:30 10:32 10:34 10:36Time
KB
ytes
(6) Memory Usage
Figure 5: dEIS Worker Service - VM Performance
Indicators
0.0
2.5
5.0
7.5
10.0
10:26 10:28 10:30 10:32 10:34 10:36
mill
iseco
nds
(1) Scheduling of Request Processing
4
8
12
10:26 10:28 10:30 10:32 10:34 10:36
mill
iseco
nds
(2) Obtain Database Connection
100
200
10:26 10:28 10:30 10:32 10:34 10:36
mill
iseco
nds
(3) Database query execution time
0
3
6
9
10:26 10:28 10:30 10:32 10:34 10:36
mill
iseco
nds
(4) Process SQL Resultset
0
10000
20000
30000
10:26 10:28 10:30 10:32 10:34 10:36Time
byt
es
(5) Database query result size
20
30
40
50
60
10:26 10:28 10:30 10:32 10:34 10:36
mill
iseco
nds
(6) Roundtrip send response to WK
Figure 6: dEIS Storage Service - Application Per-
formance Indicators (Service Related)
LB service. The application metrics recorded are: (1) ses-sion creation time, and (2) number of concurrent sessions.The LB VM metrics are the same as the ones gathered forCS. CPU utilization is also low at around 20%, justifyingco-location of CS and LB VMs. Both network read andwritten bytes have a median of around 2KB and are causedby exchanging small sized monitoring and session creation/confirmation messages.
In Fig. 4 we present the application performance profileof the dEIS WK service. We gather the following monitor-ing information: (1) request scheduling duration - time aCS-request is queued until it is selected for processing, (2)round-trip duration of sending the WK-request to ST ser-vice, (3) ST-response queuing, (4) processing of ST-response,and (5) round-trip time for sending the response back to CSservice and receiving the acknowledgment.
In Fig. 5 we display the WK’s VM performance metrics.CPU utilization has high values because of the additionalcomputing time required for processing the result from ST.Also, the size of the response sent to CS has a large variance(5-30KB), explaining the variance of the result processingtime. Also, this rather large result size variance will influ-ence the variance of the simulation results.
In Fig. 6 we present the ST’s application performancemetrics. The recorded metrics are: (1) time a WK-request is
13
2000
2500
3000
10:26 10:28 10:30 10:32 10:34 10:36
Byt
es
(1) Net. bytes read send resp. to WK
0
10000
20000
30000
10:26 10:28 10:30 10:32 10:34 10:36
Byt
es
(2) Net. bytes written send resp. to WK
0
25
50
75
10:28 10:30 10:32 10:34 10:36Time
Perc
enta
ge
(3) VM CPU Load
1006000
1008000
1010000
10:26 10:28 10:30 10:32 10:34 10:36Time
KB
ytes
(4) Memory Usage
Figure 7: dEIS Storage Service - VM Performance
Indicators (Network, CPU, Memory)
queued until it is selected for processing, (2) time it takes toobtain a database connection for processing the data queries,(3) database query execution time, (4) SQL result set pro-cessing time, (5) size of the result in bytes, and (6) round-trip time for sending the result back to WK.
In Fig. 7 we show the VM performance metrics associatedwith the ST service. Both CPU and memory utilization arehigh due to the large amounts of processing required forretrieving and processing the data from the database.
Finally, in Fig. 8 we present how the various durationsand round-trip times stack up to compose the complete end-to-end time of each chain of requests (CS-WK-ST) and re-sponses (ST-WK-CS). This plot represents the foundationof the simulation model. During the simulation, vertical”slices” (service-local durations and round-trip times) willbe used for simulating CloudSim cloudlets.
3.2 Modeling and SimulationThe performance-profiling traces previously gathered can
be represented as shown in Equation 1. Profileload is amatrix with all measurable time values of applications’ op-erations under concurrent load. RT (Si, Sj) is the round-triptime of a remote service call on service Sj from service Si.
0
100
200
300
400
0 1000 2000Request
Du
rati
on
(m
s)
probeA
B
C
D
E
F
G
H
I
J
K
L
M
N
Figure 8: dEIS Decomposition of System Response
Time
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●●
●
●
●●
●
●●●●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●●●
●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●●
●●●●
●●●●
●●
●●
●●●
●
●●
●●
●●
●
●
●
●
●
●
●●
●●
●●
●●●●
●●
●●
●●
●
●
●●
●●
●●
●●
●●
●●
●●
●●
●●
●●
●●
●●
●
●
●●
●●
●●
●●
●●
●●
●●
●
●
●
●
●
●
●●
●●
●●
●●
●●
●●
●●
●
●
●
●
●
●
●●
●
●●●
●●
●●
●●
●●
●●
●●
●
●
●
●
●●
●●
●●
●●
●●
●●●
●
●
●●●
●●
●●
●●
●●
●●
●●
●●
●●
●●
●●
●●
●●
●
●
●●
●
●
●●
●●
●●
●●
●●
●
●
●●
●●
●●
●●
●●
●●
●●
●●
●●
●
●●●●●
●●●
●
●●
●●
●●
●
●
●●
●●
●
●
●
●
●●
●●
●●
●●
●●
●●
●
●
●
●
●
●
●●
●●
●●
●
●
●●
●●
●●
●●
●●
●●
●
●
●●
●●
●●
●
●
●●
●●
●●
●
●
●●
●
●
●●
●
●●
●
●
●
●●●
●●
●●
●
●
●
●
●
●
●
●●
●●●
●●
●
●
●●
●
●
●
●
●●
●
●
●●
●
●
●●
●
●
●
●
●●
●
●
●
●
●●●●
●
●
●
●
●
●
●●
●●●
●●●
●
●
●
●
●
●
●●
●●
●
●
●●
●
●
●●
●
●
●
●
●
●●●
●●●
●●●
●●
●
●
●●
●●●
●●●
●●
●●
●●
●●
●
●
●●
●●
●
●
●●
●●
●●
●
●●
●
●●
●●
●
●
●
●
●
●
●●●●
●
●
●●
●●
●
●
●●
●
●
●●
●
●●
●●●
●
●
●●
●
●
●●
●●
●●●
●●●
●●
●●
●
●
●●
●
●
●●
●●●
●●●
●●●
●●●
●
●
●
●
●●
●
●
●●
●●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●●
●●
●
●●●
●●
●
●
●●
●
●
●
●
●●
●
●
●
●
●●
●●
●
●
●●
●
●●
●●●
●●
●●
●
●
●
●
●●
●●
●
●
●●
●
●
●●
●
●
●●●
●●●
●●
●●
●
●
●
●
●●
●
●
●●
●
●
●●
●●
●
●
●●●
●●●●
●●
●
●
●●
●
●
●●
●●
●
●
●●
●●
●●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●●●
●
●
●
●
●●●●
●
●
●
●
●●
●
●
●●
●
●●●
●
●
●
●
●
●●●
●
●
●
●
●
●●
●
●
●●●
●
●●
●●●
●
●
●
●
●
●●●
●
●
●●●
●●●
●
●●●
●
●●
●
●
●
●●
●●
●
●
●●
●●
●
●
●
●
●●
●
●
●
●
●
●●●
●
●
●●
●●
●
●
●
●
●
●
●●●
●●●
●
●
●
●
●
●
●
●●●
●●●
●●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●●
●
●
●
●
●
●
●●●●
●●
●
●
●●
●
●
●
●
●
●
●●
●●
●●
●
●
●
●●
●●
●
●●
●
●
●
●
●●●●
●
●
●
●
●●●
●
●
●
●
●
●●
●
●
●●
●
●
●●●●
●
●
●
●●
●●
●
●●
●
●●●
●●●●
●
●
●●
●
●
●●
●●●●
●●●●
●●
●
●
●
●●●
●
●
●●
●●
●
●
●
●
●
●
●●
●●●●
●
●
●
●●
●
●
●
●
●●●●
●
●
●
●
●
●
●
●●
●
●
●●●
●
●
●
●
●
●
●
●
●●
●
●
●●●
●●
●
●
●
●●
●
●
●
●
●
●
●
●●●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●
●●
●●
●●
●
●
●
●
●
●
●●
●●
●
●
●
●
●
●
●
●●
●
●
●
●●
●
●●
●
●●
●
●
●
●●
●
●
●
●●
●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●●
●●
●
●
●
●●●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●●
●
●
●
●
●●
●●
●
●
●
●
●●●●
●●
●
●●●
●
●
●●
●
●
●
●
●●
●
●●●●●
●●
●
●
●
●
●
●●●
●
●
●
●●
●●●
●
●
●●
●
●
●
●
●
●●
●●●
●●
●●
●
●
●
●●●
●
●
●●
●●
●
●
●
●
●
●●●
●
●
●●
●
●
●
●
●●
●
●●
●●
●
●
●●●
●
●
●
●●
●●●●●●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●
●
●●
●
●●
●●
●
●●
●
●
●
●●●●
●
●
●●
●
●
●
●
●
●●●
●●●
●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●●
●
●
●●●
●●
●
●
●
●●●
●
●
●
●
●
●
●
●●●
●
●
●
●●●
●
●
●●
●
●
●
●
●
●
●●
●●●
●
●
●
●
●
●●
●●
●
●
●
●
●
●
●
●●●●●
●
●
●
●
●
●
●
●●●
●
●
●●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●
●
●●●●●
●●
●
●
●
●
●
●●●●●
●
●
●
●●
●
●
●●●●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●●●
●
●●●
●●
●●
●●
●
●
●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●
●
●
●●
●●
●
●
●
●●●
●
●
●●
●●
●●
●●
●●
●●
●
●
●
●
●
●
●
●●●
●
●
●
●●
●
●
●
●
●
●●●
●●●
●●●
●
●
●
●
●●
●
●
●
●
●
●
●
●●●
●
●
●●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●●●
●
●
●
●●
●●
●
●●
●
●
●●
●
●
●●
●
●●
●●●
●
●
●
●●
●
●
●
●●
●●●
●
●
●
●
●
●
●
●●●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●●
●
●
●
●
●●●
●
●●
●
●
●
●
●
●
●
●
●
●
●●●
●●●●
●
●●
●
●●
●
●●
●
●
●●
●
●
●
●●
●
●
●
●●
●
●
●●
●●
●
●
●●●●
●
●
●
●
●●
●●
●●
●
●
●
●
●
●
●
●
●●
●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●●
●
●
●
●●●●●
●
●
●
●
●
●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●●●●
●●
●
●
●●
●
●
●
●●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●●●
●●●
●●●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●●●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●●
●●
●●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●
●●
●●
●
●
●
●
●
●
●
●●●
●●●
●
●
●●●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●●●●
●●
●●
●●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●●
●
●
●
●●
●
●●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●●●
●●●
●●●
●●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●●
●●
●
●●●●●●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●●
●
●●
●
●
●●●
●●
●
●
●●
●
●
●●
●
●
●
●●●●●
●
●
●
●
●
●●
●
●●●●
●
●
●
●
●●
●
●
●●●●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●●●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●●
●
●
●●
●
●●
●●
●
●
●
●●
●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●●●
●
●
●●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●●
●
●
●●●
●
●●
●
●
●
●
●●
●
●
●●●
●●●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●●
●●
●
●●
●
●●
●
●
●●●●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●●●
●
●●●
●
●
●
●
●
●
●
●
●●
●
●
●
●●●●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●
●
●●
●●
●●
●
●
●
●
●
●●
●●
●
●
●
●
●
●●
●
●●●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●
●●
●
●
●
●●
●
●
●●
●
●
●
●
●
●●
●
●●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●●●
●
●●●●
●●●●●
●
●
●
●
●
●
●●
●●
●
●
●
●
●●
●
●
●
●●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●●●
●
●
●●
●
●
●●
●
●
●
●
●
●
●●
●
●
●●
●●
●
●
●●
●
●
●
●
●●●
●
●
●●●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●●●
●
●
●●
●
●
●
●●●●●
●
●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●●
●
●●
●●
●
●
●
●
●
●
●
●●
●
●
●●
●
●
●
●●●●
●
●
●
●
●
●
●
●●
●
●
●●
●●●
●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●
●
●
●
●
●
●
●●●
●
●●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●●●
●
●
●
●
●
●
●●●●●
●
●●●
●
●
●●●
●●
●
●
●●●●
●●●●●●
●●
●
●
●
●
●
●
●
●
●
●●
●
●●●●
●
●
●●
●
●●●
●
●
●
●
●
●●
●
●
●●●●
●●
●●
●
●
●
●●
●●●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●●●●
●●●●
●●
●
●
●
●●
●
●●
●
●●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●●●●●
●
●
●
●●
●
●●●●
●
●●
●
●●
●
●
●●●
●●●●
●
●
●
●
●
●
●
●●●●
●
●●
●
●
●●
●
●
●●●
●
●
●●
●●●●●
●●
●●
●●●
●
●●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●●
●●
●●●
●
●●
●
●
●
●●●
●
●●●
●●
●
●
●
●●●
●
●
●●
●
●
●
●
●
●●●
●●
●
●●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●●●●●●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●●●
●
●●
●
●
●
●
●●●●
●
●●●
●●
●
●
●
●
●
●●●●
●●
●
●●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●●●●●
●●
●●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●●
●●●
●
●
●
●
●
●
●
●
●
●
●●
●●●
●●
●
●
●●●●
●
●●
●
●
●●●●●●●
●
●
●
●
●●
●
●
●
●
●●
●
●●●●●●●●
●
●
●
●
●●●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●●
●●●
●
●
●●
●
●
●
●
●
●
●●●
●
●
●●●●
●
●●
●
●
●●
●●
●
●
●
●
●
●●
●
●
●
●
●●●
●●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●●●
●
●
●
●
●●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●●
●
●●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●●●●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●●●
●●●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●●●●
●
●
●
●
●●
●●●●●
●
●
●
●
●●●●●●
●
●●
●
●●●
●
●
●
●
●
●
●●
●●
●
●
●●
●
●
●●●●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●
●
●
●●
●●●
●
●
●
●
●
●
●
●
●
●●
●●●●
●
●
●
●
●
●
●
●●●●
●
●●
●
●
●
●●
●
●
●
●●●●
●
●
●●●
●●
●
●●
●
●
●●
●●
●
●
●●
●
●●
●●●
●
●
●
●●
●
●
●
●
●
●●
●
●●
●
●
●●●●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●●●
●
●●●
●●●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●●●
●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●●
●●●
●
●
●
●
●●
●●●
●●●●●●
●
●●
●●
●●●
●
●
●
●●●●●●●●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●●●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●
●
●●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●●●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●●
●●●
●
●
●
●●●
●
●●●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●●●●
●●●●●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●●
●
●
●●
●
●
●
●●
●
●●
●●
●●
●
●
●
●
●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●
●
●
●●●
●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●●●
●
●
●●
●
●
●
●
●
●●
●
●
●●
●●●
●
●●
●●
●●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●●
●
●
●
●●
●
●
●
●●●●●
●
●
●
●
●●
●●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●●●●●
●●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●
●
●
●
●●
●
●
●●
●
●
●
●
●●
●
●
●
●
●●
●
●●●
●●
●●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●●●
●
●
●
●
●
●●
●●
●
●
●
●●
●●●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●
●●●
●
●
●●
●
●
●
●●
●
●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●●●●
●●
●
●
●
●
●
●
●●●●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●●●●●
●
●
●
●
●
●●
●
●
●●●●●
●
●
●
●
●
●●
●
●●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●●
●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●●●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●●
●
●
●
●●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●●●●●
●
●
●●●
●
●●
●
●
●●●
●
●
●
●
●
●
●
●
●●
●●●
●
●
●
●
●
●
●
●●
●●
●●
●●
●
●
●
●●●
●●●
●
●
●●
●●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●●
●●
●●●
●
●
●
●
●
●●
●●●
●
●●●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●●●
●
●
●●
●
●
●
●●
●
●●
●
●
●
●
●●
●
●●●
●
●
●
●
●
●●
●
●
●
●●●
●●●
●●●●●
●●
●●●●●●
●
●●●
●
●●
●●
●
●●
●
●
●
●
●
●●
●●●●●
●●
●●
●●
●●
●●
●
●
●●●
●●
●
●
●●
●●
●●
●●
●
●
●
●
●●
●
●
●●
●
●●●●
●
●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●●
●
●
●●
●●●●
●
●
●●
●
●●
●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●●●●●
●
●
●
●
●
●
●
●●●
●
●
●
●
●●
●
●
●
●●●●
●
●
●
●●
●
●●
●
●●●
●●
●●●●
●
●
●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●●
●
●●
●
●●
●
●
●
●
●
●
●●
●
●●
●
●
●
●●
●
●●●
●
●
●
●
●●
●
●
●
●
●
●●●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●●
●●
●
●●
●●
●●●●
●
●
●
●●
●
●
●
●
●
●
●
●●●
●
●●●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●●●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●●●
●
●
●
●
●●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●●●
●
●
●
●
●
●
●●●
●●
●
●
●
●
●●
●●
●
●
●●
●
●
●●
●
●
●
●●●
●●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●●●●
●
●
●
●
●
●
●
●
●●●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●●
●
●
●
●
●
●●●
●
●●
●
●
●
●
●●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●
●
●
●●●
●
●
●
●
●●●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●●
●
●
●
●●
●
●
●●
●
●
●
●●
●
●●
●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●
●
●
●
●●
●
●
●
●●●
●
●
●
●
●
●
●●●
●
●
●
●
●●
●
●●●
●
●
●
●
●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●
●●
●
●
●
●●
●
●
●
●
●●
●●●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●●
●
●
●
●
●
●
●●
●●
●
●●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●●
●●
●
●
●
●
●●
●●
●
●
●
●
●
●●●
●
●●
●
●
●
●
●
●
●●
●
●
●●
●
●
●
●
●●●
●
●●●●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●●●
●
●●●
●
●●
●●
●
●
●●
●
●
●
●●
●
●●
●
●
●
●●
●
●●
●
●
●
●●
●
●●
●
●●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●
●●●
●
●
●
●
●
●●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●●
●
●
●
●●
●●
●●
●●
●
●
●
●●
●
●
●
●
●
●●
●●
●
●
●
●●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●●
●
●
●
●
●
●
●●
●
●●
●●●
●●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●●
●
●●●
●●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●●
●
●
●
●●●
●
●
●
●
●
●●
●
●
●
●
●●●●
●
●
●
●
●
●
●
●
●●
●●
●
●
●●●●●
●
●●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●●
●●●
●
●●
●
●
●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●●●
●
●
●●
●
●
●●
●
●
●
●●
●
●
●
●
●●
●
●
●●
●
●
●
●●●●●
●
●
●
●
●
●
●
●
●
●
●●●
●●●
●●●
●
●
●
●
●
●●
●●
●
●
●
●
●
●●
●
●
●
●
●
●●
●●
●
●
●
●
●
●●
●●
●
●
●
●
●
●
●●
●
●●
●
●
●
●●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●●●
●
●●
●●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●●
●
●
●●
●
●
●
●
●
●●●
●
●
●●
●
●
●
●
●
●
●
●●●
●●●●
●●
●●
●
●●
●
●
●
●●
●●
●
●●●
●
●
●
●●●
●
●
●
●
●●●●
●
●●
●●●
●
●
●
●
●●●
●●●●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●●●
●
●●●
●
●
●
●
●
●
●●
●
●
●
●●●
●
●
●
●
●●
●●
●●
●
●
●
●●
●
●
●●●
●
●
●●
●
●
●●
●●●●
●
●
●
●●●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●●
●
●
●
●●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●●●
●
●
●●
●
●
●
●
●
●
●●
●
●●
●
●●
●
●●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●
●
●
●●●
●●
●●
●●
●
●
●
●●●
●
●
●●
●
●
●
●
●
●
●
●●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●●
●●
●
●
●
●●●
●
●
●
●
●
●●
●
●
●
●●●●
●
●
●
●●
●
●
●●
●●
●
●
●
●
●
●●
●
●●●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●●●
●
●
●
●
●
●●●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●●
●●●●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●●●●●
●
●
●●
●
●
●
●
●
●●●
●●
●●
●
●●
●●●
●
●
●
●
●●
●
●
●
●
●●●
●
●
●●
●●●
●
●●
●●
●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●●
●
●●
●
●
●●●
●
●
●
●
●
●
●●
●●
●●
●●
●●
●
●
●●
●●
●●
●
●
●●●●
●●
●●
●●
●
●
●
●●●
●
●
●
●
●
●
●
●
●●
●
●
●
●●
●
●●
●
●
●
●
●
●
●●
●
●
●●
●●
●
●
●●
●●●
●
●●
●
●
●
●
●
●
●
●
●
●●●
●
●
●●
●●●
●●●
●●
●●
●
●●●
●
●
●
●
●
●
●
●
●●●
●
●●
●●
●
●
●●
●
●
●
●
●
●●●
●●
●
●
●
●
●
●●●
●●●
●
●●●●
●
●
●
●
●
●
●●
●●●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●
●
●
●●●●
●●●●
●
●
●
●●
●
●●
●
●
●
●●
●
●●
●●
●●
●
●●
●
●
●●●
●
●●●
●
●●●●
●
●
●
●
●●●
●
●
●
●
●●
●●
●
●●
●●●
●
●
●
●●
●
●
●
●
●●●
●
●●●●
●
●
●●●
●●●
●
●
●●
●
●
●●
●●
●
●
●●
●
●
●
●
●●
●●●
●●●
●
●
●●●
●●●
●
●
●
●
●
●●
●●●
●
●
●
●
●●
●●
●●
●
●
●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●●●
●
●
●
●●
●
●
●●●
●
●●●
●●●●
●●●
●●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●●
●●
●
●
●●
●●
●●
●●
●
●
●
●
●
●●
●
●●
●●
●
●●
●
●●
●
●
●
●
●
●●●
●
●
●
●
●
●
●●
●
●
●●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●●
●●●
●
●
●
●●
●●●
●
●
●
●●
●●●
●
●
●
●●
●●●
●●
●●●●●
●
●
●
●
●
●
●
●●●
●●●●●●
●
●●
●
●
●●●
●
●
●
●●●●●
●
●
●●●
●
●●
●●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●●
●●
●
●
●●
●●
●
●
●
●
●●
●●
●
●
●
●●
●●●
●
●
●
●
●
●●●
●
●
●●
●
●●
●
●●
●●●
●●●
●●●
●●●
●●●
●●
●
●
●●
●
●
●
●
●●
●
●
●
●●
●●●
●●
●●
●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●●●
●
●
●
●
●
●●●
●●●●●●●
●
●
●
●
●●
●
●
●
●●●●
●●
●●●
●●
●
●
●●
●
●
●●
●●
●
●
●
●●●
●●
●
●●●
●●
●
●
●
●
●●
●
●
●●●
●●●
●
●
●
●
●
●
●
●
●●
●●
●
●●●
●●
●●
●
●
●
●
●
●
●●
●
●
●
●●●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●●
●●●
●
●●
●●●
●●●
●●●
●●
●
●
●●
●●
●
●
●
●
●
●●
●●●
●●●
●
●●
●●
●
●●●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●●●
●●●●●●
●●
●
●
●●
●●●
●●
●●
●
●●
●
●
●
●●●
●●
●●●
●
●●
●●●
●
●
●
●
●●
●
●
●
●●●
●
●●
●●●
●
●
●
●●●●
●●
●●●
●●●
●●
●
●
●●
●●
●●
●●
●●
●●
●●
●●
●●
●●
●●
●
●
●
●●●
●
●●
●
●●
●●
●
●
●●
●●
●●
●
●
●●
●●
●●
●
●
●
●
●
●
●●
●●
●●
●
●
●●
●●
●
●
●●
●
●
●
●
●●
●●
●●
●●
●●
●●
●●
●●
●
●●
●
●
●●●
●●
●●
●
●
●
●
●
●
●
●
●●
●●
●●
●●
●●
●
●
●●
●●
●●
●●
●●
●●
●
●
●●
●●
●
●
●
●
●●
●●
●●
●●
●
●
●
●●●
●
●
●●
●●
●●
●●
●
●
●
●●
●
●●
●●●●
●●
●
●
●●
●●
●●
●●
●●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●●
●●
●
●
●●
●
●
●●
●●
●●
●●
●●●●
●●●●
●●
●●
●●
●●
●●
●●
●●
●
●
●●
●●
●
●
●●
●●●●
●●
0
500
1000
0 2500 5000 7500
mill
iseco
nds
Simulation input values
0.000
0.002
0.004
0 500 1000 1500
densi
ty
Distribution of input values
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●●●●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●●●●●
●
●
●
●●
●
●
●●●●
●
●●
●
●●
●
●
●●●●
●●
●
●
●●●●
●
●
●
●
●
●
●●
●
●
●●
●
●
●●
●
●
●●●
●
●
●●●
●
●
●●
●●
●●●
●
●●
●●
●●
●
●
●●
●●
●●
●●
●●
●
●
●●
●
●
●●●●
●
●
●
●●●
●●
●●
●
●
●●●
●
●●
●
●
●
●
●●
●●
●
●
●
●
●
●●●
●●
●●
●
●
●●
●
●
●
●
●●
●●
●
●
●●
●
●
●●●●
●
●
●
●
●
●
●●
●
●
●●●
●
●●
●
●
●●
●
●
●●
●
●
●●
●●
●●●
●
●●●
●●●
●
●
●●
●●
●●
●●
●●
●
●
●●
●
●
●●
●
●
●●
●●
●●●●
●●●
●
●●
●
●
●●●●
●
●
●●●●
●
●
●
●
●●
●●
●●
●
●
●●
●
●
●
●
●
●
●●
●●
●●●●
●
●
●●
●
●
●●
●
●
●●
●●
●●
●
●
●●
●
●
●●
●
●
●●●
●
●●●●
●
●●●●
●●
●
●●●
●
●
●●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●●
●
●
●
●
●●
●●
●●
●
●
●●
●
●
●
●
●●
●
●●
●
●●
●●●●
●
●
●
●
●●
●
●
●
●●●
●●
●
●
●
●●
●
●●●●
●
●
●
●
●●
●●
●
●
●
●●●
●
●
●
●●●
●
●
●
●
●●
●
●
●
●●●
●
●
●●
●
●●●●●●●●
●●●●
●
●●
●
●
●
●●●
●●
●●
●
●
●●
●
●
●●●
●●
●
●●
●●
●
●
●
●
●
●
●●
●
●
●
●●●●●
●●
●
●
●
●
●●
●
●
●
●●●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●●●
●●
●
●●●
●
●
●●
●●
●
●
●
●
●●
●
●
●●
●
●
●●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●●●
●
●
●
●
●●
●
●
●●
●●
●
●
●
●
●●
●
●
●
●
●●
●
●●
●●●
●
●
●●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●●
●
●
●
●
●●●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●
●
●
●●
●
●●
●●
●
●●
●
●●●
●
●
●
●
●
●
●
●●
●
●
●●
●●
●
●
●
●●
●●●
●
●
●
●
●
●●●
●●
●
●
●●●●
●
●
●
●
●●
●
●
●
●●
●●●●
●
●●
●
●●
●
●
●
●●
●
●●
●
●●●●
●●
●
●●●
●
●
●●
●
●●●
●
●
●
●
●
●●●
●
●
●
●●●
●●
●
●●
●
●●
●
●
●●
●
●
●
●
●
●
●●
●
●
●●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●●●
●
●
●
●
●●
●
●●●
●
●
●
●
●●
●
●
●
●
●●
●●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●●●●
●●
●●
●●●●
●
●
●●
●●
●
●
●
●
●
●
●●●●
●
●
●●
●
●●
●
●●
●
●●●
●●●●
●
●
●●
●
●
●●
●●
●
●
●●●
●
●
●
●
●
●
●●●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●
●●●
●
●
●
●
●●
●
●
●●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●●●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●
●
●●
●
●
●
●
●●●●
●
●
●●
●
●
●●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●●
●
●
●
●
●
●
●●
●
●
●
●
●●
●●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●●●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●●
●●
●●
●
●
●
●
●
●
●●
●●
●
●
●
●
●
●●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●●●
●●
●
●●
●
●
●●
●
●
●
●●
●
●●
●
●
●
●●
●
●
●
●
●●
●
●●●
●
●
●●
●
●
●
●●●
●
●
●●
●●
●
●
●
●
●
●●●
●●
●●
●
●
●
●
●
●
●
●
●
●●
●●
●●
●
●●
●
●
●
●
●
●●●●
●●
●
●
●
●
●
●
●●●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●
●
●●
●
●●
●●
●
●
●
●
●
●●●●
●●
●●
●
●
●●
●
●●●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●●
●
●
●●●
●
●
●
●
●●●
●
●
●
●
●●
●
●●●
●
●
●
●
●●
●
●
●●
●●
●●
●
●
●●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●●●●
●
●
●●
●
●●
●●●
●
●
●
●
●
●
●●
●●
●
●
●
●
●
●
●
●
●●
●
●●
●●●
●
●
●
●
●
●
●
●●●
●●●
●
●●
●
●
●
●●
●●●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●●
●●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●●●
●
●
●●
●●
●●
●●
●
●
●●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●
●
●●●
●
●
●
●
●●
●
●
●●
●
●
●
●
●●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●●●●
●
●●
●
●●
●
●●
●
●
●
●
●
●
●●
●
●
●●●
●
●
●●
●
●
●●
●
●●●●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●●●
●
●●
●
●
●
●
●●
●
●
●
●
●
●
●
●●●
●
●
●●
●●
●
●●●
●●
●●
●
●
●
●
●
●
●●●
●
●
●●
●●
●
●●●●
●
●
●
●
●●
●
●
●●
●
●
●
●●●
●
●
●●
●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●
●●
●●
●
●●●
●
●●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●●
●
●
●
●
●
●●
●
●
●
●●
●●
●
●
●●
●●●
●
●
●●
●
●
●●
●
●
●
●●●
●
●●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●●●●●
●
●
●
●
●
●
●●
●●●
●
●
●●
●●
●
●●
●●●
●●
●●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●●
●●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●
●●
●●
●
●●
●
●
●
●
●●
●
●●●
●
●●●
●
●
●
●
●
●●●
●
●●●
●●
●
●●
●
●
●●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●
●●●●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●●●
●
●
●●
●
●
●
●
●●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●●
●
●●
●
●
●●
●
●●
●●
●
●●●●●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●●●
●
●
●
●
●●
●●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●●
●
●●●●
●
●
●●
●
●●
●●
●
●●●●
●
●
●
●
●
●
●
●
●●●●
●
●●
●
●●
●
●●
●
●
●
●
●
●
●
●
●●●
●
●●●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●●
●
●
●●
●
●
●
●●
●●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●●●●
●●
●
●
●
●●●
●
●
●●●
●
●
●
●
●●
●
●
●
●
●●●
●
●●
●
●
●
●●
●●●
●
●●
●
●●●
●
●
●
●
●●●
●
●
●
●
●●
●●
●
●
●●●
●●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●●●
●
●
●●●●
●
●●●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●●●●●
●
●
●
●
●●●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●●
●●
●
●
●
●
●
●
●
●
●●●●
●●
●●●●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●●
●●●
●
●●
●
●
●
●
●
●●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●●●
●
●●●●
●
●
●
●
●
●
●
●
●
●●
●
●●●
●
●●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●●●●
●
●
●
●
●
●
●
●●
●
●●
●●●●●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●●
●
●●●●●
●
●
●
●●●
●●●●
●
●
●
●●●●●
●●
●●●●
●
●
●
●
●●●
●●
●
●●
●
●●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●●●
●
●
●●
●●●●
●
●●●●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●●●●
●
●
●
●●
●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●●●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●●●●●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●●●
●
●
●●
●●
●
●
●
●●
●
●
●●●
●
●●
●
●●
●
●
●
●
●
●
●●●
●
●●●●●●
●
●
●
●
●
●
●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●●●
●
●
●●
●●
●
●●●
●
●
●
●
●
●
●
●
●●
●
●●●
●●
●
●
●
●
●
●
●●●
●●
●●
●
●
●
●
●
●●
●●●●
●
●
●
●
●
●●
●●
●
●
●●
●
●●
●
●
●
●
●●●●
●●●
●
●
●
●●●
●●●
●
●
●●
●
●
●
●
●
●●
●●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●●
●●
●
●
●
●
●
●
●
●●●
●
●●●
●
●
●
●
●●
●
●●●●
●
●
●
●
●
●
●
●●●●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●●●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●●
●●●
●
●●
●
●
●
●
●
●●●
●●
●
●
●
●
●
●
●●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●●●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●●●●
●●●
●
●
●
●●●
●●
●●
●●
●
●
●
●
●
●
●
●●●
●
●
●
●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●●●
●●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●
●●●
●
●●
●
●
●●
●●
●●
●●
●
●
●●
●
●
●●●●
●●
●●
●
●●●●●●●●
●●
●
●
●●
●●
●
●
●●
●●●
●
●●
●
●
●
●●●
●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●●
●●●
●
●
●
●●
●
●
●●●
●●●●
●
●●
●
●
●
●
●●
●
●
●
●
●
●
●
●●
●
●
●●●
●●
●●
●
●
●
●●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●●●
●
●
●
●
●●●●
●
●●●
●
●●
●
●
●
●
●
●
●
●
●
●●●●
●●
●
●
●
●
●
●
●
●●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●●
●
●
●●
●●●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●●●
●
●
●●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●
●
●●
●
●
●
●●
●
●
●●●●●●
●
●
●●
●
●
●
●
●
●
●
●●
●
●
●
●●
●●
●●
●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●●●
●
●●●●●●
●
●
●
●
●
●●
●
●
●
●
●
●
●●●
●
●
●
●
●
●●
●●●●
●
●
●
●
●
●●
●●
●
●●
●
●●●
●●●
●
●
●
●
●
●
●
●
●
●●●●
●
●
●●
●
●●●●
●
●
●
●
●●●●●●●●●
●
●●
●
●●
●●
●
●●
●
●●
●
●
●
●●
●●
●
●●
●
●●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●●●●●●●●
●●
●
●
●
●●
●
●
●●
●●●●
●●
●
●●
●●
●
●
●
●●
●
●
●●
●
●
●
●
●●●●
●
●
●●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●●
●
●
●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●●
●
●
●●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●●●
●
●
●
●
●
●●
●
●
●●●●
●
●●●
●
●●●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●●●●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●●
●
●●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●●
●
●
●
●●
●
●
●
●
●●
●
●
●●●
●
●
●
●
●●
●
●●●●
●●
●●
●
●●●
●●
●
●●●●
●
●●
●
●●
●
●
●●
●
●
●●
●
●●●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●●
●
●
●●
●
●
●●
●
●
●
●
●
●
●●●
●●
●
●
●
●
●
●
●●
●●●
●●
●●
●●
●
●
●
●
●
●
●
●
●
●
●●●
●
●●
●
●●
●
●
●●
●
●
●
●
●
●
●●
●
●●
●
●
●●
●
●
●
●
●
●●●
●●
●
●
●●
●
●
●●●
●
●
●
●
●
●●
●●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●●
●●●●
●
●
●
●
●
●
●
●
●●
●●●
●
●●●●●
●
●
●●
●
●
●
●
●●●
●
●
●●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●●●●●●
●
●
●
●
●
●
●
●
●
●
●●●
●●
●
●●●
●
●●
●
●●
●●
●
●
●●
●●●●
●
●
●
●●
●
●
●●
●●
●
●
●
●
●
●
●
●●●●●
●●●●
●●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●●
●●●●●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●●
●
●
●●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●●●●●●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●●
●
●
●●
●
●●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●●●●●●
●
●
●
●
●
●
●
●●●●●
●
●●
●
●●●
●
●
●
●
●
●
●
●
●
●●
●●●●
●●
●
●
●
●
●
●
●●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●●
●
●
●
●●
●
●
●●
●
●
●
●●●
●
●
●
●
●●
●
●
●
●
●
●●●●●
●
●
●
●●
●
●
●
●●●●●●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●●
●●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●●●
●
●
●
●
●
●●
●
●
●●●●●
●
●
●
●
●●
●
●
●●
●
●●
●●
●
●●●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●●
●
●
●
●●
●
●●●●●
●
●
●
●
●
●
●
●
●
●●●●●●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●
●●●
●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●
●
●
●
●●●●
●
●
●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●●●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●●
●
●
●●
●
●
●
●
●●●●●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●●
●
●●●●●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●●
●●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●●
●
●
●●●●
●
●
●
●●
●
●
●●
●
●
●
●
●●
●
●
●
●●
●
●●
●
●●
●
●
●
●
●●
●
●
●
●●●●●
●●●
●
●●●
●
●
●
●
●
●●●
●
●
●
●
●●
●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●●
●●●●●
●
●
●
●
●
●
●●●
●
●
●
●●●
●
●
●
●
●
●●●●
●
●
●●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●●●●
●●●
●
●●●
●
●●
●●●
●
●
●
●●
●
●
●
●●●
●●●
●
●
●
●
●
●
●●
●
●
●
●
●●●
●●
●
●●
●●●
●●
●
●
●
●
●
●●
●
●●
●
●●
●
●
●
●
●
●
●●
●●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●●●●●●
●
●
●●
●
●●●●●●●
●
●●●●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●
●●
●
●●●●●●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●●
●●●●
●
●
●●
●
●
●●
●
●●●●
●●
●
●●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●
●
●●●
●
●
●
●
●
●●●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●●●●
●
●
●●●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●●
●
●●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●●●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●●●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●●●
●●
●
●●
●●
●
●
●
●
●●
●●
●●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●●
●
●●
●
●●
●
●
●●●●●●
●
●
●
●●
●●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●●●
●●
●
●
●●
●●
●
●
●
●
●●
●
●
●
●●
●
●●
●
●
●●●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●●●●
●●●●
●
●
●
●
●
●
●
●●●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●●
●●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●●
●
●●
●
●
●●●
●
●
●
●
●
●●
●●
●
●
●
●
●●
●
●
●
●●
●●
●
●
●●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●
●
●
●
●
●●●●
●
●●●●●●●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●●●●
●●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●●
●
●●
●●
●●
●
●●
●●
●
●
●
●●
●
●
●
●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●●●
●
●
●
●
●
●
●●
●
●
●
●●
●●
●
●
●
●●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●●●
●●
●
●
●●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●●
●●●
●
●●
●
●
●●
●
●
●
●
●●
●●
●
●
●
●●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●
●●
●
●●●
●
●
●●
●
●●●
●●
●
●
●
●●●
●
●
●
●●
●●
●
●
●
●
●●
●●
●
●
●●
●●
●
●●
●●●●
●●
●
●
●
●
●
●
●●
●
●
●●
●●
●
●●
●
●●
●●●●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●●
●●●
●
●●●●
●
●●
●
●
●
●
●
●●
●●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●●●
●
●●
●
●
●
●
●
●●●
●●
●●
●
●
●●●●
●
●
●●
●
●●
●
●
●
●●●●●
●
●●
●
●
●●
●
●
●
●
●●●●
●
●
●
●●
●
●
●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●
●
●●●●●●
●
●
●
●
●●
●
●
●
●
●
●
●
●●
●
●
●●●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●●
●
●●●
●●●
●
●
●
●
●
●
●
●
●●
●
●
●
●●●
●
●
●
●
●
●●●●
●●
●
●
●●
●
●
●
●
●
●
●
●●●
●
●●●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●●
●
●
●
●●
●
●●●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●●
●
●
●
●
●●
●
●
●●●
●
●
●
●●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●●
●●
●
●●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●●●●
●●
●●
●●●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●●●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●●
●
●
●
●
●
●●
●
●●●
●●
●
●
●
●
●
●●
●
●
●
●
●
●●
●●
●
●●
●
●
●●
●●
●
●
●
●
●
●●●●
●●
●
●
●
●●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●
●
●
●●
●
●●
●
●
●
●
●
●
●●●
●
●●
●
●
●
●
●●●
●
●
●
●
●
●
●●
●
●
●
●
●●●
●
●
●
●
●●●
●
●
●
●●●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●●
●●
●
●●
●●
●
●
●
●●
●
●
●
●●●
●
●
●●●
●●
●●
●●●
●
●
●
●●
●
●
●
●
●
●
●
●
●●●●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●●●
●
●●●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●●
●
●
●●
●
●
●
●●
●
●
●●●
●●
●●
●●●
●
●●●●
●
●
●
●●●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●●
●
●
●
●
●
●
●●
●
●●
●
●●
●●
●
●●●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●●
●
●
●●
●
●
●
●●
●●●
●●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●●●
●
●
●●
●●
●●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●●●●
●●
●
●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●
●●
●●●
●
●
●
●●●
●
●
●
●●
●
●
●
●●
●
●●●
●
●
●●
●
●
●●
●●
●●
●●
●
●
●
●●
●
●●●●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●●●●
●
●
●●●
●●
●●●●●
●
●
●●
●●
●
●●●
●
●
●
●
●
●
●●
●●
●●
●
●
●
●●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●
●
●●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●
●●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●●●
●
●
●●
●●
●
●
●●
●●
●
●●
●
●
●
●
●
●
●
●
●●●●
●
●
●●
●
●
●●
●
●
●
●
●●●●●
●
●
●●●
●●●
●
●
●
●
●
●
●
●●●●●
●
●●
●●●
●
●
●
●
●
●●
●
●●●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●●●
●
●
●
●
●
●
●●●
●
●●
●
●●●●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●
●
●●●
●
●
●
●●
●
●●
●●
●●
●
●●
●
●
●●●
●●
●
●
●
●●●●●
●
●●
●●●
●
●
●
●
●
●
●
●
●
●●●●
●
●●●
●●●
●
●
●
●
●
●
●
●●●●●
●
●●
●
●●●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●●●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●●●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●●●●
●●●
●
●●●
●
●●
●
●●●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●●●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●
●
●●
●
●●
●●
●
●
●
●
●●●
●
●
●
●
●●●
●
●
●
●
●
●
●●
●
●
●●
●
●
●●
●
●
●●
●
●
●●
●
●
●
●●
●●●
●
●
●●
●
●●●
●
●
●●
●
●●●
●
●
●●
●
●●●
●
●
●
●●●
●
●
●●
●
●
●
●
●●●
●●●●●●
●
●●
●
●
●
●●
●●
●
●●●
●
●
●●
●
●
●
●●
●
●
●
●
●
●●
●
●●
●
●●
●
●●
●
●
●
●
●●
●
●
●●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●●●
●
●
●
●●
●●
●
●
●
●●●
●●
●
●●
●
●●
●
●●●
●
●
●
●
●●
●
●
●●
●●
●
●
●
●
●
●●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●●●
●●
●●●
●●●
●
●●
●
●
●●
●
●
●●
●●
●
●●
●●
●
●●●
●●
●
●
●
●
●
●●
●
●
●●
●●
●
●
●
●●●
●
●
●
●●●
●
●
●
●
●●●●●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●●
●
●
●
●●●
●●
●●
●
●
●
●
●
●
●●
●
●
●
●●●●
●
●●
●●
●
●
●
●
●
●
●●
●
●
●
●●●
●●
●
●●●
●
●
●
●●●
●
●
●
●
●●●●
●
●
●
●
●
●
●
●●●
●
●
●
●●●
●
●
●
●●
●
●●
●●
●
●
●●
●
●
●●
●●
●
●
●●
●●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●●●
●●
●
●●
●
●
●●
●
●●
●
●
●●
●
●●
●
●●●
●
●●
●
●●●
●
●
●
●●
●
●
●
●●
●●
●
●●●●●
●
●
●
●●●
●●
●
●●
●
●●
●
●●●
●●
●
●●
●●
●●
●●
●●
●
●
●●
●●
●●
●
●
●●●
●
●●
●●
●
●●●●●
●
●
●
●●●
●●
●●
●●
●●
●●
●●
●
●
●●●●
●
●
●
●●●
●
●
●●●●
●●
●●
●
●
●●
●
●
●
●
●
●
●●
●
●
●●
●
●
●●
●
●
●●●●
●
●
●
●●●
●
●
●●●
●
●
●
●
●
●
●
●●
●
●
●●●●
●●●●
●
●
●●
●
●
●●
●●
●●
●
●
●●
●●
●
●●●
●
●
●●
●
●
●
●●
●
●
●
●●●●
●
●●●
●●
●●
●
●
●●●●
●●
●●●
●
●●
●
●
●●
●
●
●●●●●●●
●
●
●●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●●
●
●
●●
●●
●●●
●
●●●
●
●●●
●
●●●●
●●
●
●
●●●●
●
●●●
●●
●●●●●●
●●
●●●
●
●●
●●
●●
●
●
●●●
●
●●
●
●
●●●
●
●
●●●●
●
●●
●●●●
●
●
●
●
●
●
●
●●
●
●
●
●
●●●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
0
250
500
750
1000
1250
0 2500 5000 7500Cloutlet
mill
iseco
nds
Simulation output values
0.000
0.002
0.004
0.006
0 500 1000Duration
densi
ty
Distribution of output values
Figure 9: Simulation input vs. output comparison
Di(Opk) is the time of performing service-local operation kon service Si and (cpu|mem|net)CS|LB|WK|ST is the utiliza-tion level of CPU, memory and network on the VMs corre-sponding to CS, LB, WK and ST services. Each line of thismatrix corresponds to a single chain of requests from CS, toWK, to ST, and then back to CS.
Profileload =
⌧RT (Si, Sj), Di(Opk),(cpu|mem|net)CS|LB|WK|ST
�(1)
By combining performance profiles for concurrent work-load between 1 and max.load end-to-end requests, we formthe dEIS performance model Profile as dictionary with keyload and corresponding values Profileload.In order to convert the created performance profile to
CloudSim entities we transform the durations in millisec-onds to their equivalent MIPS rating. We also map theVM resource consumption for CPU, memory and networkto CloudSim characteristics of the created cloudlets - CPUand memory utilization models and network input and out-put payloads. The conversion of milliseconds to MIPS isdone according to Equation 2.
instr =ms
1000.0· CPUMIPS (2)
instr is the length in instructions of an operation with aduration of ms milliseconds when executed on CPU with aMIPS rating of CPUMIPS . This equation is valid only whenthere is only one task being executed on the CPU. If thereare multiple tasks in execution on the same CPU, the tasks’length in number of CPU instructions needs to be reducedby the CPU concurrency level in order to keep the sameexecution deadline. As our performance profile contains op-erations’ durations measured under constant workload, weapply Equation 3 in order to convert the operation’s dura-tion in milliseconds to MIPS.
instr⇤ =instr
clnew + concurrencyV M· (1� CPUOS) (3)
instr⇤ is the task’s length in MIPS considering VM con-current load, instr is the value calculated by Equation 2,clnew is the number of cloudlets newly submitted to the VM
14
0
5
10
15
16:16 16:18 16:20 16:22 16:24 16:26Co
ncc
urr
en
t L
B s
ess
nio
ns Experiment 1
0
5
10
15
20
17:18 17:20 17:22 17:24 17:26TimeC
on
ccu
rre
nt
LB
se
ssn
ion
s
Experiment 2
Figure 10: Experiments 1 and 2: Concurrent num-
ber of LB sessions
for execution, concurrencyV M is the number of cloudlets al-ready executed by the VM, and CPUOS is the average CPUutilization caused by independent OS-level kernel tasks. Thiscalculation is performed in each CloudSim Datacenter Bro-ker corresponding to CS, LB, WK and ST services for eachbatch of cloudlets submitted for execution.
For running the simulation in CloudSim, a DatacenterBroker is created for each dEIS service and also at leastone VM per dEIS service is added to CloudSim.
A simulation scenario is given as a list of pairs of simu-lation time and the corresponding expected number of con-current CS-requests at that time. The list is then linearly-interpolated for determining the expected concurrency foreach simulation time slot. For each simulation time step,the current number of running CS-requests cl is comparedto the simulation plan values clsim, and if cl < clsim, then(clsim � cl) CS-cloudlets are created.
●
●
●
●
●
●
●
● ●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
● ●
●●
●
●
●
●
●●
●●
●
0.15
0.20
0.25
0.30
5 10 15 20
D v
alu
e
Kolmogorov−Smirnov
●
●
●
●
●
●
●
●
●
● ●●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
● ●●
●
●
●
●
● ●
●
●
0.96
0.98
1.00
1.02
5 10 15 20Concurrent Workload
Re
gre
ssio
n C
oe
ffic
ien
t Linear Dependency
Figure 11: EIS End-To-End Response Time (ms) -
Experiment vs. Simulation comparison at constant
load
Based on the expected concurrency level defined in thesimulation plan, one request trace is selected from the per-formance profile with the corresponding concurrency level.Next, from the performance trace, the operation duration,
0
1000
2000
3000
16:16 16:18 16:20 16:22 16:24 16:26Time
mill
ise
con
ds Experiment: End−To−End Response Time
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●
●
●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●
●●●●●●●●●
●●●●●●●●●●●●●●●
●
●●●●
●
●●
●
●●●●●●●●●●●●
●●●●●●
●
●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●
●●
●
●
●●
●
●
●●●●●
●
●●●●●●
●●●●●●●●
●●●●●●●
●
●●
●●●
●●●●●
●●●●●●●●
●●●●●●●
●
●●
●
●●●●●●●●
●●●●●●●●●
●
●●
●●
●
●
●●
●
●
●●●
●
●
●
●●
●
●●●
●
●●●●●
●●●●
●
●●●●●●
●●●●●●
●
●●●
●
●●●●
●●●
●
●
●●●●●●
●
●●
●
●●●●●●
●●●●
●
●●●
●●●●
●●●
●
●
●●●●●●●●●
●●
●●●
●
●●●
●
●
●●
●
●●●●●●●●●●●●●
●
●●
●●●
●
●●●●
●●●●●●●●●●●●●●●●
●●●
●●
●●
●
●
●●●●
●●●
●
●●●●
●●●●●●●●
●
●●
●
●●●●●●●●●
●●●●●●
●●●
●●●●●●
●
●
●●●●●
●
●
●●●●●
●
●●●
●
●
●●●●
●●●●●
●
●
●
●●
●
●
●●
●●●●
●●●●
●
●
●●●●
●
●
●●●●●●
●●
●
●●●●●
●
●
●
●●
●
●●●●
●●●●
●
●●
●
●
●
●
●
●
●
●●●●
●
●●●●●●●●●●
●
●
●●●●●●
●●●●●
●
●
●●●●●
●●●
●
●
●
●●●●
●●●
●
●●
●●●
●
●●●
●
●●●●●●
●●●
●
●
●
●
●●
●
●●
●
●
●●●●
●
●
●●
●
●
●
●
●●
●
●
●
●●
●
●●●●
●
●
●
●●●
●
●●●●
●
●
●●
●
●●●
●
●
●●
●
●●●
●●
●●
●●●
●●●●
●
●
●
●
●
●
●●
●
●●
●
●
●
●●●
●
●●
●
●●
●●●
●
●
●
●
●●
●
●
●●
●
●●●
●●
●●●
●
●●
●
●
●●●
●
●
●
●●●●
●●
●
●
●●
●●
●
●●●
●
●●
●●
●●●
●●●●
●●●
●
●●●●
●●●●
●●
●●
●
●
●
●
●
●
●
●●●●●●
●
●
●
●●
●
●
●●●
●
●●
●
●
●●
●
●
●
●●●●
●
●
●
●
●●
●●
●
●●●●
●
●
●●
●
●●
●
●
●
●●●
●
●
●●
●●
●
●
●●
●●
●●
●●●
●
●
●●●●
●●
●
●●●
●
●
●
●
●
●●
●
●●●●●●●
●
●●
●
●
●
●●●●●
●
●●
●
●●●
●
●
●●
●●●●●●
●
●
●●
●
●
●●
●
●●
●
●●●
●●●
●
●●●
●●●
●
●
●●
●●●●●
●
●●●●
●
●
●●
●
●
●●
●
●
●●
●
●
●●●
●
●●
●
●●
●
●
●
●●●
●
●
●
●
●
●●
●●
●
●
●
●
●●●
●●●
●
●
●●
●●●
●
●
●
●
●
●
●
●●●●●
●●
●●
●
●
●●
●
●●●
●
●●
●●
●
●●
●●
●●
●
●
●
●
●
●
●●
●
●●
●
●
●●●●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●●●
●
●
●●
●●●●●
●
●
●
●
●●●●●
●
●
●●●●●●●●●●
●●
●
●●●
●
●
●
●
●●
●●
●
●●●
●●
●
●
●●
●
●●●
●
●
●●●●●●
●●
●●●●●●●●
●
●●
●
●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●●
●
●
●
●
●●●
●
●●
●●
●●
●
●
●
●●
●
●●
●
●●
●
●
●
●●
●
●
●
●●
●●
●●●
●●
●
●
●
●●●
●
●
●●●
●
●
●
●●●●●
●●
●
●●
●●
●
●
●
●
●
●●●
●●
●
●
●●
●
●●
●
●
●●
●●●
●●●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●
●●
●
●●
●
●
●●●●●
●●
●
●
●●
●
●●●●●●
●
●
●●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●●●
●●●●
●
●
●
●
●
●●●●●
●
●
●
●
●
●
●
●
●●
●●●
●●
●
●●
●
●
●
●
●●●
●
●
●
●●
●●●
●
●
●●
●
●
●
●
●
●●●
●
●
●●
●
●●
●
●
●●●
●
●●●
●●●●●
●●●
●●
●●●●●●
●
●
●
●●●
●
●
●
●●●●
●●●●
●
●●●●
●●
●
●●
●
●
●●
●
●
●
●
●
●
●
●
●●
●●
●●●●●●●
●
●
●
●
●●
●●
●
●
●
●
●●●●
●●●
●
●
●
●●
●
●
●●
●
●●
●
●●●●●●
●●
●●
●
●●●●●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●●
●●
●●●●●●
●●●
●●
●
●●
●
●
●
●
●●●●
●
●●
●
●
●
●●
●
●
●●●
●
●
●●●●●●●●●●●
●●
●●
●●
●
●●
●
●
●
●●
●●●●●●
●
●●●
●
●
●
●
●
●●
●
●
●●
●
●●
●
●
●
●
●●●●●
●●●●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●●
●●
●
●
●
●
●
●
●
●
●
●●
●●●●
●
●●●●●
●
●
●
●●
●
●●
●●●●
●●
●
●●●
●
●
●
●●
●
●●
●●
●●
●
●
●
●●●
●
●
●●●
●
●●
●
●
●●
●●
●
●●
●
●●
●●
●
●
●●●
●●
●
●●●
●
●●
●●●
●●
●
●●
●●●●
●
●
●
●●●●●
●●●
●●
●●●
●
●
●●●
●
●●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●●●●
●●●●●●●●
●
●●
●
●●
●
●●
●●
●●
●●
●
●●
●
●
●●●●
●●
●●
●
●
●●
●
●
●
●●●
●
●●
●
●●●
●
●
●
●●●
●
●●●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●●●
●●
●●
●●
●
●
●
●
●
●
●●●
●
●●
●●
●●●●●●
●
●
●●
●●
●●
●
●●
●
●●●
●
●
●
●●
●●
●●●
●
●
●●●
●
●●
●
●●●●●●●●
●
●
●
●
●
●●●●
●
●●
●
●
●
●
●●
●
●
●
●
●
●
●●●
●●●
●●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●
●●
●
●
●
●●●
●●●
●●
●
●
●
●
●
●●
●
●●●
●
●
●
●●
●●
●
●
●●
●●
●
●
●
●●●●
●
●
●
●●●
●
●
●
●
●●
●
●
●●●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●●●
●●
●
●
●
●
●●
●
●
●●
●
●
●
●
●●
●●
●
●
●●
●
●
●
●●
●●
●●●●
●
●
●
●
●
●
●
●●
●
●●
●●●●
●●
●
●●●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●●
●●
●
●
●
●●
●
●
●
●
●
●●
●●●
●
●
●
●●●
●●
●
●
●
●●
●
●
●●●●
●
●●●●
●
●
●●
●●
●
●
●●●●
●
●
●
●
●
●●
●
●●
●
●
●
●●
●
●
●
●●●
●
●
●●
●
●
●●
●
●●●●
●
●
●●
●
●●
●
●
●
●●●●
●
●●
●
●●●
●
●
●●●
●
●
●●
●●
●
●●●
●
●
●●
●●
●●●●●●●
●
●●●
●
●●
●
●
●●●●
●
●
●
●
●●
●
●●●●
●
●
●
●●
●
●
●●●
●
●
●●●
●●●
●
●
●
●
●
●
●●●●●●
●●●
●
●
●
●
●
●
●●
●
●●
●
●●
●
●
●
●●●
●
●
●●
●●
●
●
●●
●
●
●
●
●●●●
●●
●●●
●
●
●
●
●
●
●●●
●
●
●●
●
●●
●
●
●●
●●
●
●●
●●●●
●
●●
●
●●●●●
●
●
●●
●
●●
●●
●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●●●●
●●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●●
●
●●
●
●●●
●●●●
●●●●●
●●
●
●
●
●●●
●
●
●●
●
●
●
●
●●●●●●
●
●
●●
●
●
●●
●
●
●●●●
●●
●●●●●●●
●●●●
●●
●
●
●
●●
●●●
●
●●●●
●
●●●
●
●●
●
●
●●
●●●
●
●●
●
●
●
●
●
●
●●●●
●
●●●
●
●
●
●
●
●●
●
●
●
●
●●
●●●●●●●
●
●
●
●
●
●
●●●●●●
●●●
●●
●
●
●●
●
●
●●
●
●●
●●●●●
●
●●
●●
●●●●
●
●
●
●●●●
●
●●●●
●●
●●●
●
●
●●
●
●●●●●●●●
●●●●
●●●●●●
●
●
●
●
●
●
●●
●●
●
●
●
●
●●
●●●●●●
●●●
●●
●●●
●●
●
●
●
●
●
●●
●●●●
●
●●●
●
●
●●●
●
●
●●
●
●
●
●●
●
●●
●
●●●
●●
●
●●●●●
●
●
●●●●●
●
●
●●●●
●●●
●●●
●●●
●●●●●●●
●
●●
●
●
●●●
●●●●●
●
●
●
●
●
●
●
●●●
●
●●●●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●●
●●
●●
●
●
●
●
●●
●
●●●
●●
●●●
●
●
●
●●
●●
●
●●
●
●●
●
●
●●●●
●
●●●
●●
●
●
●●●
●
●
●
●
●
●
●
●
●●●●
●
●
●●
●
●●
●
●●
●
●●●
●●●
●
●
●
●●●
●
●
●●●
●
●
●
●
●●
●●●●●●●
●●
●
●●
●●●●
●●●●
●
●
●●
●
●
●
●
●●
●●●
●
●
●
●●
●●
●
●
●
●
●
●
●
●●●
●
●
●
●●
●
●●●●●
●
●
●
●
●
●
●●
●●
●●●
●
●
●
●
●●
●
●●
●
●
●●●●●●●
●
●
●
●
●
●
●●●
●
●
●
●
●●
●
●●
●
●●
●
●
●
●
●●●●●
●
●
●●
●
●
●●●
●
●
●
●
●●
●
●
●
●●●●
●●
●
●
●
●●
●
●●●
●
●●
●●
●
●
●
●
●●
●
●
●
●●
●
●●
●
●●
●●
●
●●
●●
●
●
●●●
●●
●
●
●
●●●
●
●●●
●
●
●
●●
●
●●●
●●
●●
●
●
●●●●●●●●
●●
●●●●●
●
●
●
●●
●
●
●●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●●
●●●
●
●
●
●
●●
●
●●●
●
●●
●
●
●●●
●
●
●
●●
●●●●●●●
●
●
●
●
●
●
●
●●●●
●●
●
●
●●
●
●
●
●●●
●
●
●
●
●●●●●
●
●●
●●
●
●
●●●●
●●●
●●
●●●
●●
●
●
●
●
●●
●
●
●●●
●●●
●●●
●
●
●
●●
●
●●●
●
●●
●●
●●●
●
●
●
●
●
●
●●●●●
●
●
●
●
●●●●●●●●●
●●
●●
●●●●
●●●●
●
●
●●●●
●●●
●●
●
●
●
●●●●●●
●
●●●
●●
●
●●
●
●●●●
●●●
●
●●●
●●●
●
●
●●●●●●
●●
●●
●
●
●
●●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●●●●●
●●
●●●
●●●●●●
●
●●●
●●
●
●●●
●●
●●
●
●
●
●●
●
●●
●
●
●●
●
●●●●●
●
●
●
●●●●
●
●●
●
●
●
●
●
●●
●
●●
●●
●●
●●●●
●
●●●●
●●●
●●●●●●
●
●
●
●
●●●●
●
●
●●
●●●●
●
●●●●●●●
●●
●●
●
●
●
●
●
●●●●
●
●
●
●●●●●●●
●●●●●●
●●
●
●
●●
●
●
●●●
●
●●
●
●●●●
●
●
●
●●
●
●
●●●
●
●●
●●
●●
●●
●●
●●●
●●
●●●●
●
●●
●
●●
●
●●●●
●
●●
●●●●●●●
●●●
●●●
●
●
●
●●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●
●●●●
●●
●
●●
●
●
●●●
●●●
●
●●
●
●●●●●●
●●●●
●
●
●
●
●●●●
●●●
●
●●
●
●●●
●●
●
●●●●
●●●●●●●
●
●
●
●●●●
●●●●●
●
●
●●●●●●
●
●●
●
●
●
●
●●●●●●●●
●●
●●
●
●
●●●
●
●●●●●●●●●
●●●●●●●●●●
●
●
●●●
●●
●
●●●
●●
●●●●●
●
●
●●●●
●
●●●●
●
●
●●●●●
●●●●●
●●●●●
●●
●
●
●●●●
●●●
●
●
●●
●●
●
●●
●●
●●●
●●●●●
●●●●●●●
●●●●●●●●
●●●
●
●
●●●●
●●●
●●
●●
●
●●●●●●●
●●●
●
●
●
●
●
●
●
●●●●
●
●●●
●
●
●
●
●●
●●●●
●●●●
●
●●
●
●
●
●
●
●●●●●
●
●
●●●●
●●●●●●
●
●
●
●●●
●●
●●
●
●
●●
●
●
●●●●●●●
●
●
●●●●●
●
●●●●
●
●●
●
●
●
●
●●●●●●●
●
●●●●●●●●
●
●
●
●●
●
●
●
●●●●●●●
●
●●●●●●●●●●
●
●●●
●
●●●
●
●
●●●●●
●
●
●●●
●●●●●
●●
●
●●●
●
●●●●●●
●
●●●
●●
●●●
●●
●●●●
●
●●●●●
●
●
●●●
●●●
●
●●●
●
●
●
●●●●●●●
●●
●●
●●
●●●●●●●●●●
●●●●
●
●●
●
●●●●●●
●
●●●●●
●●●●●●●●
●●●●●●●●●●●●●●●
●●
●
●●
●●●●●●
●
●●●●●●●●●●●●●
●●●●●●●●●●●●
●
●●●●●●●●●●●●●●●●●●●●●
●●●●●●●
●
●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●
●●●●●
●●●●
●
●●●●●●●●●●
●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
0
1000
2000
3000
0 1000 2000 3000 4000 5000Request
mill
ise
con
ds Simulation: End−To−End Response Time
0e+00
2e−04
4e−04
6e−04
0 1000 2000 3000Request
de
nsi
ty
Experiment
0e+002e−044e−046e−048e−04
0 1000 2000 3000Request
de
nsi
ty
Simulation
Figure 12: EIS End-To-End Response Time (ms)
- Experiment 1 vs. simulation results comparison
with 1 WK and 1 ST VMs
CPU, memory and network utilization are identified for eachservice-local operation and remote service calls, as shown inFig. 1. These identified parameters are then used for creat-ing CloudSim cloudlets. The chain of cloudlets is then sub-mitted for execution, starting with the CS create-session op-eration. Subsequently, each cloudlet’s completion will trig-ger the creation of a cloudlet for the next dEIS operation.Finally, when the last operation in the end-to-end request,the request execution time will be recorded.
4. EVALUATION RESULTSWe aim to evaluate the CloudSim simulation’s ability to
model and reproduce the properties of the targeted dis-tributed application. For this purpose, we used Kolmogorov-Smirnov (KS) [6] statistical test and linear dependency re-gression coe�cient [10] for comparing the simulation andexperimental results. We also evaluated the model’s abil-ity to simulate environments with di↵erent numbers of VMsand di↵erent concurrent workload. The simulations used thesame concurrent workload values as the real-world scenariopresented in Section 3.
The two-sample KS test compares cumulative distribu-tion functions (CDF), and the test statistic is the maximumdi↵erence in CDF value, as defined by Equation 4,
Dn,n0 = supx
|F1,n(x)� F2,n0(x)| (4)
where F1,n and F2,n0 are the empirical distribution func-tions of the first and the second sample respectively.
In Fig. 9 we show the comparison between the simulatorinput values (Profile performance traces) and the outputproduced by CloudSim, showing very similar density distri-butions of the execution times. The di↵erence between thedistribution of values is low, as indicated by a D value of0.0855 of the KS test.
We also validated the ability of the simulation model tocorrectly reproduce end-to-end response times under con-stant concurrent workload. In Fig. 11 we show the KStest values and linear dependency between the values gath-ered in experiment and simulation. The graphs show a goodcorrelation with a value of 0.3 of KS statistic (maximum
15
1000
2000
17:18 17:20 17:22 17:24 17:26Time
mill
ise
con
ds Experiment: End−To−End Response Time
●●●●●●●●●●●●●●●●
●●
●
●●●●●●●●●●●●●●●●●●
●●
●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●
●●●
●
●
●
●●●●●●●●●●
●●●●
●
●●●●●●●●●●●●●
●
●●
●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●
●●●●●●●●●●●●●●●●
●●●●
●●●
●
●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●
●●●●●●●●●
●●
●●
●
●●●
●
●●
●
●●●●●●●●●●
●
●
●●●●●●●●●●●●
●
●●●●●●●●●●●●●●●●●●●
●●●●●
●
●
●●
●
●●●●●●●●●●●●●●
●
●
●●●●●●●●●●●●●●●●●●●●●●
●
●●●●●●●●●
●
●●
●
●●
●
●
●●●●
●
●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●
●●●●●●●●
●●
●●●●●●●●●●
●●●●●●
●●
●●
●
●
●●
●●●●●●●●●●
●●●●●●●●●
●
●●●●●●●●
●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●
●●●●●●●●●●●●●●●●●●●
●
●●●●●●●●●●●●●●●●●
●●●
●●
●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●
●●●●●●●●●●●
●●●●●●●●●
●
●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●
●
●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●
●●
●
●
●●●●●●●●●●●●●●●●
●
●
●
●
●●●●●●●●●●●●●●
●
●●●
●●●●●●●●●●●●
●
●●●●●
●●●●●●●●●●
●
●●●●●●
●●●
●
●●
●
●
●●●●●●●●●●●
●
●
●
●
●●
●●●
●●●●●●●●●●●●●●●●●●●●●●●
●
●
●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●
●
●●●●●●●●●●●●●●●●●●
●
●
●●●●●
●●●
●
●
●●●
●
●●●●●●●●●●●●
●
●●●●●●●●●●●●●●●●●
●
●●
●●●●●●●
●●
●
●●
●●●●
●
●●●●●●●●●●●●●●●●
●
●●●
●●●●
●
●●●●●●●●●●●●
●
●●●●●●●●
●●●●●●●●●
●●●
●●●●●●●●
●
●●
●●
●●●
●
●●●●●●●●●●●●●●●●●●●●●
●
●●●●●●●●●●●●●●●●●●
●
●
●●●●●●●●●●●●●●●●
●
●
●●●●●●●●●●●●●●●●●●●●●●●●●●●
●
●●●
●
●●●●●●●
●●●●●●●●●●
●●●●●●
●
●
●
●●●●●●●●
●
●●●●
●●
●
●
●●●
●●
●
●
●
●●●
●●●●●
●●
●●
●●●●●
●●●●●●●●●
●●●●●●●●●●
●●●
●
●●●●●
●●●●●●●●●●●●●
●●●●●
●●●●●●●
●
●●●●●●●●●●●●
●●●
●●●●●●●
●●●●●●●
●●●●
●
●●●●●●
●
●
●
●●●
●
●
●●●●●●●
●●
●
●●●●●●●●●●●●●●●
●
●●●●
●●
●
●●●●●●●●●●●
●
●
●
●●●●
●●●●●●●●●●●●●●
●
●●●●
●●
●●●
●
●
●●
●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●
●●●
●
●●●●
●●●●
●
●
●
●●
●
●
●
●
●
●
●
●
●●●
●
●●●●●
●●
●
●●●
●
●
●
●●
●
●
●●
●●●●●
●●
●
●●●
●●●●●●●
●
●
●●●
●
●●
●
●
●
●●●●
●
●●●●●●●●●●●●●
●
●●
●●●●●●●●●●●●●●●●●
●●●●●●●●●●
●●●●●●
●
●●●●●●●●●●●●●●●●●●
●●
●
●●●●●●●●●●●●
●
●
●
●●●●●●●●●●●●●●●●
●●
●
●●●
●
●●●●●●●
●
●●
●
●●●●●●●●●●●●
●●●
●
●●●●●●●
●●
●●●●●●●●●●●●●
●●●
●●●●●●●
●
●●●●
●
●
●●●
●
●●
●●●
●
●
●
●●●
●
●
●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●
●
●
●●
●
●●●●
●●●●
●
●
●●●●●●●
●●
●
●
●●●●●●●●
●●●●
●●
●
●●●●●●●●●●●●●●●●●●●●●●
●●●
●●
●●●●●
●
●●●
●
●●●●●●
●
●●●●●●●●●●●●
●●●
●●●●●
●
●●●●●●●●●●●●●
●
●
●●●●
●
●●●
●
●
●
●●●
●●●●
●
●●
●●
●●
●
●●●
●
●
●●
●●
●●
●●
●●●●
●●
●●●●●●●●●
●
●●●●●●●
●
●
●
●●●●●
●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●
●
●●
●
●●●
●●●
●
●●●●●●●●
●●●●●●●
●
●
●●●●●
●
●
●●
●
●●●●
●
●●
●
●●●●●●●●
●
●●●●
●●
●●●●
●●●
●
●●●●●●●
●
●●●
●●●
●●
●●
●●
●●●●●●●●●●●
●
●
●
●
●
●●●●
●
●
●●
●
●●●●●●●●●●●
●
●●
●
●
●
●●●●
●
●
●
●●●
●
●
●●●
●●●●●
●
●
●
●●●
●
●
●●●●●●●
●●
●●
●
●●
●●●●●●●●●
●
●
●
●●●
●
●
●●
●
●●●
●●
●
●
●
●●
●
●●●●●●●●●
●
●●
●
●
●
●●
●
●●●
●●
●●
●
●●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●●●
●●●●●●●●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●●●●
●
●
●●●●●
●
●
●●
●●●
●
●
●●
●
●●
●
●
●
●
●
●
●●●●
●
●
●●●●●●
●●●
●●●●●
●●
●●
●●
●
●
●●●●
●●
●
●●
●●●●●●
●
●
●
●
●●●●●
●●
●●●●●
●●●●●
●
●●●●●●
●●
●●●●●●●●
●●
●
●●
●●●●
●●●●●●●●●●
●
●
●●●●
●
●●
●●●●●●●●●●●
●
●●●●●●
●
●
●
●●
●
●
●
●
●●
●●
●
●
●●●●●
●
●
●
●
●
●●●●●
●●●●
●●●●
●
●●
●
●●
●
●●●
●●●●●●●
●
●●
●
●
●●
●
●
●
●●●●
●
●●●●●
●
●
●
●●●●
●
●●
●
●●●●
●
●●●●
●
●
●
●
●●
●●●
●
●●
●
●●
●●
●
●●
●
●●
●●●●●
●●●
●
●
●
●
●
●●●
●
●
●●
●
●
●●●●●●
●
●●●●
●
●●●●
●●
●●
●●●●●●●●●●●●●
●
●●●●
●
●●●●
●●●
●
●●●
●●
●●●●
●
●●
●●
●
●●●●●
●
●
●
●
●●●●
●
●
●
●
●
●●●●
●
●●●●
●●●
●●
●
●
●●●●●
●●
●●
●
●●●
●
●
●
●
●●
●●●●●
●●●
●
●
●●
●●
●
●●
●
●
●●●
●
●●●
●●
●●●●●●
●
●●
●●●
●
●●●
●
●
●
●
●●
●
●
●●●●●●●●●●●
●●
●
●
●●
●●●
●
●
●●●
●
●●●●●
●
●●●●●●●●
●●●●●●●
●●
●●
●●●
●●
●
●
●
●●●●●●
●
●
●●●●
●
●●●●●●
●
●●
●●
●
●
●
●●●●
●●●●
●
●●●●
●●
●
●●●●●●
●
●●
●
●
●
●
●●
●●
●
●
●●●●
●
●●
●
●●●●
●
●●●
●
●
●●
●●
●
●
●
●●
●
●●●●●●●●
●
●●●●●
●
●
●
●
●
●
●●●
●
●
●●
●
●●
●●●●●
●
●●●●
●●
●●
●
●
●
●●●●
●
●
●
●
●●●
●●●
●
●
●●●
●
●
●●
●●
●●●●●●
●
●●●●
●
●●●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●●●●
●
●●●●
●
●●●
●
●●●●
●●
●●●
●
●
●●●
●
●
●
●●
●
●
●
●●●
●
●●●●
●●
●
●
●●
●
●
●
●●●●
●●
●●●●
●●●
●●
●
●●●
●●
●
●
●
●●
●
●
●
●●
●
●●●●
●
●●
●●●●●●
●
●●
●
●
●●●
●
●
●●
●
●
●●
●
●
●
●
●●
●●
●
●
●●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●●●
●
●
●●
●●
●
●
●●●●
●
●
●●●
●
●
●●●
●●
●●
●●●●
●●●
●●●●●
●●●
●
●
●
●
●
●
●●●
●
●
●
●
●
●●●●●
●
●●
●●●
●●●●●●●●●
●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●●●●●●●
●
●
●●
●
●
●
●
●
●●●
●
●
●
●
●●
●
●●●
●●●
●
●●
●
●●
●
●
●●
●●
●●
●
●
●
●●
●
●●●●
●●
●●
●
●
●
●
●
●●
●
●●
●
●●●
●
●●●●●●
●●
●
●●●●
●
●●●
●
●
●●●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●●●●
●●
●●
●
●
●
●
●
●●
●●●●●●●
●
●
●●●
●
●
●
●
●
●
●●●
●●
●●
●
●
●
●
●
●●
●●●●●●
●
●
●●
●
●
●
●●●
●
●
●
●
●●●●
●●
●
●
●●
●
●
●
●●
●●●●●
●●
●●
●●
●
●
●
●●
●
●
●
●
●●●
●●●●●
●
●
●
●
●
●●●
●
●
●
●●
●
●●●
●
●●●
●
●●
●
●●●●●●
●●
●
●
●
●●
●
●
●
●●
●
●●
●●
●
●
●●●●●
●●●●●
●
●
●
●
●
●●
●
●
●●
●●
●●●●
●●●
●●
●
●
●●
●
●●●●●●
●●
●●●
●
●
●●
●
●
●
●
●●
●
●●
●
●●
●●
●
●
●
●
●●
●
●●
●●
●
●●●●●●●●●
●
●
●
●
●
●
●
●●●●●
●
●
●●●
●
●
●●●
●
●
●
●
●
●●●●●
●●●
●●●
●●●●●●●●●●●
●●
●
●
●●●
●●
●●●●
●
●●
●
●
●●●●●●
●
●●
●
●
●●
●
●
●●●●
●
●
●
●●
●●●●●●
●●
●●●
●
●
●
●
●
●●●
●
●
●
●●
●
●
●
●●
●
●
●●●
●
●●
●●●
●●
●
●
●●
●
●
●
●
●
●
●●
●●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●●●
●
●●
●
●
●
●●●●
●
●●●
●●●
●
●●
●
●●
●
●●
●
●
●●
●●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●●●
●●
●
●
●●●
●
●
●●
●
●●
●●●
●
●
●
●
●
●
●
●
●
●●●
●
●
●●
●
●●
●
●
●
●
●
●●●
●
●
●
●
●
●
●●
●●
●
●●●
●
●
●
●
●
●●●
●
●
●
●
●●
●●
●
●
●
●
●
●
●
●
●●●●●●
●●●●●
●
●●
●
●●
●●
●●●●
●
●
●●
●
●
●
●●●
●
●
●●●●●
●
●
●●●●
●
●●●●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●●
●
●●●
●●
●
●
●●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●●●
●
●●●
●
●
●
●
●
●●
●
●●●
●●●●
●
●●●●
●
●
●●
●
●
●
●●
●
●●●
●
●
●
●
●
●
●●●●
●
●
●●●
●
●
●
●●●●●
●●
●●
●
●
●●●●
●
●●
●●●●●
●
●
●
●●●●●●
●●
●●
●●
●
●●●●
●●●
●
●
●
●●●
●●
●
●
●
●
●●
●
●
●
●
●●
●●
●●●●
●
●
●
●
●
●
●●●
●
●●●
●
●●
●
●●
●●
●
●
●
●
●●●
●
●●
●
●
●
●
●
●●
●●
●
●
●
●
●●●
●
●
●
●●
●
●●●
●
●●●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●●●●
●●●●●●
●
●●●
●
●
●●●
●
●
●
●●●
●
●●
●
●●
●
●
●
●
●
●
●
●●●
●●
●
●
●
●
●
●●●
●
●●
●●
●
●
●●
●
●
●
●
●●●●
●
●
●
●
●
●
●●●
●
●●
●
●
●
●
●●●●●
●●●
●
●●
●
●
●
●●
●
●●●●●●●●●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●●
●●●●
●
●●
●
●●●●
●
●
●
●
●●●
●
●
●
●●
●●
●
●●
●
●●●
●
●
●●
●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●
●
●
●●
●
●
●●●
●
●●
●
●
●
●
●
●
●●
●●
●
●●●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●●
●
●●
●●
●
●
●
●●
●
●●
●●
●●●
●●●
●●●●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●
●●
●
●●●●●
●
●●●
●●●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●●●
●
●
●
●●
●
●
●●
●
●
●
●
●●●
●
●●
●●
●●
●●
●
●
●
●
●
●
●●
●
●
●
●●
●●
●
●●
●
●●
●●●
●●●
●
●
●
●
●
●●●
●
●
●●
●
●●
●●
●
●
●●
●
●●
●●●
●●
●●
●
●●
●●
●
●●●●
●●
●
●●
●
●
●
●
●●●
●
●
●●
●
●
●
●
●
●
●
●●
●
●
●●
●
●
●
●
●●●
●
●
●
●●
●●
●
●●
●●●●
●
●
●●
●
●
●
●●
●●
●
●●●
●●●
●●
●
●
●●●●
●●
●●
●
●●
●●
●
●
●
●
●
●●●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●●
●
●●●
●●
●
●
●
●●
●
●
●
●
●
●
●●
●●
●
●
●●
●
●
●
●●●
●
●●●
●
●
●●●●●●●●●●
●
●
●●●●●
●
●●
●
●
●
●●
●
●●
●
●●
●
●
●
●
●
●
●●●
●
●●●
●
●
●
●
●
●●
●●●
●
●●●
●
●
●
●●●
●
●●
●
●
●
●●●
●
●
●
●
●
●
●
●●
●
●
●●
●
●●
●
●
●●●
●
●●
●
●
●
●
●
●
●●
●●●●
●
●
●
●●●
●●
●
●●
●●●
●●
●
●
●
●●●●
●
●
●
●
●
●
●●
●
●●
●
●
●
●●●●●●
●
●
●
●
●●●●●●
●●
●
●●
●
●●●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●●●
●●●
●●●
●●●●
●●●
●●
●
●
●●
●●
●
●●●●
●
●
●
●●●●●●●●
●●●●●
●●●
●●●
●
●●●
●
●
●●
●
●●
●●●
●
●
●
●
●●●●
●
●
●
●
●
●●●●
●
●
●
●
●●●●●
●
●
●●
●●●
●●
●
●
●●
●
●●●●
●●
●
●
●
●●●●
●
●
●
●
●
●
●
●●●
●
●●●
●
●
●●●
●
●
●
●
●●●
●
●
●
●
●
●●
●●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●●●
●●
●●
●
●
●●
●
●●●
●
●
●
●●
●●
●
●
●
●●
●●
●
●
●●
●
●
●●●●●
●●
●●
●
●
●●●●
●
●
●
●●●●●
●●
●●
●●
●●●●
●●●
●
●●●
●
●●●
●
●
●
●●
●●
●
●●●
●
●
●●●●●
●●
●
●●●●●
●
●●
●
●●●●●
●
●
●
●
●●
●●●
●
●
●
●
●●●
●
●
●
●
●
●
●
●●●
●
●●●
●
●●●
●
●
●
●●●●●●
●
●●●●
●
●
●●●●
●●
●●
●●
●●
●●
●
●●●
●
●●
●●●●
●●
●
●
●●●●●
●
●
●
●
●
●●
●
●
●
●●
●●●●
●●
●
●●●
●●
●
●
●
●●
●●
●
●
●
●
●●
●
●●
●
●
●
●
●●●
●●
●
●●
●●●
●●●
●●●
●
●
●
●●
●
●
●●
●●
●●●
●
●●●●●●●●●●●●●
●
●
●●
●
●●
●
●
●●●●●
●●●●
●●
●
●
●
●
●
●
●
●
●●●●●●
●
●●
●
●●
●
●
●
●●
●●
●
●
●
●●
●●●
●
●●
●
●
●
●
●
●●
●
●
●●●
●
●
●●●●
●
●
●
●
●
●●
●●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●●●
●
●
●
●
●●●
●
●
●●
●
●●
●
●●●●●
●
●
●●●
●
●
●
●●
●●●●●
●
●
●
●●●
●●
●
●
●
●●●
●
●●
●
●●●
●●●
●●
●
●●●●
●
●
●●
●
●●
●
●●●
●●
●
●
●
●
●
●
●
●●
●
●●
●●
●
●
●●●
●
●
●
●
●●●
●●●●
●
●
●
●
●
●●
●●
●
●●
●●
●
●●
●●
●●●
●
●
●●●
●●
●
●
●
●●
●●●
●
●
●●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●●
●●
●
●●●●●
●●
●
●
●
●
●●●●
●
●
●●
●●
●
●●
●●●●
●
●●●●●●
●●
●
●●●
●
●
●●
●●●
●●●●●●●●●
●
●●
●
●
●
●●
●●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●●
●●●●
●●
●
●
●
●
●
●
●
●●
●
●
●
●●
●
●
●●
●●
●
●
●●●
●●
●
●●
●
●●
●
●
●
●
●
●●
●●
●
●●●
●●
●●●●●
●●●
●
●●
●●●●●●●●●
●
●
●●
●●
●
●●
●
●●
●●●●●
●
●
●
●●
●
●●
●
●●
●
●●●●
●●
●●●
●●
●
●
●●
●●
●
●
●
●●●●
●
●
●
●
●
●●●●
●●
●●
●
●
●
●●
●
●
●
●
●●
●
●●
●
●
●●
●
●
●
●
●●
●
●●●
●
●
●
●●
●●
●
●
●
●●
●
●
●
●
●●
●●●
●
●
●●
●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●●
●
●●●
●
●
●
●●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●●●
●
●●●●
●
●
●●
●
●
●
●
●●●●
●●
●●●
●
●●
●
●●
●
●●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●●●
●●
●●
●
●
●
●●●●
●
●
●
●●●●●
●
●●
●
●
●
●
●
●
●●●●
●
●●
●
●
●●●●
●
●●●●●●●●●
●
●●●●●●
●
●
●
●
●●●
●
●●
●
●
●
●●
●●●●●●●
●
●●
●
●
●●●●
●●●
●
●
●
●
●●
●●
●
●
●
●●
●●
●
●
●
●●●
●
●
●●
●
●
●●●●●●●
●
●●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●●
●
●●
●
●
●
●
●●
●
●●●
●
●
●●
●●
●●●●●
●
●●
●
●
●●●
●
●
●
●
●
●
●●
●
●
●●
●●
●
●
●
●
●●
●
●●
●
●●
●
●
●●
●
●●●●
●
●●
●
●
●●●
●
●●
●●●
●
●●
●
●
●
●
●●
●
●●●●
●
●
●●●
●
●●●
●
●●●●
●●
●●●●
●
●
●●
●●
●●●●
●
●
●
●●
●
●
●
●
●
●●●
●
●
●●●
●●
●●
●
●●●●
●
●
●●
●
●
●
●●
●
●●
●
●
●●
●●●●
●●
●●
●
●●
●
●
●
●
●
●●
●
●
●
●●●
●
●
●●●
●●●
●●
●●
●
●
●
●
●●
●
●●●●
●●●●●
●
●
●
●
●●●●●
●
●●●
●
●
●
●
●●●
●
●
●
●
●
●●●●●
●
●
●
●
●●●
●
●
●
●
●●
●
●
●●●
●
●●
●●
●●
●●●
●
●
●●
●
●
●●
●
●
●●
●
●●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●
●
●●
●
●●
●
●●●●
●
●
●●●●●●
●●●
●●
●
●
●
●
●●
●●●●
●●
●
●
●●●
●●●
●
●
●
●●●●
●
●●
●●
●
●●●
●●●●●●●●
●●●●
●●●●
●●●
●●●
●●●●
●
●
●●●●
●
●
●●●●
●
●●●
●●
●
●
●
●
●●
●
●
●
●●●
●●
●
●●
●
●●●●
●
●
●
●
●
●
●
●
●●●
●
●●
●
●●●●●
●
●●
●
●
●
●
●●●●●●●
●
●
●
●●
●
●●
●
●●●
●
●
●
●●●●●●
●
●●
●●
●
●
●
●●
●
●●●
●●
●●
●●
●●●
●
●
●
●
●
●
●
●●
●●●
●
●●
●●●
●
●
●●
●
●
●
●●
●
●●
●
●●
●
●
●
●●
●
●●
●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●●●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●●●●
●●
●
●
●●
●
●●●●
●
●
●
●
●
●
●●
●
●
●●
●
●
●
●●
●
●
●
●●●●
●
●
●●
●
●
●
●●
●●●
●
●
●
●●
●
●
●●
●
●●
●
●
●●●
●
●
●
●
●
●
●●
●
●●●
●
●
●●
●
●
●
●
●
●●
●
●●
●
●
●
●●
●
●●●●●●
●
●
●●
●
●
●
●●●●●●
●
●
●
●
●
●
●
●●●
●
●●
●
●
●●
●
●
●
●●
●
●●●
●●●●
●●●●●●●●●●●●●
●
●●●●●
●
●●
●●●●●●
●
●
●
●
●
●●●●
●
●
●
●
●
●
●
●●●●●●
●
●
●
●●
●●●●
●
●●
●
●
●●
●●●
●
●●●
●
●
●
●
●
●●
●
●●
●
●
●
●●
●●●
●
●
●
●
●●
●●●
●
●
●
●
●
●
●●
●●●
●
●●●●
●●●
●●●●●
●●●
●
●●
●
●●●●●●
●●●●
●●●●●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●●
●
●●
●
●
●
●
●●
●
●
●
●
●●●●●●
●
●
●
●●
●
●
●
●●
●●●
●
●
●
●
●
●
●
●●
●
●
●●●
●●●●●
●
●
●
●
●●●
●●●●●
●
●●●
●
●●
●●
●
●●●
●●
●
●
●
●●
●
●
●●●
●
●●●
●
●
●●
●
●
●
●●
●
●
●
●●●
●
●
●●
●●●●
●
●
●
●
●
●
●
●●●
●●
●
●●
●●
●
●
●
●
●
●
●
●●
●●●●
●●
●
●
●●●
●
●
●
●●●
●●
●●
●●
●
●●
●●●●●
●
●
●●
●●●●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●●●
●
●
●●●●●●●●●
●
●
●
●
●
●●●
●●●●●●●
●
●
●
●
●●
●●●●●
●
●
●
●●
●
●
●
●●
●●
●●●
●●●
●
●●
●●
●●
●
●
●
●●
●
●
●
●
●●
●●●●●●●●
●●
●
●
●●●●
●
●●
●
●
●
●
●●●
●●
●●●●
●
●
●
●
●●
●
●●
●●
●
●
●
●●
●●
●
●
●
●●
●●●●●●
●●●
●●●●●●
●
●●●
●●
●
●●
●●
●
●●●
●
●
●
●●
●●●
●
●●
●
●●
●●●●●
●
●●●●●
●
●
●●●●
●
●
●●
●
●
●
●
●●●
●●●●●
●
●●●
●●
●●
●●●
●
●
●●●
●
●●●●●●●
●●●
●
●
●●●
●
●
●●●●
●
●●
●
●●
●
●
●
●●
●
●●
●
●●
●
●●●
●●●●
●
●●●
●●●●
●●
●●
●
●
●
●
●
●●
●
●
●
●
●
●●●●●●
●●
●●●
●●●
●
●●●●●●●
●
●●
●
●●
●●
●
●●●
●●●
●●
●
●
●
●●●●●●●
●●
●
●●
●
●●
●●
●
●●
●
●
●●
●
●
●●●●
●●●●●●
●●
●
●●●●●●
●
●
●
●●●
●●●●
●
●
●
●
●●●●●●●●
●
●●
●
●
●●
●●
●●●
●
●
●●●●●●●●
●
●●●
●
●
●
●●
●
●●●
●
●●●●●●
●
●●●●
●
●
●
●●●●
●
●
●
●
●
●
●
●
●
●
●●●
●
●●●
●
●●
●●●
●
●
●
●
●
●
●
●
●
●
●●
●●
●●●●●●●●
●●●●●●●●
●
●
●
●
●
●
●●●●●●
●
●●
●●
●
●
●
●●
●
●
●●●
●
●
●
●
●
●
●●●
●●
●●●●
●
●●
●●
●
●
●●
●
●●●●●
●●
●
●●
●
●
●
●
●
●
●●●●●●
●
●●●
●
●
●●
●
●
●
●●●
●●●●
●
●●●
●
●
●●●●
●
●
●●
●
●●●●
●●●●●
●
●
●
●●●●
●
●●
●
●
●●●●●●●●
●
●●
●●●
●
●●●
●●
●
●
●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●●
●●●●●
●
●●
●●●
●●●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●●●
●
●●●●●●
●●●●●
●
●●
●●
●●
●
●
●●●●
●●
●
●●
●
●●●
●
●●●
●
●●●●
●●●●●●
●●●●●●●
●●●●
●
●●
●
●●
●
●
●
●
●
●
●●●
●
●
●●●
●
●
●●●●
●
●
●●
●●
●
●
●
●●●●●●●●●●●
●●●
●
●●●●
●
●
●
●●
●
●
●●
●
●●
●●
●●●
●●
●●
●●●●●●
●●
●
●●
●
●
●●●
●●●
●
●●●●
●
●
●
●
●●●
●
●●
●●●●
●●●
●●●
●●●
●
●●
●●●
●
●●●
●
●●
●
●
●●●●
●
●●●
●●
●
●●●●●●●
●●●●
●
●●●
●●●
●
●●●●●
●
●
●
●
●
●
●
●
●●●●●●●●●
●
●●●●●●●●
●
●●
●
●●
●●●●●●●
●●
●●●●●
●
●
●
●●●●
●
●●●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●●●●●
●●●●
●●
●●
●●●
●
●
●
●●●●
●
●●●
●●
●●
●●
●●●●●●●●●●●
●
●●●
●●●
●●●
●
●●●●●●
●●
●
●●
●
●●●●●●●
●
●
●●●
●
●●
●
●●●
●●●
●●
●
●●
●●●
●
●
●
●●●●●
●
●●
●
●
●●
●●●●●
●
●●●
●
●●
●●●●●●●●●●●●●●●
●●●●●●●●
●
●
●
●
●●●
●●
●
●●
●●
●
●
●●●●●●●●●●
●●
●
●
●●●●●●●●●●●●●
●●●●●
●●●●●●●●
●
●●
●●●●●
●●●●●●●●
●
●
●●●●
●
●●
●
●
●●
●●●●●●
●
●●
●
●
●
●●●●
●
●
●
●
●
●●
●●
●
●●
●●●
●●●●●●●●●●●●●●●●●
●
●●●
●
●
●
●
●
●●●●
●
●
●
●●
●
●
●
●
●
●
●●
●
●●●●●●●●●●
●●
●
●●
●
●●
●●●
●●
●●●●●●●●●
●
●
●
●●
●
●
●●●●●●●●●
●
●●●●●●●
●●●●●●●●●
●●●●
●●●●●●●●●●
●●●
●●●●●
●
●
●
●●●
●●●●
●●●●
●
●
●●●
●
●●●●
●
●●●●●
●●
●●
●●●●●●●●
●
●●
●
●●
●●●●●
●
●
●
●●
●●●●●
●●●
●
●●●●●
●
●
●
●●●●●●●●●●●●●●●●●
●●
●●●●
●
●●●●●●
●
●●
●●
●
●
●
●
●
●
●●●●●●
●
●
●
●
●
●●●●
●
●●●●●●●●●●
●
●●
●
●
●●●
●
●
●●●●
●
●
●●
●
●
●●●●●●●
●●●●●●●●
●
●
●
●●●●●●●
●●●
●
●
●●●●●●●●●●●
●
●●
●
●
●●●●●●●●
●●●
●●
●●●●●●
●●
●●●
●●●●●●●●
●
●●
●
●●●●●●●●
●
●●
●●●
●
●●●
●
●
●
●●
●
●
●
●●●●●●●
●
●●●
●
●
●
●●
●
●
●
●●●●
●
●
●●
●
●
●
●●●
●
●●●●●
●●●
●●
●●●●
●●●
●●●●●●●●
●
●●●●●●
●●
●●●●●●●●●●●●●
●●●●●●●●●●
●●●
●●
●●
●
●
●●
●●
●
●●
●●●●●●●●
●●●●●●
●●
●●
●
●
●
●
●
●●
●
●●
●
●●
●●●●●●●●●
●
●●
●
●
●●●
●
●●
●
●
●
●●●●●●●●●
●●
●
●●●
●
●●●
●●●●●●●●●●●●●●●
●
●●●●●●●
●
●●
●●
●
●●●●●●
●●●●●
●
●●●
●
●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●
●
●●●●●●
●●●●●●●●
●●
●●●●●●●●●●●●●
●●●●●●●●●●
●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●
●●
●●●●
●●
●
●
●
●
●
●
●
●
●
●●
●
●●●●●
●
●●●●
●●
●
●
●●
●●●●●●
●
●●●●●●
●
●
●●●●●
●●●●●●●●●●●●●
●●●●●●●
●
●
●
●●●●●●
●●●●●●●●●●
●
●
●
●●●●●●●●
●●●●●●●●●●●●●●●●●
●●●●●●●●
●●●●●●●●●●●●●●
●●
●
●●●
●
●●●●●
●●●●●●●●
●●●●●●●
●
●●
●●●●●●●●●
●●●●●●●
●
●●●●●
●●●●●
●
●
●●●●
●●
●
●
●●●●
●●●●
●
●
●
●
●
●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●
●
●
●●●●●●●
●●●●●●●●●
●●●●●●●
●●●●
●
●●●
●
●●●
●
●●●●
●●
●
●●●●●●●
●●
●●●●
●
●●●●●●
●
●
●
●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●
●●●●●●●●●●●●●
●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●
●
●●●●●●●●●●●●●●
●
●
●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●
●●●●●●●●
●●●●●●●
●
●
●
●
●
●●●●●●●●●●●●●●●●●
●
●●●●●
●●
●
●
●●●●●●●●●●●●
●●●●●
●●
0
1000
2000
0 2500 5000 7500 10000Request
mill
ise
con
ds Simulation: End−To−End Response Time
0.00000.00050.00100.00150.0020
0 1000 2000Request
de
nsi
ty
Experiment
0.00000.00050.00100.00150.0020
0 1000 2000Request
de
nsi
tySimulation
Figure 13: EIS End-To-End Response Time (ms)
- Experiment 2 vs. simulation results comparison
with 2 WK and 2 ST VMs
di↵erence between CDF functions), and a linear coe�cientof 1.05 between experiment and simulation results (indicat-ing that the simulation values di↵er with only 5% from theexperiment values).
In order to test the simulation model under varying work-load conditions and with a di↵erent number of VM instancesfor the dEIS services, we ran two additional experiments, asshown in Fig. 10. In the first experiment still used one VMper service. However, we varied the concurrent workloadfrom 1 to 17 and back to 1 parallel requests. In the secondexperiment we used 2 VMs for each of WK and ST services,using in total 4 servers, while the concurrent workload wasvaried from 1 to 20 parallel requests, with 5 seconds pausebefore switching to a new workload level. The experimentswere performed with real resources and then the results werecompared with the same scenario running in the simulator.
In case of experiment 1, simulation results shown in Fig.12 validated the modeling of the dependency between servicetasks durations and the corresponding number of executedCPU instructions, as the simulated end-to-end response timeclosely followed the measured dEIS response times. Theincreased variance in simulation results was caused by thesimulator’s event communication overhead and by the factthat the simulator randomly chooses the requests to be sim-ulated.
Experiment 2 validated the modeling of concurrent com-puting workloads distributed across multiple VMs. The sim-ulation results closely matched the ones measured during theexperiment experiment, as can be seen in Fig. 13.
5. CONCLUSIONSWe have presented an approach for building a simulation
model of a distributed application for concurrent workloadprocessing, by analyzing application’s performance tracesgathered in small-scale real deployments. We then showed
how to integrate the simulation model into CloudSim andhow to build a simulation with varying concurrent work-load. We have also presented an approach for modelingconcurrent computing workloads using the CloudSim sim-ulator. Finally, we validated our models by running experi-ments with varying workload and with di↵erent VM scalingfactors.
Our results show that it is possible to accurately modelthe behavior of a distributed enterprise information systemusing CloudSim, although extensions for supporting con-current task processing need to be added. Also, due tovariance in the execution times of distributed requests, thesimulation models cannot perfectly represent the real dis-tributed systems, however, a good-enough representation ofkey application-level metrics has been shown to be obtain-able.
6. REFERENCES[1] A.-F. Antonescu and T. Braun. Improving
management of distributed services using correlationsand predictions in sla-driven cloud computingsystems. In Proc. IEEE/IFIP Network Operations andManagement Symposium (NOMS), May 2014.
[2] A.-F. Antonescu, A.-M. Oprescu, et al. Dynamicoptimization of sla-based services scaling rules. InProc. 5th IEEE Internetional Conference on CloudComputing Technology and Science (CloudCom),December 2013.
[3] A.-F. Antonescu, P. Robinson, and T. Braun.Dynamic topology orchestration for distributedcloud-based applications. In Proc. 2nd IEEESymposium on Network Cloud Computing andApplications (NCCA), 2012.
[4] A.-F. Antonescu, P. Robinson, and T. Braun. Dynamicsla management with forecasting using multi-objectiveoptimizations. In Proc. 13th IFIP/IEEE Symposiumon Integrated Network Management (IM), May 2013.
[5] R. Buyya et al. Modeling and simulation of scalablecloud computing environments and the cloudsimtoolkit: Challenges and opportunities. In Int. Conf. onHigh Performance Computing & Simulation, 2009.HPCS’09., pages 1–11. IEEE, 2009.
[6] W. Conover. Practical nonparametric statistics. J.Wiley., New York, page 309aAS314, 1980.
[7] S. K. Garg et al. Networkcloudsim: Modelling parallelapplications in cloud simulations. In Utility and CloudComputing (UCC), 2011 Fourth IEEE InternationalConference on, pages 105–113. IEEE, 2011.
[8] T. Goyal et al. Cloudsim: simulator for cloudcomputing infrastructure and modeling. ProcediaEngineering, 38:3566–3572, 2012.
[9] P. Mell and T. Grance. The NIST definition of cloudcomputing. NIST special publication, 2011.
[10] C. R. Rao et al. Linear models. Springer, 1995.[11] D. Woods. Enterprise Services: Architecture. O’Reilly
Media, Inc., 2003.
16