待整理项

TMUX

1
2
3
4
5
6
tmux new-session -d -s monitor 'top' \; \
split-window -h 'watch -n 1 nvidia-smi' \; \
select-pane -t 1 \; \
split-window -v 'watch -n 1 "ps aux| head -1; ps aux | sort -rnk 4 | head -10"' \;

tmux a -t monitor

保存当前窗口的所有

1
2
3
# -n n行; - 所有
capture-pane -S -
save-buffer tmux.log

SSH端口转发

设备172.20.1.22连接到服务器10.66.149.146,在服务器执行
ssh -CfNg -L 2222:172.20.1.22:22 perception@10.66.149.146
ssh -CfNg -L 8088:172.20.1.22:8080 perception@10.66.149.146

查找AVX SSE 指令受哪个编译选项控制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash

get_instruction ()
{
[ -z "$1" ] && exit
func_name="$1 "

header_file=`grep --include=\*intrin.h -Rl "$func_name" /usr/lib/gcc | head -n1`
[ -z "$header_file" ] && exit
>&2 echo "find in: $header_file"

target_directive=`grep "#pragma GCC target(\|$func_name" $header_file | grep -B 1 "$func_name" | head -n1`
echo $target_directive | grep -o '"[^,]*[,"]' | sed 's/"//g' | sed 's/,//g'
}

instruction=`get_instruction $1`
if [ -z "$instruction" ]; then
echo "Error: function not found: $1"
else
echo "add this option to gcc: -m$instruction"
gcc -m$instruction -dM -E - < /dev/null | egrep "SSE|AVX" | sort
fi

valgrind

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#cd valgrind
#./configure --prefix=/usr/local/valgrind--指定安装目录
#make
#make install

用法:valgrind[options] prog-and-args [options]: 常用选项,适用于所有Valgrind工具
-tool=<name> 最常用的选项。运行 valgrind中名为toolname的工具。默认memcheck。
h –help 显示帮助信息。
-version 显示valgrind内核的版本,每个工具都有各自的版本。
q –quiet 安静地运行,只打印错误信息。
v –verbose 更详细的信息, 增加错误数统计。
-trace-children=no|yes 跟踪子线程? [no]
-track-fds=no|yes 跟踪打开的文件描述?[no]
-time-stamp=no|yes 增加时间戳到LOG信息? [no]
-log-fd=<number> 输出LOG到描述符文件 [2=stderr]
-log-file=<file> 将输出的信息写入到filename.PID的文件里,PID是运行程序的进行ID
-log-file-exactly=<file> 输出LOG信息到 file
-log-file-qualifier=<VAR> 取得环境变量的值来做为输出信息的文件名。 [none]
-log-socket=ipaddr:port 输出LOG到socket ,ipaddr:port
LOG信息输出:
-xml=yes 将信息以xml格式输出,只有memcheck可用
-num-callers=<number> show <number> callers in stack traces [12]
-error-limit=no|yes 如果太多错误,则停止显示新错误? [yes]
-error-exitcode=<number> 如果发现错误则返回错误代码 [0=disable]
-db-attach=no|yes 当出现错误,valgrind会自动启动调试器gdb。[no]
-db-command=<command> 启动调试器的命令行选项[gdb -nw %f %p]
适用于Memcheck工具的相关选项:
-leak-check=no|summary|full 要求对leak给出详细信息? [summary]
-leak-resolution=low|med|high how much bt merging in leak check [low]
-show-reachable=no|yes show reachable blocks in leak check? [no]

valgrind 交叉编译

1
2
3
4
5
6
7
8
9
export CC=/opt/toolchains/aarch64--glibc--stable-2020.08-1/bin/aarch64-linux-gcc
export LD=/opt/toolchains/aarch64--glibc--stable-2020.08-1/bin/aarch64-linux-ld
export AR=/opt/toolchains/aarch64--glibc--stable-2020.08-1/bin/-aarch64-linux-ar

# --prefix是板端目标路径,编好后需要手动拷贝到这个路径
./configure --prefix=/xdata/workspace/valgrind --host=aarch64-linux --enable-only64bit
make -j4
# DESTDIR是本地路径,编好后东西保存在这,把里面的东西拷贝到板端上面的--prefix路径
make -j4 install DESTDIR=/sandbox/valgrind-3.21.0/Inst