Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
B
bcc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
bcc
Commits
66db8790
Commit
66db8790
authored
Mar 06, 2018
by
yonghong-song
Committed by
GitHub
Mar 06, 2018
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1620 from palmtenor/perf_buffer_ptr
C++ API: Allow obtaining BPFPerfBuffer pointer for polling
parents
f34acfcc
570fd5e3
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
25 additions
and
8 deletions
+25
-8
examples/cpp/FollyRequestContextSwitch.cc
examples/cpp/FollyRequestContextSwitch.cc
+5
-2
src/cc/api/BPF.cc
src/cc/api/BPF.cc
+7
-2
src/cc/api/BPF.h
src/cc/api/BPF.h
+10
-1
src/cc/api/BPFTable.cc
src/cc/api/BPFTable.cc
+2
-2
src/cc/api/BPFTable.h
src/cc/api/BPFTable.h
+1
-1
No files found.
examples/cpp/FollyRequestContextSwitch.cc
View file @
66db8790
...
...
@@ -98,8 +98,11 @@ int main(int argc, char** argv) {
signal
(
SIGINT
,
signal_handler
);
std
::
cout
<<
"Started tracing, hit Ctrl-C to terminate."
<<
std
::
endl
;
while
(
true
)
bpf
->
poll_perf_buffer
(
"events"
);
auto
perf_buffer
=
bpf
->
get_perf_buffer
(
"events"
);
if
(
perf_buffer
)
while
(
true
)
// 100ms timeout
perf_buffer
->
poll
(
100
);
return
0
;
}
src/cc/api/BPF.cc
View file @
66db8790
...
...
@@ -443,11 +443,16 @@ StatusTuple BPF::close_perf_buffer(const std::string& name) {
return
StatusTuple
(
0
);
}
void
BPF
::
poll_perf_buffer
(
const
std
::
string
&
name
,
int
timeout
)
{
BPFPerfBuffer
*
BPF
::
get_perf_buffer
(
const
std
::
string
&
name
)
{
auto
it
=
perf_buffers_
.
find
(
name
);
return
(
it
==
perf_buffers_
.
end
())
?
nullptr
:
it
->
second
;
}
void
BPF
::
poll_perf_buffer
(
const
std
::
string
&
name
,
int
timeout_ms
)
{
auto
it
=
perf_buffers_
.
find
(
name
);
if
(
it
==
perf_buffers_
.
end
())
return
;
it
->
second
->
poll
(
timeout
);
it
->
second
->
poll
(
timeout
_ms
);
}
StatusTuple
BPF
::
load_func
(
const
std
::
string
&
func_name
,
bpf_prog_type
type
,
...
...
src/cc/api/BPF.h
View file @
66db8790
...
...
@@ -136,12 +136,21 @@ class BPF {
StatusTuple
close_perf_event
(
const
std
::
string
&
name
);
// Open a Perf Buffer of given name, providing callback and callback cookie
// to use when polling. BPF class owns the opened Perf Buffer and will free
// it on-demand or on destruction.
StatusTuple
open_perf_buffer
(
const
std
::
string
&
name
,
perf_reader_raw_cb
cb
,
perf_reader_lost_cb
lost_cb
=
nullptr
,
void
*
cb_cookie
=
nullptr
,
int
page_cnt
=
DEFAULT_PERF_BUFFER_PAGE_CNT
);
// Close and free the Perf Buffer of given name.
StatusTuple
close_perf_buffer
(
const
std
::
string
&
name
);
void
poll_perf_buffer
(
const
std
::
string
&
name
,
int
timeout
=
-
1
);
// Obtain an pointer to the opened BPFPerfBuffer instance of given name.
// Will return nullptr if such open Perf Buffer doesn't exist.
BPFPerfBuffer
*
get_perf_buffer
(
const
std
::
string
&
name
);
// Poll an opened Perf Buffer of given name with given timeout, using callback
// provided when opening. Do nothing if such open Perf Buffer doesn't exist.
void
poll_perf_buffer
(
const
std
::
string
&
name
,
int
timeout_ms
=
-
1
);
StatusTuple
load_func
(
const
std
::
string
&
func_name
,
enum
bpf_prog_type
type
,
int
&
fd
);
...
...
src/cc/api/BPFTable.cc
View file @
66db8790
...
...
@@ -295,10 +295,10 @@ StatusTuple BPFPerfBuffer::close_all_cpu() {
return
StatusTuple
(
0
);
}
void
BPFPerfBuffer
::
poll
(
int
timeout
)
{
void
BPFPerfBuffer
::
poll
(
int
timeout
_ms
)
{
if
(
epfd_
<
0
)
return
;
int
cnt
=
epoll_wait
(
epfd_
,
ep_events_
.
get
(),
cpu_readers_
.
size
(),
timeout
);
int
cnt
=
epoll_wait
(
epfd_
,
ep_events_
.
get
(),
cpu_readers_
.
size
(),
timeout
_ms
);
if
(
cnt
<=
0
)
return
;
for
(
int
i
=
0
;
i
<
cnt
;
i
++
)
...
...
src/cc/api/BPFTable.h
View file @
66db8790
...
...
@@ -309,7 +309,7 @@ class BPFPerfBuffer : public BPFTableBase<int, int> {
StatusTuple
open_all_cpu
(
perf_reader_raw_cb
cb
,
perf_reader_lost_cb
lost_cb
,
void
*
cb_cookie
,
int
page_cnt
);
StatusTuple
close_all_cpu
();
void
poll
(
int
timeout
);
void
poll
(
int
timeout
_ms
);
private:
StatusTuple
open_on_cpu
(
perf_reader_raw_cb
cb
,
perf_reader_lost_cb
lost_cb
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment