-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
重载服务器上对udp2raw的性能优化 #201
Comments
发一下软件的版本和具体参数 追查这种问题的一般思路是,先单独用openvpn试一下,看有没有类似现象。如果没有,那就分别试一下udp2raw+openvpn 和udpspeeder+openvpn,看问题出在谁身上。
关注一下每个核的CPU占用率 udp2raw udpspeeder openvpn都是单核程序,他们各自都只能利用一个核
不确定 但是值得一试 |
服务器端: UDPSPEEDER 服务器CPU共有24个核,在TOP里面看(按1之后)个别核有满载的情况,同时也仍然有一些核100% IDLE。在高峰期的 load average 三个数值大约在 3 至 5 之间。 如果要根据你的建议排查问题目前比较麻烦的是客户端都不在本地,要修改连接方式比较困难,并且由于服务器在国外(客户端都在国内),OPENVPN直联过来会被XX,这个排查可能不大好做。 如果这三个服务程序都是单核的话,那么我同时多运行几个实例,系统是否会自动将不同实例分配至不同的core呢? |
既然都发现满载了 就不用排查了 你看下是哪个程序把单个核心占满了就可以了 top可以直接看到 我估计是udpspeeder占满的
这必须可以呀 最简单的方是你再运行一套udp2raw udpspeeder openvpn. 如果你iptables用得熟甚至可以 单个udp2raw+多个udpspeeder+单个openvpn这样运行 |
单个udp2raw+多个udpspeeder+单个openvpn这样运行 |
就是用iptables做随机端口转发,不确定跟你说的轮询是不是同一个意思 |
话说做不了端口复用? |
你是说so_reuseport? 应该也是可行的(3.9以上内核),不过我在代码里并没启用reuseport参数(防止误操作bind到一个端口多次,以后可以考虑做成可选参数),目前需要自己加上后编译。 另外友情提示reuseport这个东西有坑,最好多读一些相关文章再尝试 |
我的4核心CPU I5-6300HQ,啟動了4個不同監聽端口的UDPSPEEDER、一個UDP2RAW、單OPENVPN,簡單的IPTABLES隨機端口轉發作為均衡負載。UDPSPEEDER在數據量大的時候是真的吃單核CPU。目前多人連接速度不錯,1000M能跑個800M-900M左右 |
CPU單核主頻很重要,我的U不是服務器U,但是能睿頻到3.1GHZ,還是性能不錯的 |
有 iptable 规则可以参考吗?好像每个连接还是只会走一个端口。多个客户端才可能从随机多端口中得益。一对一是不是没办法用到多端口?这里有人讨论,没有答案:https://serverfault.com/questions/716346/randomize-destination-port-for-every-packet-with-iptables |
多開幾個UDPSPEEDER,下層端口共同監聽到同一個VPN SERVER,上層端口監聽例如111,112,113,114,115。IPTABLES 設定入口為55,轉發到111,112,113,114,115這幾個UDPSPEEDER端口。訪問55端口會隨機分配5條UDPSPEEDER隨機一條上。你這個鏈接不是有示範嗎?只開一個VPN server不就得了。 |
是的,我的链接有示范。但我的疑问是,如果我只有一个 VPN Client 对应一个 VPN Server,连接 55 端口时会随机分配到 111-115 中的一条线路(比如112)。但后面的所有数据都会一直用 112 线路(我的链接所描述的情况)。后面所有数据不会被分配到其他线路。按我的理解,所有往返的流量都会走112线路,如果 GFW 发威,对 112 端口做 QoS 限流,最终也会导致速度会限制。 |
UDP2RAW+udpspeeder如果在同一服務器上,那麽後面的IPTABLES隨機端口和多開UDPSPEEDER只能起到負載平衡作用 |
udp2raw因爲涉及到iptables操作,所以在udp2raw之前的iptables隨機端口是否能夠實現,這個還沒有研究過。可以嘗試UDP2RAW的手動iptables功能,修改/增加DROP的IP和端口,服務器客戶端都得改,然後再做隨機端口轉發。(不過我感覺-a或者-keeprule的方式更穩一點,因爲我原來手動加的規則經常導致丟包) |
有一台Ubuntu 18.04的独立服务器(非VPS),跑了udp2raw + udpspeeder + openvpn,通过openvpn做全局流量转发。客户端来自各地,目前高峰期在线客户端差不多80个左右,流量200多Mbps。基本上都是在线直播的视频流量,其中tcp类型的直播流量和udp类型的直播流量大概一半一半。
当流量在120Mbps以下的时候,从客户端ping服务器平均延时也就200多ms;流量超过200Mbps以后,从客户端ping服务器的公网IP最多300ms左右,但如果ping服务器的OpenVPN接口地址则结果就是1000多ms,这时客户端看视频就会感觉很卡。请问是什么原因会造成ping服务器外网IP和ping服务器VPN接口地址的结果差异如此之大呢?
两端的udp2raw都使用默认参数,faketcp混淆,udpspeeder的发包比例20:10,openvpn采用明文通讯不加密。linux server内核与fs和tcp相关的参数已经做了优化,不知道还有什么更加有效的优化措施吗?因为服务器带宽才用了20%,内存使用率还不到10%,CPU在高峰期使用率也才不到15%,所以我觉得还有很大提升空间才是。在服务器启用多个udp2raw实例是否有作用呢?
The text was updated successfully, but these errors were encountered: