00001 <?php 00024 require_once( dirname(__FILE__) . '/Maintenance.php' ); 00025 00026 class mcTest extends Maintenance { 00027 public function __construct() { 00028 parent::__construct(); 00029 $this->mDescription = "Makes several 'set', 'incr' and 'get' requests on every" 00030 . " memcached server and shows a report"; 00031 $this->addOption( 'i', 'Number of iterations', false, true ); 00032 $this->addArg( 'server', 'Memcached server to test', false ); 00033 } 00034 00035 public function execute() { 00036 global $wgMemCachedServers; 00037 00038 $iterations = $this->getOption( 'i', 100 ); 00039 if( $this->hasArg() ) 00040 $wgMemCachedServers = array( $this->getArg() ); 00041 00042 foreach ( $wgMemCachedServers as $server ) { 00043 $this->output( $server . " " ); 00044 $mcc = new MemCachedClientforWiki( array('persistant' => true) ); 00045 $mcc->set_servers( array( $server ) ); 00046 $set = 0; 00047 $incr = 0; 00048 $get = 0; 00049 $time_start = $this->microtime_float(); 00050 for ( $i=1; $i<=$iterations; $i++ ) { 00051 if ( !is_null( $mcc->set( "test$i", $i ) ) ) { 00052 $set++; 00053 } 00054 } 00055 for ( $i=1; $i<=$iterations; $i++ ) { 00056 if ( !is_null( $mcc->incr( "test$i", $i ) ) ) { 00057 $incr++; 00058 } 00059 } 00060 for ( $i=1; $i<=$iterations; $i++ ) { 00061 $value = $mcc->get( "test$i" ); 00062 if ( $value == $i*2 ) { 00063 $get++; 00064 } 00065 } 00066 $exectime = $this->microtime_float() - $time_start; 00067 00068 $this->output( "set: $set incr: $incr get: $get time: $exectime\n" ); 00069 } 00070 } 00071 00076 private function microtime_float() { 00077 list($usec, $sec) = explode(" ", microtime()); 00078 return ((float)$usec + (float)$sec); 00079 } 00080 } 00081 00082 $maintClass = "mcTest"; 00083 require_once( DO_MAINTENANCE );