Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
08126f18
提交
08126f18
3月 11, 2012
创建
作者:
Silas Boyd-Wickizer
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Some ulib code that controls the sampler
上级
00019b41
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
55 行增加
和
1 行删除
+55
-1
user.h
include/user.h
+16
-0
Makefrag
lib/Makefrag
+1
-1
perf.cc
lib/perf.cc
+38
-0
没有找到文件。
include/user.h
浏览文件 @
08126f18
...
...
@@ -59,4 +59,20 @@ void fprintf(int, const char*, ...);
void
snprintf
(
char
*
buf
,
unsigned
int
n
,
const
char
*
fmt
,
...);
void
die
(
const
char
*
errstr
,
...)
__attribute__
((
noreturn
));
#define assert(c) if (!(c)) { fprintf(2, "%s:%d: ", __FILE__, __LINE__); die("assertion failure"); }
// perf.cc
// Default selector for AMD 10h:
// [35 - 32] event mask [11 - 8]
// [31 - 24] counter mask
// [22] counter enable
// [17] operating system mode
// [16] user mode
// [15 - 8] unit mask
// [7 - 0] event mask [7 - 0]
#define PERF_SELECTOR \
(0UL<<32 | 1<<24 | 1<<22 | 1<<20 | 1<<17 | 1<<16 | 0x00<<8 | 0x76)
// Default period
#define PERF_PERIOD 100000
void
perf_stop
(
void
);
void
perf_start
(
u64
selector
,
u64
period
);
END_DECLS
lib/Makefrag
浏览文件 @
08126f18
...
...
@@ -2,7 +2,7 @@ $(O)/lib/%.o: CFLAGS:=$(CFLAGS)
$(O)/lib/%.o: CXXFLAGS:=$(CXXFLAGS)
ULIB = ulib.o usys.o printf.o umalloc.o uthread.o fmt.o stream.o ipc.o \
threads.o crt.o wq.o
threads.o crt.o wq.o
perf.o
ULIB := $(addprefix $(O)/lib/, $(ULIB))
.PRECIOUS: $(O)/lib/%.o
...
...
lib/perf.cc
0 → 100644
浏览文件 @
08126f18
#include "types.h"
#include "user.h"
#include "fcntl.h"
#include "sampler.h"
static
int
perf_fd
=
-
1
;
static
void
conf
(
int
fd
,
sampop_t
op
,
u64
selector
=
0
,
u64
period
=
0
)
{
struct
sampconf
c
=
{
op:
op
,
selector:
selector
,
period:
period
,
};
if
(
write
(
fd
,
&
c
,
sizeof
(
c
))
!=
sizeof
(
c
))
die
(
"perf: write failed"
);
}
void
perf_stop
(
void
)
{
assert
(
perf_fd
>=
0
);
conf
(
perf_fd
,
SAMP_DISABLE
);
}
void
perf_start
(
u64
selector
,
u64
period
)
{
if
(
perf_fd
==
-
1
)
{
perf_fd
=
open
(
"/dev/sampler"
,
O_WRONLY
);
if
(
perf_fd
<
0
)
die
(
"perf: open failed"
);
}
conf
(
perf_fd
,
SAMP_ENABLE
,
selector
,
period
);
}
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论