perftools.rb 2.0.1 → 2.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +5 -5
- data/ext/extconf.rb +19 -2
- data/ext/perftools.c +9 -3
- data/perftools.rb.gemspec +1 -1
- metadata +20 -41
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e5354c9f6adafa6a03a40aa9f642a48e869b26e0
|
4
|
+
data.tar.gz: c928c2375eb6f16a1b7d0889ef5bdb8544004904
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8fbc618563d5dad63f74c8b84f31e37009d0e7c5ea7343de5e961efb1a13d9980fa842c30dea7685be321b85e7f4af76240b3dabf8d2b5764a2092658222d33c
|
7
|
+
data.tar.gz: f9f92e6dd03853f7c9a328385e9035c5b857b5bec80b0bca68641340b89b9da69a92064498b88e86310c14c755dbad6042ce0e87703fe78099c553fd98e1b4b7
|
data/README.md
CHANGED
@@ -96,15 +96,15 @@ The sampling interval of the profiler can be adjusted to collect more
|
|
96
96
|
|
97
97
|
#### pprof.rb --gif
|
98
98
|
|
99
|
-
* Simple [require 'rubygems'](
|
99
|
+
* Simple [require 'rubygems'](https://raw.github.com/tmm1/perftools.rb/master/examples/rubygems.gif) profile
|
100
100
|
|
101
|
-
* Comparing redis-rb [with](
|
101
|
+
* Comparing redis-rb [with](https://raw.github.com/tmm1/perftools.rb/master/examples/redis-rb.gif) and [without](https://raw.github.com/tmm1/perftools.rb/master/examples/redis-rb-notimeout.gif) SystemTimer based socket timeouts
|
102
102
|
|
103
|
-
* [Sinatra](
|
103
|
+
* [Sinatra](https://raw.github.com/tmm1/perftools.rb/master/examples/sinatra.gif) vs. [Merb](https://raw.github.com/tmm1/perftools.rb/master/examples/merb.gif) vs. [Rails](https://raw.github.com/tmm1/perftools.rb/master/examples/rails.gif)
|
104
104
|
|
105
|
-
* C-level profile of EventMachine + epoll + Ruby threads [before](
|
105
|
+
* C-level profile of EventMachine + epoll + Ruby threads [before](https://raw.github.com/tmm1/perftools.rb/master/examples/eventmachine-epoll+nothreads.gif) and [after](https://raw.github.com/tmm1/perftools.rb/master/examples/eventmachine-epoll+threads.gif) a [6 line EM bugfix](http://timetobleed.com/6-line-eventmachine-bugfix-2x-faster-gc-1300-requestssec/)
|
106
106
|
|
107
|
-
* C-level profile of a [ruby/rails vm](
|
107
|
+
* C-level profile of a [ruby/rails vm](https://raw.github.com/tmm1/perftools.rb/master/examples/ruby_interpreter.gif)
|
108
108
|
* 12% time spent in re_match_exec because of excessive calls to rb_str_sub_bang by Date.parse
|
109
109
|
|
110
110
|
|
data/ext/extconf.rb
CHANGED
@@ -10,8 +10,19 @@ end
|
|
10
10
|
|
11
11
|
require 'mkmf'
|
12
12
|
require 'fileutils'
|
13
|
+
if RUBY_VERSION > "2.1"
|
14
|
+
begin
|
15
|
+
require 'debase/ruby_core_source'
|
16
|
+
rescue LoadError
|
17
|
+
require 'rubygems/dependency_installer'
|
18
|
+
installer = Gem::DependencyInstaller.new
|
19
|
+
installer.install 'debase-ruby_core_source'
|
13
20
|
|
14
|
-
|
21
|
+
Gem.refresh
|
22
|
+
Gem::Specification.find_by_name('debase-ruby_core_source').activate
|
23
|
+
require 'debase/ruby_core_source'
|
24
|
+
end
|
25
|
+
elsif RUBY_VERSION >= "1.9"
|
15
26
|
begin
|
16
27
|
require "debugger/ruby_core_source"
|
17
28
|
rescue LoadError
|
@@ -98,6 +109,10 @@ end
|
|
98
109
|
if RUBY_VERSION >= "1.9"
|
99
110
|
add_define 'RUBY19'
|
100
111
|
|
112
|
+
if RUBY_VERSION >= "2.0"
|
113
|
+
add_define 'HAVE_RB_NEWOBJ_OF'
|
114
|
+
end
|
115
|
+
|
101
116
|
hdrs = proc {
|
102
117
|
have_header("method.h") # exists on 1.9.2
|
103
118
|
have_header("vm_core.h") and
|
@@ -106,7 +121,9 @@ if RUBY_VERSION >= "1.9"
|
|
106
121
|
have_header("insns_info.inc")
|
107
122
|
}
|
108
123
|
|
109
|
-
|
124
|
+
core_source = Debugger rescue Debase
|
125
|
+
|
126
|
+
unless core_source::RubyCoreSource::create_makefile_with_core(hdrs, "perftools")
|
110
127
|
STDERR.puts "\n\n"
|
111
128
|
STDERR.puts "***************************************************************************************"
|
112
129
|
STDERR.puts "****************** Debugger::RubyCoreSource::create_makefile FAILED *******************"
|
data/ext/perftools.c
CHANGED
@@ -38,6 +38,12 @@ static VALUE Isend;
|
|
38
38
|
result[depth++] = (void*) (method == ID_ALLOCATOR ? Iallocate : method); \
|
39
39
|
}
|
40
40
|
|
41
|
+
#ifdef HAVE_RB_NEWOBJ_OF
|
42
|
+
#define NEWOBJ_FUNC rb_newobj_of
|
43
|
+
#else
|
44
|
+
#define NEWOBJ_FUNC rb_newobj
|
45
|
+
#endif
|
46
|
+
|
41
47
|
#ifdef RUBY18
|
42
48
|
#include <env.h>
|
43
49
|
#include <node.h>
|
@@ -492,11 +498,11 @@ objprofiler_setup()
|
|
492
498
|
sigemptyset(&sig.sa_mask);
|
493
499
|
sigaction(SIGTRAP, &sig, NULL);
|
494
500
|
|
495
|
-
unprotect_page((char*)
|
501
|
+
unprotect_page((char*)NEWOBJ_FUNC);
|
496
502
|
|
497
503
|
for (i=0; i<NUM_ORIG_BYTES; i++) {
|
498
|
-
orig_bytes[i].location = (char *)
|
499
|
-
orig_bytes[i].value = ((unsigned char*)
|
504
|
+
orig_bytes[i].location = (char *)NEWOBJ_FUNC + i;
|
505
|
+
orig_bytes[i].value = ((unsigned char*)NEWOBJ_FUNC)[i];
|
500
506
|
orig_bytes[i].location[0] = '\xCC';
|
501
507
|
}
|
502
508
|
|
data/perftools.rb.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
spec = Gem::Specification.new do |s|
|
2
2
|
s.name = 'perftools.rb'
|
3
|
-
s.version = '2.0.
|
3
|
+
s.version = '2.0.2'
|
4
4
|
s.rubyforge_project = 'perftools-rb'
|
5
5
|
s.summary = 'gperftools for ruby code'
|
6
6
|
s.description = 'A sampling profiler for ruby code based on patches to gperftools'
|
metadata
CHANGED
@@ -1,32 +1,23 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: perftools.rb
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 2
|
8
|
-
- 0
|
9
|
-
- 1
|
10
|
-
version: 2.0.1
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 2.0.2
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Aman Gupta
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
date: 2013-05-23 00:00:00 Z
|
11
|
+
date: 2015-07-09 00:00:00.000000000 Z
|
19
12
|
dependencies: []
|
20
|
-
|
21
13
|
description: A sampling profiler for ruby code based on patches to gperftools
|
22
14
|
email: perftools@tmm1.net
|
23
|
-
executables:
|
15
|
+
executables:
|
24
16
|
- pprof.rb
|
25
|
-
extensions:
|
17
|
+
extensions:
|
26
18
|
- ext/extconf.rb
|
27
19
|
extra_rdoc_files: []
|
28
|
-
|
29
|
-
files:
|
20
|
+
files:
|
30
21
|
- README.md
|
31
22
|
- bin/pprof.rb
|
32
23
|
- ext/extconf.rb
|
@@ -45,37 +36,25 @@ files:
|
|
45
36
|
- perftools.rb.gemspec
|
46
37
|
homepage: http://github.com/tmm1/perftools.rb
|
47
38
|
licenses: []
|
48
|
-
|
39
|
+
metadata: {}
|
49
40
|
post_install_message:
|
50
41
|
rdoc_options: []
|
51
|
-
|
52
|
-
require_paths:
|
42
|
+
require_paths:
|
53
43
|
- lib
|
54
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
55
|
-
|
56
|
-
requirements:
|
44
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
57
46
|
- - ">="
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
version: "0"
|
63
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
|
-
none: false
|
65
|
-
requirements:
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
66
51
|
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
|
69
|
-
segments:
|
70
|
-
- 0
|
71
|
-
version: "0"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
72
54
|
requirements: []
|
73
|
-
|
74
55
|
rubyforge_project: perftools-rb
|
75
|
-
rubygems_version:
|
56
|
+
rubygems_version: 2.2.3
|
76
57
|
signing_key:
|
77
|
-
specification_version:
|
58
|
+
specification_version: 4
|
78
59
|
summary: gperftools for ruby code
|
79
60
|
test_files: []
|
80
|
-
|
81
|
-
has_rdoc: false
|