系统调用 gettimeofday系统调用耗时 memset调用耗时 编程获取登录用户
- 2020-03-12 21:34:00
- admin
- 原创 2813
一、系统调用
1、安装系统调用帮助文档:yum install man-pages
2、POSIX,Portable Operating System Interface of UNIX,定义操作系统提供的标准接口;
3、kprobe内核调试可以对大多数系统调用动态插入探测点,收集所需的调试信息,不影响原来函数执行;
二、gettimeofday系统调用耗时
代码下载:syscallperf.cpp
性能结论:百万次/200毫秒
三、memset调用耗时
1、void bzero(void *s, size_t n),位于strings.h;
2、void *memset(void *s, int c, size_t n),位于string.h;
3、bzero已经废弃,建议使用memset;
4、压测代码:memset_perf.cpp
5、压测方法:./memset_perf sleep_time loop_count block_size
6、性能结论:1000次malloc和free大概73微秒;
7、性能结论:memset初始化4M数据大概1200微秒;
calcMalloc性能数据(./memset_perf 3 10000 `expr 1024 \* 1024 \* 2`):
CLOCKS_PER_SECOND is 1000000.
cost is 730000, average is 0.000073.
CLOCKS_PER_SECOND is 1000000.
cost is 770000, average is 0.000077.
CLOCKS_PER_SECOND is 1000000.
cost is 700000, average is 0.000070.
calcMemset性能数据(./memset_perf 3 10000 `expr 1024 \* 1024 \* 2`):
CLOCKS_PER_SECOND is 1000000.
cost is 39460000, average is 0.001315.
CLOCKS_PER_SECOND is 1000000.
cost is 14910000, average is 0.001491.
CLOCKS_PER_SECOND is 1000000.
cost is 11620000, average is 0.001162.
四、编程获取登录用户
1、代码下载:getuser.cpp
2、通过isatty和ttyname函数获取当前终端名称,然后根据登录用户列表判断是哪个用户;
3、程序使用STDIN_FILENO获取当前终端,所以标准输入被重定向会导致无法获取真实终端名称;
4、方法二是通过isatty和getlogin函数获取登录用户,getlogin定时任务也能调用成功,所以需要使用isatty进行过滤;