Articles of tcp

对initcwnd有任何限制?

我们正在尝试减less到​​我们的服务器的TCP连接的初始延迟。 在一些testing中,我们发现当我们下载15587字节以下的文件时,总下载时间(apache基准总数)是52ms。 但是,当我们添加一个额外的字节,这个时间增加到77毫秒。 经过一些testing和进一步的调查,我们发现问题是我们的AWS Linux服务器有10个TCP初始拥塞窗口的默认值。 当我们增加这个值时,我们可以发送低于28969字节的文件和52ms,这是很好的。 现在的问题是,尽pipe我们把initcwnd增加到了很高的值,但是我们无法克服这个限制。 除了initcwnd之外,是否还有其他额外的参数可以帮助我们超越这个限制? 有人有类似的情况或合适的解决scheme吗? 提前谢谢了, 托马斯

在FreeNAS(BSD)服务器和其他LAN机器之间的TCP / IP和吞吐量

我有一个知道BSD比我更好的人的问题,那就是我在芝加哥以外的家里/局外工作。 我似乎无法通过我的FreeNAS(基于BSD)的文件服务器完全优化我的networking(LAN)吞吐量。 它运行最新的FreeBSD发行版,修改后的版本支持多种文件传输协议等等。 我的Smoothwall(基于Linux)路由器后面的每台机器都在通常的192.168.0.x子网上,大部分工作正常。 所有机器都连接到GB HP非托pipe交换机。 我在这里托pipe一个大型的WISP,并且在家/办公室有一个OC-3连接,并且没有下载/上传到“networking”的问题。 我的问题是吞吐量。 当我尝试传输大文件…真的任何事情…任何机器之间/从FreeNAS服务器通过FTP,我可以达到的最大吞吐量之间的Win 7或Linux的箱子之间是〜65Mbit /秒。 所有机器都运行Intel Pro 1000 GB NIC,所有电缆都是CAT6。 每个设置为“自动协商”,每个显示1500 MTU全双工@ 1GB,所以我知道硬件是好的。 我没有调整任何机器上的MTU,因为我知道这是毫无意义的,除非使用某些configuration(我认为我不是其中之一)。 我的FreeNAS机器的设置如下: # FreeNAS /etc/sysctl.conf – pertinent settings shown kern.ipc.maxsockbuf=262144 kern.ipc.nmbclusters=32768 kern.ipc.somaxconn=8192 kern.maxfiles=65536 kern.maxfilesperproc=32768 net.inet.tcp.delayed_ack=0 net.inet.tcp.inflight.enable=0 net.inet.tcp.path_mtu_discovery=0 net.inet.tcp.recvbuf_auto=1 net.inet.tcp.recvbuf_inc=524288 net.inet.tcp.recvbuf_max=16777216 net.inet.tcp.recvspace=65536 net.inet.tcp.rfc1323=1 net.inet.tcp.sendbuf_inc=16384 net.inet.tcp.sendbuf_max=16777216 net.inet.tcp.sendspace=65536 net.inet.udp.recvspace=65536 net.local.stream.recvspace=65536 net.local.stream.sendspace=65536 net.inet.tcp.hostcache.expire=1 从我所知道的情况来看,对于一台典型的BSD机器来说,这看起来是一个有点优化的configuration文件。 我可能是错的,只是想从一个比BSD更好的人那里知道,如果确实如此,或者某个东西是不合适的或者是什么东西。 有其他的方法,我会更好的P2P文件传输? 我真的不知道我应该寻找在吞吐量之间的NAS盒子和另一个客户端时,通过FTP文件的xferring,但我被告知,我平均得到(40-70MB /秒)太低,什么它可能是。 我曾经想过在FreeNAS盒子里增加另外一个网卡以及Win7机器,并且通过一个静态路由使用一个X-over网线,但是想要先和别人核对一下,看看这个网卡是不是值得的。 我不知道这样做是否会绕过HP […]

tcpdump和拥塞窗口

嗅探HTTPstream量到我的(Linux)服务器,它似乎总是响应广告窗口大小为14。它不受影响,如果我更改默认的initcwnd大小(与IP路由),并不会增加,如果我下载大文件,即使速度增长。 这似乎没有多大意义。 你怎么解释我所看到的?

tcp_delack_min的含义

当前的Linux内核(例如2.6.36)使用延迟确认(delack)。 在/include/net/tcp.h中说: 定义TCP_DELACK_MIN((unsigned)(HZ / 25)) 因此,对于使用HZ值为1000的内核,ACK应该延迟至less40 ms。 但是,RFC 2581指出,TCP实现应该不再拖延地承认每一秒的全尺寸段。 是否有人知道Linux内核是否遵循“应该”或TCP_DELACK_MIN值是否意味着即使在接收到完整大小的段之后,ACK仍会被延迟直到40 ms已经过去?

Windows 2008 R2上的低延迟TCP设置

我在W2008服务器上运行第三方软件。 该客户端通过TCP连接到服务器。 两者之间的平均ping时间是1ms。 但是,当我检查应用程序的资源监视器中的tcp连接它显示的延迟为20毫秒。 我在客户端接口上运行数据包捕获,并看到<1ms的确认时间。 客户端的tcp设置如下: 接收方缩放状态:启用 烟囱卸载状态:自动 NetDMA状态:启用 直接caching接入(DCA):禁用 接收窗口自动调节级别:正常 附加拥塞控制提供者:ctcp ECNfunction:禁用 RFC 1323时间戳:已禁用 此外,我已经在特定接口的registry中将TcpNoDelay和TcpAckFrequency设置为1。 网卡已启用卸载。 资源监视器如何计算这个20毫秒的TCP延迟? Win2008中有没有其他TCP设置可以减less这种延迟?

具有相对较高的RTT和突发stream量的solaris tcp堆栈的行为

我有一个通过运行Solaris 10的TCP将数据从纽约分发到东京的应用程序。平均吞吐量<1Mbps,峰值吞吐量可以达到每秒20-30Mbps,尽pipe典型的峰值更像是10Mbps。 单个消息大小很小(〜300字节),延迟的一致性是关键。 这意味着我们正试图删除批处理又名,所以老鹰closures&应用程序被configuration为发送而不是队列然后发送。 纽约和东京之间的RTT约为180ms,TCP窗口调整到理论吞吐量在40Mbps左右,也就是1M tcp_xmit_hiwat / tcp_rcv_hiwat。 tcp_max_buf和tcp_cwnd_max也是1M。 这里的问题是,我们经常会间歇性地看到发件人得到EWOULDBLOCK的神秘“暂停”,导致在内部队列中build立起来,然后释放数据。 这里有两个问题 阻塞套接字没有明显的原因,我们似乎没有达到峰值吞吐量,没有任何数据包捕获暗示任何放缓 在“放电期间”(即当发送方套接字不再被阻塞,但它有一个数据缓冲区发送时),我们看到一个稳步增长的锯齿模式的消息速率 前者是解决问题的关键,如果我能解决这个问题,那么后者就不会发生。 然而后者很奇怪,我天真地期待它能够迅速攀升到峰值吞吐量,并保持在那里,直到它通过积压。 CPU利用率在两端都不是问题,SA认为盒子看起来不错。 广域网链路上的networking拥塞也不是问题,networking认为networking看起来不错。 事实上,每个人都认为每件作品看起来都不错,但performance依然不佳! 有关如何优化这种情况的任何想法? 还是要进行调查的事情,可能会提供有关正在发生的事情的暗示?

iSCSI存储上的页面分配失败

我们在Infiniband总线(ipoib)上运行CentOS 6.3 iscsi服务器(16GB RAM)。 当负载很高,我可以看到多个错误: Sep 3 23:22:20 stor4内核:tgtd:页面分配失败。 顺序:2,模式:0x20 Sep 3 23:22:20 stor4 kernel:Pid:3637,comm:tgtd没有污染2.6.32#1 Sep 3 23:22:20 stor4 kernel:呼叫跟踪: Sep 3 23:22:20 stor4 kernel:[]? __alloc_pages_nodemask + 0x77f / 0x940 Sep 3 23:22:20 stor4 kernel:[]? kmem_getpages + 0X62 /量0x170 Sep 3 23:22:20 stor4 kernel:[]? fallback_alloc + 0x1ba / 0x270 Sep 3 23:22:20 stor4 kernel:[]? cache_grow […]

游戏服务器HaProxy,我的configuration有什么问题?

我主持一个使用TCP连接的游戏客户端的网站。 我目前正在寻找一种方法来代理我的连接从一台服务器到我的原始服务器。 我已经testing了iptables的转发,我发现,虽然它的工作HaProxy似乎performance更好。 我面临的问题是HaProxy在随机连接打开后随机断开用户连接。 通常不到2分钟。 我对Linux很新,当然我也是haProxy的新手。 在这里,我的configuration,原始IP地址已被删除,原因很明显: global daemon maxconn 1000 defaults mode tcp timeout connect 5000ms timeout client 5000ms timeout server 5000ms frontend proxy-in mode tcp bind *:1233 default_backend proxy-out backend proxy-out mode tcp server s1 127.0.0.1:1232 listen admin bind *:7772 stats enable 谢谢。 可以提供更多细节(如果需要的话)。

Tomcat没有从TCP recv-Q获取数据,挂起

我有一个程序,实质上是一个在CentOS Linux 6.3上运行PostgreSQL DB的tomcat服务器。 当客户端向服务器提交大量数据(〜10MB)时,应该在TCP 9090上接收数据,客户端似乎挂起而没有得到服务器的响应。 我在日志中没有看到任何重要的东西,我只能发现端口9090上存在连接,并且在netstat的输出中有大约3.5 MB坐在recv-Q上。 这可能是一个系统或应用程序的问题? 这是什么strace显示: 9089 futex(0x7fdd80862528, FUTEX_WAKE_PRIVATE, 1) = 0 9089 futex(0x7fdd81e145a4, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, {1374870092, 226655000}, ffffffff <unfinished …> 9085 <… futex resumed> ) = -1 ETIMEDOUT (Connection timed out) 9085 futex(0x7fdd88004728, FUTEX_WAKE_PRIVATE, 1) = 0 9085 futex(0x7fdd94013464, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, {1374870092, 226812000}, ffffffff <unfinished …> 9071 <… futex resumed> […]

为HTTP请求优化操作系统

我们做了很多的HTTP请求。 最近,我们开始考虑在操作系统级别进行优化,以便从一台机器发出更多的请求。 为了检查我们的操作系统的性能,我创build了一个小的基准来比较不同机器上的东西。 基准使用curl -w这样的: #!/bin/bash for (( ; ; )) do curl $URL -o /dev/null -s -w "SIZE: %{size_download} SPEED: %{speed_download} LOOKUP: %{time_namelookup} CONNECT: %{time_connect} START: %{time_starttransfer} TOTAL: %{time_total}\n" done 现在我运行它为1个单一的URL。 结果如下:从我的本地开发机器(连接光纤): SPEED (b/sec) LOOKUP CONNECT START TOTAL 13,331.2481 0.0022 0.0228 0.2163 0.2175 在我们的一台生产服务器上(使用XEN虚拟化),结果稍有不同: SPEED (b/sec) LOOKUP CONNECT START TOTAL 22,764.7700 0.0093 0.0455 0.1318 […]