Changes between Version 99 and Version 100 of benchmarks

Show
Ignore:
Timestamp:
11/24/11 11:08:34 (12 years ago)
Author:
bartek
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • benchmarks

    v99 v100  
    11= Benchmarks of !QosCosGrid = 
    22== QCG-Computing == 
    3 The QCG-Computing service tests concerned the job submission and job management tasks, which are typical for this kind of a service. In the tests QCG-Computing was compared to gLite and UNICORE. The proposed two types of the tests used the following metrics: 
    4 * response time, 
    5 * throughput  
     3[[http://www.qoscosgrid.org/trac/qcg-computing/wiki/benchmarks]] 
     4== QCG-Notification == 
     5[[http://www.qoscosgrid.org/trac/qcg-notification/wiki/benchmarks]] 
    66 
    7 All the tests were performed using specially written program on the basis of the SAGA C++ library. There were utilized two adaptors offered by SAGA C++, namely: 
    8 * gLite CREAM (based on glite-ce-cream-client-api-c) - gLite (CREAM-CE service), 
    9 * OGSA BES (based on gSOAP) - UNICORE and !QosCosGrid (QCG-Computing service). 
    10  
    11 The use of the common access layer allowed to minimize the risk of obtaining incorrect results. In the same purpose, the jobs were submitted to the same resource and didn't require any data transfer.  
    12  
    13  
    14 === Testbed === 
    15 * Client machine: 
    16  * 8 cores (Intel(R) Xeon(R) CPU E5345), 
    17  * 11 GB RAM, 
    18  * Scientific Linux 5.3, 
    19  * RTT from the client's machine to the cluster's frontend: about 12 ms. 
    20 * Cluster Zeus (84. place on TOP500): 
    21  * queueing system: Torque 2.4.12 + Maui 3.3, 
    22  * about 800 nodes, 
    23  * about 3-4k tasks present in the system, 
    24  * Maui „RMPOLLINTERVAL”: 3,5 minutes, 
    25  * for the puropose of the tests, a special partition (WP4) was set aside: 64 cores / 8 nodes - 64 slots, 
    26  * test users (plgtestm01-10 and 10 users from the plgridXXX pool) were assigned on an exclusive basis to the WP4 partition. 
    27 * Service nodes (qcg.grid.cyf-kr.edu.pl, cream.grid.cyf-kr.edu.pl, uni-ce.grid.cyf-kr.edu.pl): 
    28  * virtual machines (Scientific Linux 5.5), 
    29  * QCG and UNICORE: 1 virtual core, 2GB RAM, 
    30  * gLite CREAM: 3 virtual cores, 8 GB RAM. 
    31  
    32 === Test 1 - Response Time === 
    33 The main program creates N processes (each process can use a different certificate) that invoke the function `sustain_thread`. Next, it waits for the end of all running processes. 
    34  
    35 In general, the idea of the program is to keep in a system `jobs_per_thread` jobs for `test_duration` seconds, inquering all the time (the delays between calls drawn from a defined interval) about all currently running or queued jobs. 
    36  
    37 The following snippet shows a pseudocode of the function `sustain_thread`: 
    38 {{{ 
    39 #!div style="font-size: 90%" 
    40 {{{#!sh 
    41 1. start_timer() 
    42 2. for i = 1 .. jobs_per_thread 
    43   2a: submit_job(job[i]) 
    44 3. while (current_time < test_duration) do 
    45   3a: for i = 1 .. jobs_per_thread 
    46   3a1: if (! is_finished(job[i].last_state)) 
    47     3a11: sleep((rand() / RAND_MAX) / SLEEP_COEF) 
    48     3a11: query_state(job[i]) 
    49   3a2: if (is_finished(job[i].last_state)) 
    50     3a21: submit_job(job[i]) 
    51 4. stop_timer() 
    52 }}} 
    53 }}} 
    54 The function `submit_job(job)`: 
    55 {{{ 
    56 #!div style="font-size: 90%" 
    57 {{{#!sh 
    58 1. start_timer() 
    59 2. job.job = service.create_job() 
    60 3. job.job.run() 
    61 4. stop_timer() 
    62 5. query_state(job) 
    63 }}} 
    64 }}} 
    65 The function `query_state(job)`: 
    66 {{{ 
    67 #!div style="font-size: 90%" 
    68 {{{#!sh 
    69 1. start_timer() 
    70 2. job.last_state = job.job.get_state() 
    71 3. stop_timer() 
    72 }}} 
    73 }}} 
    74  
    75 At the end of tests, the average, minimal and maximal times of submitting a job (`submit_job`) and inquiring about a job state (`query_state`) are printed. Additionally, the program displays the number of all submitted jobs, the number of successfully finished jobs (`Done`) and the number of the jobs finished with the other status (`Canceled`, `Failed`, `Suspended`). In the last case, the number of fails, i.e. exceptions returned by the SAGA adaptors, is shown.  
    76  
    77 ==== Notes ==== 
    78  
    79 ''Pros:'' 
    80 * The test reflects the natural situation in productive environments: 
    81  * approximately constant number of tasks, 
    82  * "the task flow" (when one task is finished, another begins). 
    83 * The program may be used to measure the overall capacity of the system. 
    84  
    85 ''Cons:'' 
    86 * The measured submitting time may be distorted (the response of the service on the submit request does not necessarily imply the submit to the queueing system). 
    87  
    88 ==== Plan of the tests ==== 
    89 * 50 tasks x 10 users = 500 tasks, 30 minutes, SLEEP_COEF = 10 
    90 * 100 tasks x 10 users = 1000 tasks, 30 minutes, SLEEP_COEF = 10 
    91 * 200 tasks x 10 users = 2000 tasks, 30 minutes, SLEEP_COEF = 10 
    92 * 400 tasks x 10 users = 4000 tasks, 30 minutes, SLEEP_COEF = 10 
    93  
    94 ==== Results ==== 
    95 * Average submit time of a single job 
    96   
    97  || ||= QCG 2.0 =||= UNICORE 6.3.2 =||= gLite 3.2 =|| 
    98  ||= 50x10 =||1.43||2.41||8.47|| 
    99  ||= 100x10 =||1.49||1.24^[#n 1]^||8.45|| 
    100  ||= 200x10 =||1.99||2.20||8.50|| 
    101  ||= 400x10 =||1.96||-^[#n 2]^||8.24|| 
    102  
    103  
    104 * Average time of a query about a job status. 
    105   
    106  || ||= QCG 2.0 =||= UNICORE 6.3.2 =||= gLite 3.2 =|| 
    107  ||= 50x10 =||0.38||2.73||0.20|| 
    108  ||= 100x10 =||0.35||1.61^[#n 1]^||0.36|| 
    109  ||= 200x10 =||0.63||3.73||0.24|| 
    110  ||= 400x10 =||0.47||-^[#n 2]^||0.21|| 
    111  
    112 * The system load while performing the test "200x10" (on a basis of Ganglia) 
    113 [[Image(ganglia-200x10-all.png, center, width=880px)]] 
    114  
    115 === Test 2 - Throughput === 
    116 The test is grounded on the methodology described in the paper [[http://dl.acm.org/citation.cfm?id=1533455|Benchmarking of Integrated OGSA-BES with the Grid Middleware]] and bases on measurement performed from the user perspective of the finish time of the last from N jobs submitted at (almost) the same moment. In addition to the paper, the presented test has utilized also the following elements:  
    117 * submitting the tasks by N processes/users, 
    118 * using consistent SDK, not the command-line clients, 
    119 * single test environment. 
    120  
    121 ==== Notes ==== 
    122  
    123 ''Pros:'' 
    124 * Possibility to compare results of the tests with the results presented in the mentioned publication.  
    125 * Measures the performance of the system from a user point of view (from the first job submit to the finish of the last job). 
    126  
    127 ''Cons:'' 
    128 * The test is valid only if jobs are submitted to a separated resource. 
    129 * The tasks of a scheduler of a system (Maui) may have significant impact on results (the scheduler performs complex operations from time to time). 
    130  
    131 ==== Results ==== 
    132 * 1 user, 1 thread, 500 tasks: 
    133 [[Image(zeus-throughput-500x1-1.png, center, width=640px)]] 
    134 * 1 user, 10 thread, 500 tasks (50x10): 
    135 [[Image(zeus-throughput-50x1-1.png, center, width=640px)]] 
    136 * 10 users, 10 thread, 500 tasks (50x10): 
    137 [[Image(zeus-throughput-50x10-0.png, center, width=640px)]] 
    138 * 10 users, 10 thread, 1000 tasks (10x100): 
    139 [[Image(zeus-throughput-100-10-0.png, center, width=640px)]] 
    140  
    141 === Notes === 
    142 1. The machine where CREAM (gLite) was running had more resources (in particular CPU cores and virtual memory) than the machines with QCG and UNICORE. 
    143 2. ... hovewer this machine was additionally loaded by external tasks (about 500-2000 tasks - the tests were performed by 2 weeks). 
    144 3. QCG returns the job status when the job is already in queueing system, gLite and UNICORE not necessarily. Thus, e.g. in the throughput tests, new tasks appeared after the test finished. 
    145 4. The bottle-neck (especially in the second group of tests) was the throughput of the WP4 partition and Maui, which imposed that only 64 tasks could be scheduled per one scheduling cycle (at least 3.5 minutes). 
    146  
    147  
    148 == QCG-Notification == 
    149  
    150 The QCG-Notification performance was compared to the performance of two other services implementing brokered version of WS-Notification specification. These were Apache !ServiceMix (version 3.3.1) and IBM !WebSphere Application Server (version 7.0).  
    151  
    152 A reliable performance tests of the notification systems are difficult to realise. Note that the proceeding time of a single, small message is highly short, difficult to correct measurement and highly depends on many aspects, such as machine configuration, underlying best effort transport protocols or network protocols. To overcome this problem, the time was measured not on the basis of a single send of a notification, but on the basis of multiple sends (called here bunch) assumed as an elementary event. 
    153  
    154 Taking into account these objectives as well as the fact that the tested notification systems are different: each system provides a set of specific functions that may be unavilable in the another systems (for example, !ServiceMix doesn’t provide support for Full topic dialect), the decision was to test only the most common features and focus on key scenarios. 
    155   
    156 The elementary events were performed many times and the received results were averaged. 
    157  
    158 === Testbed === 
    159 The testbed consisted of two homogenous machines connected over the 1Gb Ethernet (see the attached figure). The first machine was used to host the lightweight versions of notification systems clients, that are Publisher and !NotificationConsumer, while the second machine was dedicated for the three tested notification systems and additionally for the another instance of !NotificationConsumer to allow simple tests. 
    160  
    161 [[Image(tests-deployment.png, center, width=540px)]] 
    162  
    163 === Test 1 - Notification Delivery without Active Subscriptions === 
    164 The first test concerned the measurement of the time of sending a bunch of notifications (hovewer each notification is sent separately) while there were no active subscriptions in the tested system. That means that the time was counted on the Publisher side and the notifications were not forwarded by the brokers as there were any Notification Consumers interested in receiving notifications.  
    165  
    166 ==== Main facts ==== 
    167 * Scenario's draft: Publisher -> Notification Broker 
    168 * Time measurement: on Publisher's side 
    169 * Filtering based on: topics 
    170 * Notification dialect: Simple 
    171 * Notification payload: about 320 bytes 
    172 * Number of notifications in one bunch: 1000 
    173  
    174 ==== Notes ==== 
    175  
    176 ''Pros:'' 
    177 * Possibility to compare performance of the systems in the most basic, but typical scenario, where notifications are not forwarded to Notification Consumers. 
    178 * The delay imposed by the notification systems as well as the network may be easily measured by comparison to the times of sending notifications between lightweight Publisher and Notification Consumer programs. 
    179  
    180 ''Cons:'' 
    181 * The Publisher installed only on a single machine. 
    182 * The notification services in a default configuration and only marginally loaded (no subscriptions). 
    183 * The measurement of time on the Publisher site may be unreliable because the service can schedule the processing of notifications for future. 
    184 ==== Results ==== 
    185  
    186 [[Image(test-1.png, center, width=540px)]] 
    187  
    188 === Test 2 - Notification Delivery with Active Subscriptions === 
    189 In this test the measured value was the time of forwarding notifications from Publisher to Notification Consumer via different systems. In contrast to the previous test, here the tested systems utilized Subscriptions and on their basis determined where to send a certain notification. The next importand difference was the move of the finish time measurement from Publisher to Notification Consumer. 
    190  
    191 ==== Main facts ==== 
    192 * Scenario's draft: Publisher -> Notification Broker -> Notification Consumer 
    193 * Time measurement: on Publisher's side (start time) and on Notification Consumer's side (finish time) 
    194 * Filtering based on: topics 
    195 * Notification dialect: Simple 
    196 * Notification payload: about 320 bytes 
    197 * Number of notifications in one bunch: 1000 
    198  
    199 ==== Notes ==== 
    200  
    201 ''Pros:'' 
    202 * Possibility to compare performance of the systems in the typical scenario that takes into account notification forwarding to Notification Consumers. 
    203 * The time is measured not only by Publisher but also by Notification Consumer which gives more precise results of processing time. 
    204  
    205 ''Cons:'' 
    206 * The Publisher and Notification Consumer programs installed only on a single, the same machine. 
    207 * The notification services in a default configuration and marginally loaded (only several subscriptions). 
    208 * !WebSphere Application Server concatenates received messages if they are forwarded to the same Notification Consumer - although in general it improves the performance, sometimes it may impose delays in sending to consumers and improper results. Nevertheless this point was practically neutralized thanks to measuring the time of large amount of elementary operations. 
    209  
    210 ==== Results ==== 
    211 [[Image(test-2.png, center, width=340px)]] 
    212  
    213  
    214 === Test 3 - Subscribing === 
    215 The aim of the third benchmark was the comparison of the times of creating subscriptions in the tested systems.  
    216 In the Subscribing test, a lightweight Subscriber program created the same number of the same subscriptions in each system. Similarly to the previous tests, the time, which was measured by the Subscriber program, covered a bunch of invokes of a single Subscribe operation. 
    217  
    218 ==== Main facts ==== 
    219 * Scenario's draft: Subscriber -> Notification Broker 
    220 * Time measurement: by Subscriber 
    221 * Filtering based on: topics 
    222 * Subscription dialect: Simple 
    223 * !SubscribeRequest payload: about 300 bytes 
    224 * !SubscribeResponse payload: about 280 bytes 
    225 * Number of Subscribe operations in one bunch: 100 
    226  
    227 ==== Notes ==== 
    228  
    229 ''Pros:'' 
    230 * Possibility to compare the time of creating common subscriptions in the tested systems. 
    231  
    232 ''Cons:'' 
    233 * Only one Subscriber program. 
    234 * The notification services in a default configuration; no other operations invoked while subscribing - poorly realistic situation. 
    235  
    236 ==== Results ==== 
    237 [[Image(test-3.png, center, width=340px)]] 
    238  
    239  
    240  
    241 [=#n] 
    242 ----[[BR]] 
    243 ^1^ The test performed after the restart of the machine - caused by mulfunctioning of the LUSTRE system.[[BR]] 
    244 ^2^ Error: "End of file or no input: Resource temporarily unavailable".[[BR]]