1. 结论:NFSv4 DELEGATION 机制导致的问题 参考 GitLab 的文档,在 NFS Server 上关闭 NFSv4 的 delegation 机制即可解决,操作如下: 在 /etc/sysctl.conf 中加入 fs.leases-enable=0 ,然后运行 sysctl -p 应用设置 重启 NFS Server 2. 问题分析 近期发现作为 NFSv4 client 的服务器,运行 I/O 操作多、运行时间长的程序后,系统会出现一个名为“[NF […]
Tag: Linux
CLion调试Linux Kernel
1. 编译Kernel 先按照https://www.kernel.org/doc/html/latest/dev-tools/gdb-kernel-debugging.html说明的config设定编译内核并且安装到guest上。 menuconfig中按“/”是可以搜索的,例如要找“CONFIG_GDB_SCRIPTS”,按“/”输入“GDB_SCRIPTS”。 qemu启用了virtio的话,记得选上VIRTIO_BLK和VIRTIO_NET。 2. QEMU 2.1 关闭KVM 关闭KVM,关闭KVM,关闭KVM,重要的事情说三次!不然step by step的时候,会无限跳到arch […]
千兆公网带宽的TCP sendbuffer与receivebuffer调整
不知道有多少人留意过,使用千兆公网带宽传输数据时,只要距离稍微远点,就无法跑满千兆。对于这种情况,可能第一反应是“线路繁忙,公网带宽不足,跑不满很正常”。不过如果你有在不同地区的多台千兆设备间传数据的经历的话,你大概会发现,最大传输速度跟延迟成负相关。 首先丢出个公式:
1 |
RTT * Bandwidth / 8 = BufferSize |
TCP有ARQ机制,已发出的数据要收到ACK后才能丢弃。因为至少要等一个RTT才能收到ACK,所以sendbuffer要至少能存放一个RTT内能发出的数据量。另外,TCP的拥塞控制也会根据接收方的receivebuffer大小限制数据的发出速率。因此,如果想达到 […]
Linux IPv4 forward自动丢弃源IP为系统已绑定的IP的问题
A是路由,其上做了策略,一部分符合特定条件的流量,是要转发到B进行封装处理,A和B之间做了数个VLAN,B根据VLAN应用不同的策略。 不过这里的问题是,B的默认网关也是A(环路问题是不存在的,已经有对应规则处理),所以B自身发出的流量也会由A应用策略,转发回给B自己。而B收到src IP是local IP(系统已绑定的IP)的包时,kernel会直接丢弃数据包,所以除了B自己的数据包,B都能正常封装。 解决这个问题的一个方法,是让A在把数据包转发给B前,做一次SNAT,这样B收到的数据包,src IP就是A的IP了。其实SNAT并没有什么影响,A对NAT也有hardware offload, […]
Linux L2TPv3以及ip-xfrm的配置
L2TPv3:http://man7.org/linux/man-pages/man8/ip-l2tp.8.html ip-xfrm:http://man7.org/linux/man-pages/man8/ip-xfrm.8.html 这两个都是kernel内置的功能,通过这两个可以直接构建加密的VPN。 本文尝试使用ip-xfrm创建加密的隧道,并基于此隧道构建L2TPv3 VPN。 1. 生成密钥与ID 不使用StrongSwan,手动配置ip-xfrm时需要用到:
1 2 3 4 |
HASH_KEY=0x`dd if=/dev/urandom count=32 bs=1 2> /dev/null | xxd -p -c 64` ENCRYPT_KEY=0x`dd if=/dev/urandom count=32 bs=1 2> /dev/null | xxd -p -c 64` ID=0x`dd if=/dev/urandom count=4 bs=1 2> /dev/null | xxd -p -c 8` echo -e "HASH_KEY=${HASH_KEY}\nENCRYPT_KEY=${ENCRYPT_KEY}\nID=${ID}" |
复制上面四行命令后输出的内容,粘贴到left和right […]