kk Blog —— 通用基础

date [-d @int|str] [+%s|"+%F %T"]

ssh反向连接

https://www.cnblogs.com/eshizhan/archive/2012/07/16/2592902.html

内网主机主动连接到外网主机,又被称作反向连接(Reverse Connection)

ssh

A主机:外网,ip:123.123.123.123,sshd端口:2221

B主机:内网,sshd端口:2223

1.1.首先在B上执行

1
ssh -NfR 1234:localhost:2223 user1@123.123.123.123 -p2221

这句话的意思是将A主机的1234端口和B主机的2223端口绑定,相当于远程端口映射(Remote Port Forwarding)。

像平时一样连接到A主机的1234端口就可以控制内网B主机了

1
ssh localhost -p1234

Autossh的用法

1
autossh -M 5678 -NfR 1234:localhost:2223 user1@123.123.123.123 -p2221

比之前的命令添加的一个-M 5678参数,负责通过5678端口监视连接状态,连接有问题时就会自动重连.

gdb子进程

https://blog.csdn.net/fingding/article/details/46459095

1. follow-fork-mode

用法:set follow-fork-mode [parent|child]

进入gdb后,直接设置,默认是parent

所以如果想要调试子进程,进入gdb后设置set follow-fork-mode child,然后设置子进程的断点

可用使用show follow-fork-mode 来查询当前fork模式

使用follow-fork-mode,只能调试一个进程,不能同时调试父子进程

2. detach-on-fork mode

用法:set detach-on-fork [on|off]

on: 只调试父进程或子进程的其中一个(根据follow-fork-mode来决定),这是默认的模式。

off: 父子进程都在gdb的控制之下,其中一个进程正常调试(根据follow-fork-mode来决定),另一个进程会被设置为暂停状态。

如果设置了set detach-on-fork off且follow-fork-mode为parent,fork后子进程并不运行,而是处于暂停状态。

X520-T1 Linux内核收发包14Mpps

收包

1
2
3
ethtool -K enp3s0 gro off
PRE_ROUTING 丢包,14Mpps
LOCAL_IN 丢包,待优化

发包(I7-7700k, no_trubo=1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
timer 8Mpps
timer+gso  tcp:11Mpps; udp:14Mpps,但是是IP分片的包
gso 需要关闭tso??  ethtool -K enp3s0 tso off gso off


kthread pfifo    14Mpps           cpu: 80%
kthread fq_codel 12~14Mpps        cpu: 100%
kthread noqueue  12Mpps           cpu: 100%


kthread pfifo static_skb    14Mpps    cpu: 40%
kthread fq_codel static_skb 14Mpps    cpu: 40%
kthread noqueue static_skb  12Mpps    cpu: 100%


kthread noqueue static_skb skb_list  14Mpps   cpu: 20%
				1cpu: 9Mpps, cpu 100%
				2cpu: 14Mpps, cpu 60%


M.2 SSD 增加收包si 20%,发包10%
I5-6500 只能发送12.5Mpps, netmap也一样 ???

转发

1
2
12Mpps 以上? 待测
把收到的包转发比申请一个包发出更优

细节待更新

ubuntu 编译内核、模块

https://launchpad.net/ubuntu/+source/linux/+changelog

4.15.0

https://launchpad.net/ubuntu/bionic/+source/linux/+changelog

https://packages.ubuntu.com/xenial/linux-source-4.15.0
http://security.ubuntu.com/ubuntu/pool/main/l/linux-hwe/linux-source-4.15.0_4.15.0-58.64~16.04.1_all.deb

https://launchpad.net/ubuntu/xenial/amd64/linux-image-unsigned-4.15.0-58-generic-dbgsym
http://launchpadlibrarian.net/436393485/linux-image-unsigned-4.15.0-58-generic-dbgsym_4.15.0-58.64~16.04.1_amd64.ddeb

https://launchpad.net/ubuntu/bionic/amd64/linux-image-unsigned-4.15.0-58-generic-dbgsym
http://launchpadlibrarian.net/436226708/linux-image-unsigned-4.15.0-58-generic-dbgsym_4.15.0-58.64_amd64.ddeb

4.18.0

https://launchpad.net/ubuntu/xenial/+source/linux/+changelog

https://packages.ubuntu.com/bionic/linux-source-4.18.0
http://security.ubuntu.com/ubuntu/pool/main/l/linux-hwe/linux-source-4.18.0_4.18.0-25.26~18.04.1_all.deb

https://launchpad.net/ubuntu/bionic/amd64/linux-image-4.18.0-25-generic-dbgsym
http://launchpadlibrarian.net/430863032/linux-image-4.18.0-25-generic-dbgsym_4.18.0-25.26~18.04.1_amd64.ddeb

gcc 7 编译内核模块时无法找到 stdarg.h 的问题

https://blog.gloriousdays.pw/2018/09/09/cannot-find-stdarg-h-on-linux-kernel-4-15-with-gcc-7-3/

这是一个非常奇怪的错误,出现在 Ubuntu 18.04 上,默认安装的内核版本是 4.15,gcc 是 7.3,在编译内核模块时报错:

1
2
3
4
5
6
7
In file included from ./include/linux/list.h:9:0,
                 from ./include/linux/module.h:9,
                 from /root/Software/newbbr/tcp_tsunami.c:59:
./include/linux/kernel.h:6:10: fatal error: stdarg.h: No such file or directory
 #include <stdarg.h>
          ^~~~~~~~~~
compilation terminated.

gcc 认为找不到 stdarg.h。看这个错误的位置,个人认为应该不是我配置的问题或者是我代码的问题,搜索了一下,也有很多在 4.15 内核上出现的同样错误。目前没有什么很好的解决方案,暂时性的方案是在编译的 Makefile 里面加一行:

1
ccflags-y=-I/usr/lib/gcc/x86_64-linux-gnu/7/include

如果是 gcc 8,就相应把版本改成 8 就可以了

编译内核

1
2
3
sudo apt-get install libncurses-dev flex bison openssl-dev libssl-dev dkms libelf-dev

make bindeb-pkg -j8

按这里没成功 https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel

编译perf

1
2
cd tools/perf
make