我没有对我的硬件或内核配置(所有默认设置、全新操作系统安装、Linux 内核 3.11 TCP/IP 堆栈)进行任何异常处理,我通过 TCP 平均每秒发送大约 383 万条消息,而我平均只有 0.75每秒通过 UDP 发送百万条消息。这似乎完全违背了我对这两个协议的期望。
造成巨大差异的最可能原因是什么,我如何在 Ubuntu 13.10 上对其进行诊断?
#TCP RESULTS
Recv Send Send Utilization Service Demand
Socket Socket Message Elapsed Send Recv Send Recv
Size Size Size Time Throughput local remote local remote
bytes bytes bytes secs. 10^6bits/s % S % S us/KB us/KB
87380 65536 64 10.00 1963.43 32.96 17.09 5.500 2.852
#UDP RESULTS
Socket Message Elapsed Messages CPU Service
Size Size Time Okay Errors Throughput Util Demand
bytes bytes secs …Run Code Online (Sandbox Code Playgroud) 我有一个双端口以太网 NIC,假设我已将两个端口连接到一个循环中,并将以下 IP 分配给 2 个以太网接口:
我想通过物理网络将流量从一个端口发送到另一个端口,例如 ping 192.168.3.1from 192.168.2.1. 但是,Linux 内核中的 TCP/IP 堆栈识别出这两个地址是本地地址,而是将流量发送到环回适配器,因此流量永远不会到达物理网络。
我最接近解决方案的是 Anastasov 的send-to-self patch,不幸的是,它自内核 3.6 以来已停止使用,因此它不适用于我的 Ubuntu 13.10(内核 3.11)。我已经尝试为 3.11 重写补丁,但我似乎无法在 Ubuntu 发行版中找到这些补丁:
有没有办法让发送给自己的补丁工作,或者替代解决方案?
假设我有 4 个物理内核(索引为 0-3)并且我将内核 1-3 专用于用户应用程序的屏蔽,并尝试将所有系统线程引导到内核 0 上。我正在关注此处的答案并使用cset:
# /usr/local/bin/cset shield --cpu 1-3
cset: --> activating shielding:
cset: moving 145 tasks from root into system cpuset...
[==================================================]%
cset: "system" cpuset of CPUSPEC(0) with 145 tasks running
cset: "user" cpuset of CPUSPEC(1-3) with 0 tasks running
Run Code Online (Sandbox Code Playgroud)
但是,我似乎无法将所有内核线程移动到核心 0 上:
# cset shield --kthread on
cset shield --kthread on
cset: --> activating kthread shielding
cset: kthread shield activated, moving 175 tasks into system cpuset...
[==================================================]%
cset: **> 30 …Run Code Online (Sandbox Code Playgroud) networking ×2
centos ×1
cpu ×1
ethernet ×1
interrupt ×1
ip ×1
nat ×1
performance ×1
routing ×1
scheduling ×1
tcp ×1
udp ×1