Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
// This file is part of Moodle - http://moodle.org/
3
//
4
// Moodle is free software: you can redistribute it and/or modify
5
// it under the terms of the GNU General Public License as published by
6
// the Free Software Foundation, either version 3 of the License, or
7
// (at your option) any later version.
8
//
9
// Moodle is distributed in the hope that it will be useful,
10
// but WITHOUT ANY WARRANTY; without even the implied warranty of
11
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
// GNU General Public License for more details.
13
//
14
// You should have received a copy of the GNU General Public License
15
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
16
 
17
/**
18
 * Store performance test run + output script.
19
 *
20
 * @package    core
21
 * @category   cache
22
 * @copyright  2012 Sam Hemelryk
23
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
24
 */
25
 
26
require_once('../config.php');
27
require_once($CFG->dirroot.'/lib/adminlib.php');
28
require_once($CFG->dirroot.'/cache/locallib.php');
29
 
30
$count = optional_param('count', 100, PARAM_INT);
31
$count = min($count, 100000);
32
$count = max($count, 0);
33
 
34
admin_externalpage_setup('cachetestperformance');
35
 
36
$applicationtable = new html_table();
37
$applicationtable->head = array(
38
    get_string('plugin', 'cache'),
39
    get_string('result', 'cache'),
40
    get_string('set', 'cache'),
41
    get_string('gethit', 'cache'),
42
    get_string('getmiss', 'cache'),
43
    get_string('delete', 'cache'),
44
);
45
$applicationtable->data = array();
46
$sessiontable = clone($applicationtable);
47
$requesttable = clone($applicationtable);
48
 
49
 
50
$application = cache_definition::load_adhoc(cache_store::MODE_APPLICATION, 'cache', 'applicationtest');
51
$session = cache_definition::load_adhoc(cache_store::MODE_SESSION, 'cache', 'sessiontest');
52
$request = cache_definition::load_adhoc(cache_store::MODE_REQUEST, 'cache', 'requesttest');
53
 
54
$strinvalidplugin = new lang_string('invalidplugin', 'cache');
55
$strunsupportedmode = new lang_string('unsupportedmode', 'cache');
56
$struntestable = new lang_string('untestable', 'cache');
57
$strtested = new lang_string('tested', 'cache');
58
$strnotready = new lang_string('storenotready', 'cache');
59
 
60
foreach (core_component::get_plugin_list_with_file('cachestore', 'lib.php', true) as $plugin => $path) {
61
 
62
    $class = 'cachestore_'.$plugin;
63
    $plugin = get_string('pluginname', 'cachestore_'.$plugin);
64
 
65
    if (!class_exists($class) || !method_exists($class, 'initialise_test_instance') || !$class::are_requirements_met()) {
66
        $applicationtable->data[] = array($plugin, $strinvalidplugin, '-', '-', '-', '-');
67
        $sessiontable->data[] = array($plugin, $strinvalidplugin, '-', '-', '-', '-');
68
        $requesttable->data[] = array($plugin, $strinvalidplugin, '-', '-', '-', '-');
69
        continue;
70
    }
71
 
72
    if (!$class::is_supported_mode(cache_store::MODE_APPLICATION)) {
73
        $applicationtable->data[] = array($plugin, $strunsupportedmode, '-', '-', '-', '-');
74
    } else {
75
        $store = $class::initialise_test_instance($application);
76
        if ($store === false) {
77
            $applicationtable->data[] = array($plugin, $struntestable, '-', '-', '-', '-');
78
        } else if (!$store->is_ready()) {
79
            $applicationtable->data[] = array($plugin, $strnotready, '-', '-', '-', '-');
80
        } else {
81
            $result = array($plugin, $strtested, 0, 0, 0);
82
            $start = microtime(true);
83
            for ($i = 0; $i < $count; $i++) {
84
                $store->set('key'.$i, 'test data '.$i);
85
            }
86
            $result[2] = sprintf('%01.4f', microtime(true) - $start);
87
 
88
            $start = microtime(true);
89
            for ($i = 0; $i < $count; $i++) {
90
                $store->get('key'.$i);
91
            }
92
            $result[3] = sprintf('%01.4f', microtime(true) - $start);
93
 
94
            $start = microtime(true);
95
            for ($i = 0; $i < $count; $i++) {
96
                $store->get('fake'.$i);
97
            }
98
            $result[4] = sprintf('%01.4f', microtime(true) - $start);
99
 
100
            $start = microtime(true);
101
            for ($i = 0; $i < $count; $i++) {
102
                $store->delete('key'.$i);
103
            }
104
            $result[5] = sprintf('%01.4f', microtime(true) - $start);
105
            $applicationtable->data[] = $result;
106
            $store->instance_deleted();
107
        }
108
    }
109
 
110
    if (!$class::is_supported_mode(cache_store::MODE_SESSION)) {
111
        $sessiontable->data[] = array($plugin, $strunsupportedmode, '-', '-', '-', '-');
112
    } else {
113
        $store = $class::initialise_test_instance($session);
114
        if ($store === false) {
115
            $sessiontable->data[] = array($plugin, $struntestable, '-', '-', '-', '-');
116
        } else if (!$store->is_ready()) {
117
            $sessiontable->data[] = array($plugin, $strnotready, '-', '-', '-', '-');
118
        } else {
119
            $result = array($plugin, $strtested, 0, 0, 0);
120
            $start = microtime(true);
121
            for ($i = 0; $i < $count; $i++) {
122
                $store->set('key'.$i, 'test data '.$i);
123
            }
124
            $result[2] = sprintf('%01.4f', microtime(true) - $start);
125
 
126
            $start = microtime(true);
127
            for ($i = 0; $i < $count; $i++) {
128
                $store->get('key'.$i);
129
            }
130
            $result[3] = sprintf('%01.4f', microtime(true) - $start);
131
 
132
            $start = microtime(true);
133
            for ($i = 0; $i < $count; $i++) {
134
                $store->get('fake'.$i);
135
            }
136
            $result[4] = sprintf('%01.4f', microtime(true) - $start);
137
 
138
            $start = microtime(true);
139
            for ($i = 0; $i < $count; $i++) {
140
                $store->delete('key'.$i);
141
            }
142
            $result[5] = sprintf('%01.4f', microtime(true) - $start);
143
            $sessiontable->data[] = $result;
144
            $store->instance_deleted();
145
        }
146
    }
147
 
148
    if (!$class::is_supported_mode(cache_store::MODE_REQUEST)) {
149
        $requesttable->data[] = array($plugin, $strunsupportedmode, '-', '-', '-', '-');
150
    } else {
151
        $store = $class::initialise_test_instance($request);
152
        if ($store === false) {
153
            $requesttable->data[] = array($plugin, $struntestable, '-', '-', '-', '-');
154
        } else if (!$store->is_ready()) {
155
            $requesttable->data[] = array($plugin, $strnotready, '-', '-', '-', '-');
156
        } else {
157
            $result = array($plugin, $strtested, 0, 0, 0);
158
            $start = microtime(true);
159
            for ($i = 0; $i < $count; $i++) {
160
                $store->set('key'.$i, 'test data '.$i);
161
            }
162
            $result[2] = sprintf('%01.4f', microtime(true) - $start);
163
 
164
            $start = microtime(true);
165
            for ($i = 0; $i < $count; $i++) {
166
                $store->get('key'.$i);
167
            }
168
            $result[3] = sprintf('%01.4f', microtime(true) - $start);
169
 
170
            $start = microtime(true);
171
            for ($i = 0; $i < $count; $i++) {
172
                $store->get('fake'.$i);
173
            }
174
            $result[4] = sprintf('%01.4f', microtime(true) - $start);
175
 
176
            $start = microtime(true);
177
            for ($i = 0; $i < $count; $i++) {
178
                $store->delete('key'.$i);
179
            }
180
            $result[5] = sprintf('%01.4f', microtime(true) - $start);
181
            $requesttable->data[] = $result;
182
            $store->instance_deleted();
183
        }
184
    }
185
 
186
}
187
 
188
echo $OUTPUT->header();
189
echo $OUTPUT->heading(get_string('storeperformance', 'cache', $count));
190
 
191
$possiblecounts = array(1, 10, 100, 500, 1000, 5000, 10000, 50000, 100000);
192
$links = array();
193
foreach ($possiblecounts as $pcount) {
194
    $links[] = html_writer::link(new moodle_url($PAGE->url, array('count' => $pcount)), $pcount);
195
}
196
echo $OUTPUT->box_start('generalbox performance-test-counts');
197
echo get_string('requestcount', 'cache', join(', ', $links));
198
echo $OUTPUT->box_end();
199
 
200
echo $OUTPUT->heading(get_string('storeresults_application', 'cache'));
201
echo html_writer::table($applicationtable);
202
 
203
echo $OUTPUT->heading(get_string('storeresults_session', 'cache'));
204
echo html_writer::table($sessiontable);
205
 
206
echo $OUTPUT->heading(get_string('storeresults_request', 'cache'));
207
echo html_writer::table($requesttable);
208
 
209
echo $OUTPUT->footer();