roadrunner 4.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +3 -0
- data/README +3 -0
- data/Rakefile +41 -0
- data/bin/controller.rb +76 -0
- data/bin/hostmgr.rb +69 -0
- data/bin/nbd_prepare.sh +88 -0
- data/conf/servers.yaml +29 -0
- data/controller/dd.sh +92 -0
- data/controller/ioperf.rb +108 -0
- data/controller/mysql.rb +74 -0
- data/controller/mysql.sh +9 -0
- data/controller/svn.sh +49 -0
- data/controller/wrap.rb +23 -0
- data/lib/action.rb +14 -0
- data/lib/db.rb +51 -0
- data/lib/ended.rb +14 -0
- data/lib/init.rb +14 -0
- data/lib/model.rb +10 -0
- data/lib/report.rb +100 -0
- data/lib/roadrunner.rb +122 -0
- data/lib/rrhelper.rb +25 -0
- data/lib/rrmonitor.rb +174 -0
- data/lib/run.rb +113 -0
- data/log/dd.log +129 -0
- data/log/log.rb +17 -0
- data/log/stdout.log +4 -0
- data/log/stdout.log.20100421 +0 -0
- data/log/svn.log +502 -0
- data/test/baidu.rb +100 -0
- data/test/blog.rb +100 -0
- data/test/db/development.sqlite3 +0 -0
- data/test/download_processes.rb +38 -0
- data/test/fibonacci.rb +27 -0
- data/test/get163.rb +38 -0
- data/test/get19Lou.rb +39 -0
- data/test/getHawaii.rb +95 -0
- data/test/httpclient-rfuzz-vs-httparty.rb +31 -0
- data/test/mysql_processes.rb +66 -0
- data/test/pi.rb +37 -0
- data/test/pi_db.rb +41 -0
- data/test/pi_monitor.rb +45 -0
- data/test/prime.rb +33 -0
- data/test/prime_p.rb +36 -0
- data/test/test_db.rb +29 -0
- data/test/vbd_kv.rb +123 -0
- metadata +100 -0
data/LICENSE
ADDED
data/README
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
#
|
2
|
+
# To change this template, choose Tools | Templates
|
3
|
+
# and open the template in the editor.
|
4
|
+
|
5
|
+
|
6
|
+
require 'rubygems'
|
7
|
+
require 'rake'
|
8
|
+
require 'rake/clean'
|
9
|
+
require 'rake/gempackagetask'
|
10
|
+
require 'rake/rdoctask'
|
11
|
+
require 'rake/testtask'
|
12
|
+
|
13
|
+
spec = Gem::Specification.new do |s|
|
14
|
+
s.name = 'roadrunner'
|
15
|
+
s.version = '4.0.3'
|
16
|
+
s.has_rdoc = true
|
17
|
+
s.extra_rdoc_files = ['README', 'LICENSE']
|
18
|
+
s.summary = 'roadrunner'
|
19
|
+
s.description = s.summary
|
20
|
+
s.author = 'Charles Cui'
|
21
|
+
s.email = 'zheng.cuizh@gmail.com'
|
22
|
+
s.executables = ['controller.rb']
|
23
|
+
s.files = %w(LICENSE README Rakefile) + Dir.glob("{bin,lib,conf,controller,log,test}/**/*")
|
24
|
+
s.require_path = "lib"
|
25
|
+
s.bindir = "bin"
|
26
|
+
end
|
27
|
+
|
28
|
+
Rake::GemPackageTask.new(spec) do |p|
|
29
|
+
p.gem_spec = spec
|
30
|
+
p.need_tar = true
|
31
|
+
p.need_zip = true
|
32
|
+
end
|
33
|
+
|
34
|
+
Rake::RDocTask.new do |rdoc|
|
35
|
+
files =['README', 'LICENSE', 'lib/**/*.rb']
|
36
|
+
rdoc.rdoc_files.add(files)
|
37
|
+
rdoc.main = "README" # page to start on
|
38
|
+
rdoc.title = "dsmp Docs"
|
39
|
+
rdoc.rdoc_dir = 'doc/rdoc' # rdoc output folder
|
40
|
+
rdoc.options << '--line-numbers'
|
41
|
+
end
|
data/bin/controller.rb
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "rubygems"
|
4
|
+
require "logger"
|
5
|
+
require "yaml"
|
6
|
+
require File.join(File.dirname(__FILE__),'..','lib',"monitor")
|
7
|
+
|
8
|
+
USEAGE="Use age: controller.rb -t dd|mysql|svn|test [-f ./servers.yaml]"
|
9
|
+
(p USEAGE;return 1) if ARGV.size < 2
|
10
|
+
|
11
|
+
#-----------------------------Argv prepare.--------------------------------#
|
12
|
+
|
13
|
+
def args(key)
|
14
|
+
ARGV.each_with_index do |arg, i|
|
15
|
+
return ARGV[i+1] if "-#{key}" == arg
|
16
|
+
end
|
17
|
+
nil
|
18
|
+
end
|
19
|
+
|
20
|
+
unless args('t')
|
21
|
+
p USEAGE
|
22
|
+
p "parameter -t must be specified."
|
23
|
+
exit 1
|
24
|
+
end
|
25
|
+
|
26
|
+
#-----------------------------Log file initialize.--------------------------------#
|
27
|
+
|
28
|
+
log_file=File.join(File.dirname(__FILE__),'..','log','stdout.log')
|
29
|
+
FileUtils.rm log_file,:force=>true
|
30
|
+
|
31
|
+
File.open(log_file,"w"){|f|
|
32
|
+
f.puts "*"*60+$/
|
33
|
+
f.puts "DSMP (Distribute Store Manage Performance)".center(60,"*")+$/
|
34
|
+
f.puts "*"*60+$/+$/+$/
|
35
|
+
}
|
36
|
+
|
37
|
+
$log = Logger.new(log_file)
|
38
|
+
$log.level=Logger::INFO
|
39
|
+
|
40
|
+
$log.info "Controller Log Start".center(60,'*')+$/
|
41
|
+
$log.debug "ARGV:#{ARGV.inspect}"
|
42
|
+
|
43
|
+
#-----------------------------Servers Config initialize.--------------------------------#
|
44
|
+
|
45
|
+
conf_file=args('f')||File.join(File.dirname(__FILE__),'..','conf','server.yaml')
|
46
|
+
|
47
|
+
File.open( conf_file ) { |yf|
|
48
|
+
begin
|
49
|
+
$czservers=YAML::load( yf )
|
50
|
+
rescue Exception => e
|
51
|
+
$log.error("YAML Load Error!Plz check your yaml file => #{conf_file}.#{$/}#{e.to_s}")
|
52
|
+
exit 1
|
53
|
+
end
|
54
|
+
}
|
55
|
+
|
56
|
+
#-----------------------------exec your job and monitor work--------------------------------#
|
57
|
+
|
58
|
+
require File.join(File.dirname(__FILE__),'..','controller',"wrap")
|
59
|
+
include RoadRunnerModule
|
60
|
+
|
61
|
+
case args('t')
|
62
|
+
when /dd/ then
|
63
|
+
RRMonitor.monit($czservers,$log,"DD-Performance"){Wrap.work(3,$log,File.join(File.dirname(__FILE__),'..','controller','dd.sh'))}
|
64
|
+
when /mysql/ then
|
65
|
+
RRMonitor.monit($czservers,$log,"MySQL-Performance"){Wrap.work(3,$log,File.join(File.dirname(__FILE__),'..','controller','mysql.sh'))}
|
66
|
+
when /svn/ then
|
67
|
+
RRMonitor.monit($czservers,$log,"SVN-Performance"){Wrap.work(1,$log,File.join(File.dirname(__FILE__),'..','controller','svn.sh'))}
|
68
|
+
when /nbd/ then
|
69
|
+
RRMonitor.monit([],$log,"NBD-Performance"){require File.join(File.dirname(__FILE__),'..','controller',"ioperf")}
|
70
|
+
when /test/ then
|
71
|
+
RRMonitor.monit([],$log,"Test-Performance"){$log.info "Test Performance Start.....";sleep 60*2;$log.info "Test END."}
|
72
|
+
else
|
73
|
+
p USEAGE
|
74
|
+
exit 1
|
75
|
+
end
|
76
|
+
|
data/bin/hostmgr.rb
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
#!/bin/env ruby
|
2
|
+
|
3
|
+
(p "Use age : host_mgr.rb -c restart|shutdown|test [-f ./servers.yaml|-h]";exit 1) if ARGV.include("-h")
|
4
|
+
|
5
|
+
require "rubygems"
|
6
|
+
require "net/ssh"
|
7
|
+
|
8
|
+
class HostMgr
|
9
|
+
def initialize(opt={:server=>"0.0.0.0", :username=>"admin", :password=>"123456"})
|
10
|
+
begin
|
11
|
+
@sess=Net::SSH.start(opt[:server], opt[:username], :password => opt[:password],:timeout => 120)
|
12
|
+
rescue Exception => e
|
13
|
+
p e
|
14
|
+
p opt.inspect
|
15
|
+
raise e
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def exec!(cmd)
|
20
|
+
p @sess.exec!(cmd)
|
21
|
+
p "#{cmd} --exec over."
|
22
|
+
end
|
23
|
+
|
24
|
+
def exit
|
25
|
+
@sess.exit
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
#-----------------------------Argv prepare.--------------------------------#
|
30
|
+
|
31
|
+
def args(key)
|
32
|
+
ARGV.each_with_index do |arg, i|
|
33
|
+
return ARGV[i+1] if "-#{key}" == arg
|
34
|
+
end
|
35
|
+
nil
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
#-----------------------------Servers Config initialize.--------------------------------#
|
40
|
+
|
41
|
+
conf_file=args('f')||File.join(File.dirname(__FILE__),'..','conf','server.yaml')
|
42
|
+
|
43
|
+
File.open( conf_file ) { |yf|
|
44
|
+
begin
|
45
|
+
$czservers=YAML::load( yf )
|
46
|
+
rescue Exception => e
|
47
|
+
$log.error("YAML Load Error!Plz check your yaml file => #{conf_file}.#{$/}#{e.to_s}")
|
48
|
+
exit 1
|
49
|
+
end
|
50
|
+
}
|
51
|
+
|
52
|
+
HOSTS=[]
|
53
|
+
$czservers.each do |h,obj|
|
54
|
+
#HOSTS<<HostMgr.new({:server=>h,:username=>"admin",:password=>"123456"})
|
55
|
+
HOSTS<<HostMgr.new({:server=>h,:username=>obj[:username],:password=>obj[:password]})
|
56
|
+
end
|
57
|
+
|
58
|
+
#p HOSTS.inspect
|
59
|
+
|
60
|
+
case args('c')
|
61
|
+
when /restart/,/reboot/,/re/
|
62
|
+
HOSTS.each{|h|h.exec!("init 6")}
|
63
|
+
when /shutdown/,/halt/,/sd/
|
64
|
+
HOSTS.each{|h|h.exec!("init 0")}
|
65
|
+
when /test/,/t/
|
66
|
+
HOSTS.each{|h|h.exec!("env")}
|
67
|
+
else
|
68
|
+
p "useage: host_mgr.rb cmd"
|
69
|
+
end
|
data/bin/nbd_prepare.sh
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
#KV.....10.250.3.25-30..6......25.master.....kv-server.
|
3
|
+
|
4
|
+
#.......10.250.6.30
|
5
|
+
#root/goodluck@2010
|
6
|
+
|
7
|
+
#nbd....
|
8
|
+
#/home/admin/nbd
|
9
|
+
|
10
|
+
#...........
|
11
|
+
#/home/cuizheng
|
12
|
+
#/home/cuizheng/mysql
|
13
|
+
#/home/cuizheng/file1
|
14
|
+
#/home/cuizheng/file2
|
15
|
+
|
16
|
+
|
17
|
+
#......
|
18
|
+
mkdir /home/cuizheng
|
19
|
+
cd /home/cuizheng
|
20
|
+
LOG=/home/cuizheng/log/nbd-server.log
|
21
|
+
if [ -e $LOG ]; then
|
22
|
+
rm -f $LOG
|
23
|
+
fi
|
24
|
+
|
25
|
+
touch $LOG
|
26
|
+
|
27
|
+
#........nbd
|
28
|
+
umount ./file1
|
29
|
+
umount ./file2
|
30
|
+
umonut ./mysql
|
31
|
+
|
32
|
+
#..nbd-server..
|
33
|
+
ps axf|grep nbd-server|grep -v grep|awk '{printf "%s\n",$1}'|xargs kill -9
|
34
|
+
|
35
|
+
cd /home/admin/nbd/client/
|
36
|
+
#..nbd-client..
|
37
|
+
./nbd-client -d /dev/nbd0
|
38
|
+
./nbd-client -d /dev/nbd1
|
39
|
+
./nbd-client -d /dev/nbd2
|
40
|
+
|
41
|
+
ps axf|grep nbd-client|grep -v grep|awk '{printf "%s\n",$1}'|xargs kill -9
|
42
|
+
|
43
|
+
cd /home/admin/nbd/server/
|
44
|
+
#.....
|
45
|
+
modprobe nbd
|
46
|
+
nohup ./nbd-server nuwa://10.250.3.25:10240/sys/kvengine/KVMaster >>$LOG 2>&1 &
|
47
|
+
|
48
|
+
cd /home/admin/nbd/client/
|
49
|
+
#.....
|
50
|
+
#sector_size=1024
|
51
|
+
#disk_size=50G
|
52
|
+
#device_id=second since 1970
|
53
|
+
#device=/dev/nbd0-nbd2
|
54
|
+
|
55
|
+
D=`date +"%Y-%m-%d %H:%M:%S"`
|
56
|
+
|
57
|
+
Device_id=`date +"%s"`
|
58
|
+
echo nbd0 device_id => $Device_id
|
59
|
+
./nbd-client 1024 2G $Device_id /dev/nbd0
|
60
|
+
echo MySQL deveice id: >> $LOG
|
61
|
+
echo $Device_id >> $LOG
|
62
|
+
|
63
|
+
sleep 5
|
64
|
+
|
65
|
+
Device_id=`date +"%s"`
|
66
|
+
echo nbd1 device_id => $Device_id
|
67
|
+
./nbd-client 1024 2G `date +"%s"` /dev/nbd1
|
68
|
+
echo File1 deveice id: >> $LOG
|
69
|
+
echo $Device_id >> $LOG
|
70
|
+
|
71
|
+
sleep 5
|
72
|
+
|
73
|
+
Device_id=`date +"%s"`
|
74
|
+
echo nbd2 device_id => $Device_id
|
75
|
+
./nbd-client 1024 2G `date +"%s"` /dev/nbd2
|
76
|
+
echo File2 deveice id: >> $LOG
|
77
|
+
echo $Device_id >> $LOG
|
78
|
+
|
79
|
+
#...
|
80
|
+
mkfs /dev/nbd0
|
81
|
+
mkfs /dev/nbd1
|
82
|
+
mkfs /dev/nbd2
|
83
|
+
|
84
|
+
#....NBD......:
|
85
|
+
mount /dev/nbd0 /home/cuizheng/mysql
|
86
|
+
mount /dev/nbd1 /home/cuizheng/file1
|
87
|
+
mount /dev/nbd2 /home/cuizheng/file2
|
88
|
+
|
data/conf/servers.yaml
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
---
|
2
|
+
10.250.3.25:
|
3
|
+
:username: admin
|
4
|
+
:ts: Test-Performance
|
5
|
+
:password: "123456"
|
6
|
+
10.250.3.26:
|
7
|
+
:username: admin
|
8
|
+
:ts: Test-Performance
|
9
|
+
:password: "123456"
|
10
|
+
10.250.6.30:
|
11
|
+
:username: admin
|
12
|
+
:ts: Test-Performance
|
13
|
+
:password: "123456"
|
14
|
+
10.250.3.27:
|
15
|
+
:username: admin
|
16
|
+
:ts: Test-Performance
|
17
|
+
:password: "123456"
|
18
|
+
10.250.3.28:
|
19
|
+
:username: admin
|
20
|
+
:ts: Test-Performance
|
21
|
+
:password: "123456"
|
22
|
+
10.250.3.29:
|
23
|
+
:username: admin
|
24
|
+
:ts: Test-Performance
|
25
|
+
:password: "123456"
|
26
|
+
10.250.3.30:
|
27
|
+
:username: admin
|
28
|
+
:ts: Test-Performance
|
29
|
+
:password: "123456"
|
data/controller/dd.sh
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
#file-name=nbd_perf_dd.sh
|
3
|
+
|
4
|
+
mkdir -p /home/cuizheng/log
|
5
|
+
cd /home/cuizheng
|
6
|
+
#LOG=/home/cuizheng/log/nbd_perf_dd_`date +"%Y-%m-%d=%H:%M:%S"`.log
|
7
|
+
LOG=/home/cuizheng/log/dd.log
|
8
|
+
|
9
|
+
echo "***********DD-Performance***********" >> $LOG
|
10
|
+
|
11
|
+
if [ -e $log ];then
|
12
|
+
rm -f $LOG
|
13
|
+
fi
|
14
|
+
touch $LOG
|
15
|
+
_START=`date +"%s"`
|
16
|
+
|
17
|
+
i=1
|
18
|
+
|
19
|
+
while [ $i -le 3 ];
|
20
|
+
do
|
21
|
+
SUB=`uuidgen`
|
22
|
+
|
23
|
+
cd /home/cuizheng/file1
|
24
|
+
mkdir dd_tmp_$SUB
|
25
|
+
cd dd_tmp_$SUB
|
26
|
+
|
27
|
+
#echo "dd 5mb start" >> $LOG
|
28
|
+
#UUID=`uuidgen`
|
29
|
+
#START=`date +"%s"`
|
30
|
+
#dd if=/dev/zero of=./nbd_perf_test_file_$UUID.dat bs=512k count=10
|
31
|
+
#sync
|
32
|
+
#END=`date +"%s"`
|
33
|
+
#echo "
|
34
|
+
#dd if=/dev/zero of=./nbd_perf_test_file_$UUID.dat bs=512k count=10
|
35
|
+
#sync
|
36
|
+
#START:$START,END:$END,SPEND:$((END-START))
|
37
|
+
#
|
38
|
+
#" >> $LOG
|
39
|
+
|
40
|
+
|
41
|
+
echo "dd 50mb start" >> $LOG
|
42
|
+
UUID=`uuidgen`
|
43
|
+
START=`date +"%s"`
|
44
|
+
dd if=/dev/zero of=./nbd_perf_test_file_$UUID.dat bs=512k count=102
|
45
|
+
sync
|
46
|
+
END=`date +"%s"`
|
47
|
+
echo "
|
48
|
+
dd if=/dev/zero of=./nbd_perf_test_file_$UUID.dat bs=512k count=102
|
49
|
+
sync
|
50
|
+
START:$START,END:$END,SPEND:$((END-START))
|
51
|
+
|
52
|
+
" >> $LOG
|
53
|
+
|
54
|
+
#echo "dd 500mb start" >> $LOG
|
55
|
+
#UUID=`uuidgen`
|
56
|
+
#START=`date +"%s"`
|
57
|
+
#dd if=/dev/zero of=./nbd_perf_test_file_$UUID.dat bs=512k count=1024
|
58
|
+
#sync
|
59
|
+
#END=`date +"%s"`
|
60
|
+
#echo "
|
61
|
+
#dd if=/dev/zero of=./nbd_perf_test_file_$UUID.dat bs=512k count=102
|
62
|
+
#sync
|
63
|
+
#START:$START,END:$END,SPEND:$((END-START))
|
64
|
+
#
|
65
|
+
#" >> $LOG
|
66
|
+
|
67
|
+
|
68
|
+
echo "rm dd document start" >> $LOG
|
69
|
+
cd ..
|
70
|
+
START=`date +"%s"`
|
71
|
+
rm -rf dd_tmp_$SUB
|
72
|
+
sync
|
73
|
+
END=`date +"%s"`
|
74
|
+
echo "
|
75
|
+
rm -rf dd_tmp_$SUB
|
76
|
+
sync
|
77
|
+
START:$START,END:$END,SPEND:$((END-START))
|
78
|
+
|
79
|
+
" >> $LOG
|
80
|
+
|
81
|
+
i=$(($i + 1))
|
82
|
+
done
|
83
|
+
|
84
|
+
_END=`date +"%s"`
|
85
|
+
|
86
|
+
echo DD-Performance Total START:$_START,END:$_END,SPEND:$((_END-_START)) >> $LOG
|
87
|
+
|
88
|
+
exit 1
|
89
|
+
|
90
|
+
#...10..........
|
91
|
+
#nohup sh nbd_perf_dd.sh 1>/home/cuizheng/nbd_perf_dd.log 2>&1
|
92
|
+
|
@@ -0,0 +1,108 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require File.join(File.dirname(__FILE__),'..','lib','roadrunner')
|
3
|
+
|
4
|
+
#-----------------------------Argv prepare.--------------------------------#
|
5
|
+
|
6
|
+
def args(key)
|
7
|
+
ARGV.each_with_index do |arg, i|
|
8
|
+
return ARGV[i+1] if "-#{key}" == arg
|
9
|
+
end
|
10
|
+
nil
|
11
|
+
end
|
12
|
+
|
13
|
+
unless args('nbd')
|
14
|
+
p "[ruby ]controller.rb ioperf -nbd /dev/nbd[0-x]"
|
15
|
+
exit 1
|
16
|
+
end
|
17
|
+
|
18
|
+
#-----------------------------Logger prepare.--------------------------------#
|
19
|
+
|
20
|
+
$log ||= Logger.new(STDOUT)
|
21
|
+
|
22
|
+
NBD=begin
|
23
|
+
File.open(args('nbd'),"r+")
|
24
|
+
rescue Exception => e
|
25
|
+
$log.error "Can't open #{args('nbd')}!"
|
26
|
+
exit -1
|
27
|
+
end
|
28
|
+
|
29
|
+
NBD.sync=true
|
30
|
+
|
31
|
+
#-----------------------------Test scenario prepare.--------------------------------#
|
32
|
+
|
33
|
+
class IOPerf
|
34
|
+
|
35
|
+
class<<self
|
36
|
+
|
37
|
+
def rand_read(nbd,fs)
|
38
|
+
begin
|
39
|
+
mp=rand(fs).to_i
|
40
|
+
$log.info("rand_read:seek #{tmp} in #{nbd}.")
|
41
|
+
nbd.seek(tmp)
|
42
|
+
tmp=nbd.getc
|
43
|
+
$log.debug("rand_read:get #{tmp} from #{nbd}.")
|
44
|
+
rescue Exception => e
|
45
|
+
$log.error("#{nbd} read error!")
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def rand_write(nbd,fs)
|
50
|
+
begin
|
51
|
+
tmp=rand(fs).to_i
|
52
|
+
$log.info("rand_write:seek #{tmp} in #{nbd}.")
|
53
|
+
nbd.seek(tmp)
|
54
|
+
tmp=('a'..'z').to_a[rand 26]
|
55
|
+
$log.debug("rand_write:write #{tmp} into #{nbd}.")
|
56
|
+
nbd.putc(tmp)
|
57
|
+
rescue Exception => e
|
58
|
+
$log.error("#{nbd} write error!")
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def seq_read(nbd,fs)
|
63
|
+
begin
|
64
|
+
nbd.rewind if nbd.eof?
|
65
|
+
tmp=rand(fs)
|
66
|
+
$log.debug("seq_read:reading #{tmp} bytes from #{nbd}")
|
67
|
+
nbd.sysread(tmp)
|
68
|
+
rescue Exception => e
|
69
|
+
$log.error("#{nbd} read error!")
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
def seq_write(nbd,fs)
|
75
|
+
begin
|
76
|
+
nbd.rewind if nbd.eof?
|
77
|
+
tmp=rand(fs)
|
78
|
+
$log.debug("seq_read:writing #{tmp} bytes into #{nbd}")
|
79
|
+
nbd.syswrite('x'*tmp)
|
80
|
+
rescue Exception => e
|
81
|
+
$log.error("#{nbd} write error!")
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
|
90
|
+
|
91
|
+
rr=RoadRunner.new
|
92
|
+
rr.mode,rr.users,rr.iterations='p',50,10000
|
93
|
+
|
94
|
+
# ['rand_read','rand_write','seq_read','seq_write']
|
95
|
+
|
96
|
+
IOPerf.singleton_methods[0..-2].each{|s|
|
97
|
+
ts_proc=proc{
|
98
|
+
IOPerf.send(s,NBD,File.size(NBD))
|
99
|
+
}
|
100
|
+
rr.send(s,&ts_proc)
|
101
|
+
}
|
102
|
+
|
103
|
+
NBD.close
|
104
|
+
|
105
|
+
rr.run
|
106
|
+
rr.report
|
107
|
+
|
108
|
+
|
data/controller/mysql.rb
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
#!/ur/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'activerecord'
|
5
|
+
require 'benchmark'
|
6
|
+
require 'logger'
|
7
|
+
require 'pp'
|
8
|
+
|
9
|
+
log_file=File.join(File.dirname(__FILE__),'log','mysql.log')
|
10
|
+
FileUtils.rm log_file,:force=>true
|
11
|
+
|
12
|
+
File.open(log_file,"w"){|f|
|
13
|
+
f.puts "*"*60+$/
|
14
|
+
f.puts "MySQL Store Performance Test".center(60,"*")+$/
|
15
|
+
f.puts "*"*60+$/+$/+$/
|
16
|
+
}
|
17
|
+
|
18
|
+
#$log = Logger.new(File.join(File.dirname(__FILE__),'log','stdout.log'))
|
19
|
+
$log = Logger.new(log_file)
|
20
|
+
$log.level=Logger::ERROR
|
21
|
+
|
22
|
+
begin
|
23
|
+
ActiveRecord::Base.establish_connection(
|
24
|
+
:adapter =>"mysql",
|
25
|
+
:username => "houyi",
|
26
|
+
:password =>"111111",
|
27
|
+
:database => "SNS",
|
28
|
+
:host =>"10.250.6.30"
|
29
|
+
)
|
30
|
+
$log.info "MySQL Connect Success."
|
31
|
+
rescue => e
|
32
|
+
$log.error "MySQL Connect Failed!"
|
33
|
+
$log.error e.to_s
|
34
|
+
end
|
35
|
+
|
36
|
+
# N => count of iterations.
|
37
|
+
N=10000
|
38
|
+
|
39
|
+
class RRData < ActiveRecord::Base
|
40
|
+
set_table_name "qa_posts"
|
41
|
+
set_primary_key "ID"
|
42
|
+
end
|
43
|
+
|
44
|
+
def insert_records(x=N)
|
45
|
+
qp=RRData.new
|
46
|
+
RRData.columns.each do |c|
|
47
|
+
qp.send(c.to_s+"=",rand(x)) unless c=="ID"||c=='id'
|
48
|
+
end
|
49
|
+
ts=Benchmark.measure{qp.save!}
|
50
|
+
`sync`
|
51
|
+
$log.debug qp.inspect
|
52
|
+
$log.info "One Record insert. ts=>#{ts.inspect}"
|
53
|
+
end
|
54
|
+
|
55
|
+
def select_record(id=1)
|
56
|
+
qp=nil
|
57
|
+
ts=Benchmark.measure{qp=RRData.find_by_id(id)}
|
58
|
+
$log.debug qp.inspect
|
59
|
+
$log.info "One Record Select. ts=>#{ts.inspect}"
|
60
|
+
end
|
61
|
+
|
62
|
+
|
63
|
+
$log.info "#{N} iterations start.".center(60,'*')
|
64
|
+
|
65
|
+
ts = Benchmark.measure{
|
66
|
+
N.times do |x|
|
67
|
+
# insert_records(x)
|
68
|
+
# select_record(rand(3000)*2)
|
69
|
+
# RRData.find_by_sql()
|
70
|
+
end
|
71
|
+
}
|
72
|
+
|
73
|
+
$log.info "#{N} iterations end.".center(60,'*')
|
74
|
+
$log.info "#{N} iterations cost ts=>#{ts.inspect}".center(60,'*')
|
data/controller/mysql.sh
ADDED
data/controller/svn.sh
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
#file-name=svn.sh
|
3
|
+
|
4
|
+
mkdir -p /home/cuizheng/log
|
5
|
+
cd /home/cuizheng
|
6
|
+
#LOG=/home/cuizheng/log/nbd_perf_svn_`date +"%Y-%m-%d=%H:%M:%S"`.log
|
7
|
+
LOG=/home/cuizheng/log/svn.log
|
8
|
+
|
9
|
+
|
10
|
+
cd /home/cuizheng/file1
|
11
|
+
rm -rf *
|
12
|
+
sync
|
13
|
+
cp /root/code ./ -r
|
14
|
+
sync
|
15
|
+
rm -rf /home/cuizheng/file2/*
|
16
|
+
sync
|
17
|
+
|
18
|
+
|
19
|
+
i=1
|
20
|
+
|
21
|
+
while [ $i -le 10 ];
|
22
|
+
do
|
23
|
+
|
24
|
+
START=`date +"%s"`
|
25
|
+
mv /home/cuizheng/file1/* /home/cuizheng/file2/
|
26
|
+
sync
|
27
|
+
END=`date +"%s"`
|
28
|
+
echo "
|
29
|
+
mv /home/cuizheng/file1/* /home/cuizheng/file2/
|
30
|
+
sync
|
31
|
+
START:$START,END:$END,SPEND:$((END-START))
|
32
|
+
|
33
|
+
" >>$LOG
|
34
|
+
|
35
|
+
START=`date +"%s"`
|
36
|
+
mv /home/cuizheng/file2/* /home/cuizheng/file1/
|
37
|
+
sync
|
38
|
+
END=`date +"%s"`
|
39
|
+
echo "
|
40
|
+
mv /home/cuizheng/file2/* /home/cuizheng/file1/
|
41
|
+
sync
|
42
|
+
START:$START,END:$END,SPEND:$((END-START))
|
43
|
+
|
44
|
+
" >> $LOG
|
45
|
+
|
46
|
+
i=$(($i + 1))
|
47
|
+
done
|
48
|
+
|
49
|
+
exit 1
|
data/controller/wrap.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require File.join(File.dirname(__FILE__),'..','lib','roadrunner.rb')
|
4
|
+
module RoadRunnerModule
|
5
|
+
|
6
|
+
module Wrap
|
7
|
+
|
8
|
+
def self.work(n,log,sh)
|
9
|
+
worker=RoadRunner.new
|
10
|
+
|
11
|
+
worker.users=n
|
12
|
+
worker.iterations=1
|
13
|
+
worker.log=log
|
14
|
+
|
15
|
+
worker.action{log.info `sh #{@sh} 2>&1`}
|
16
|
+
|
17
|
+
worker.run
|
18
|
+
worker.report
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
end
|