在 Linux 2.6 中发送/接收 TCP/UDP 数据包过程中的延迟来源是什么?
我想知道“乒乓”延迟测试中的延迟源。
有一些关于以太网延迟的相当好的论文,但它们只涵盖了线路和交换机中的延迟源(相当粗略,仅针对特定交换机)。
数据包之后有哪些处理步骤?
对普通 ping (icmp) 进行深度延迟分析的论文也会很有用。
我依赖社区:)
我正在努力优化使用浮点指令的函数。
对于基准测试,我需要了解指令的执行延迟,以了解理论上可能的性能。
但是,我没有找到 A53 的任何此类文档。我错过了什么吗?A53有这样的优化指南吗?
所以我试图学习计算机的各种组件的性能指标,如 L1 缓存、L2 缓存、主内存、以太网、磁盘等,如下所示:
Latency Comparison Numbers
--------------------------
L1 cache **reference** 0.5 ns
Branch mispredict 5 ns
L2 cache **reference** 7 ns 14x L1 cache
Mutex lock/unlock 25 ns
Main memory **reference** 100 ns 20x L2 cache, 200x L1 cache
Compress 1K bytes with Zippy 10,000 ns 10 us
Send 1 KB bytes over 1 Gbps network 10,000 ns 10 us
Read 4 KB randomly from SSD* 150,000 ns 150 us ~1GB/sec SSD
Read 1 MB sequentially from memory 250,000 …Run Code Online (Sandbox Code Playgroud) 对于写入工作负载情况,Scylla 如何保证/保持较低的写入延迟,因为更多的写入会产生更多的内存刷新和压缩?有限制吗?如果有人可以回答,那将非常有帮助。
我正在尝试通过预先编写的测试,重点关注性能。返回 int 列表中两个最大数字之和的最有效方法是什么?我已经尝试了以下方法,根据测试,当涉及较大的列表时,它不够快:
1. list.Sort();
list.Reverse();
return list[0] + list[1];
2. return list.OrderByDescending(num => num).FirstOrDefault() + list.OrderByDescending(num => num).Skip(1).FirstOrDefault();
3. var secondHighest = list.Distinct()
.OrderByDescending(i => i)
.Skip(1)
.First();
return list.Max() + secondHighest;
Run Code Online (Sandbox Code Playgroud) 使用C++,我想使用命令/类来获取ping主机以在我的程序中使用的延迟时间.我尝试使用ping命令,但由于其中包含其他统计信息,因此没有简单的方法来收集时间.我希望有一个更简单的方法.
HTTP GET和POST请求的网络通信有什么区别吗?
通过GET,我了解整个请求是一次性发送的.使用POST,我认为发送了初始请求,然后发送了第二个发送所有参数的请求.
例如,假设服务器和客户端之间的延迟是500毫秒.GET与POST通话的总时间是多少?
我的驱动器上有一些扇区读数很差.我可以衡量每个部门所需的阅读时间,然后比较好部门和坏部门的时间.
我可以使用处理器的计时器进行测量.如何在C/Assembly中编写程序来衡量每个扇区读取的确切时间?
所以程序将是这样的:
Start the timer
Read the disk sector
Stop the timer
Read the time measured by the timer
Run Code Online (Sandbox Code Playgroud) 我有一个包含大约2000万行的CSV文件,我想在我的Web应用程序中使用它.数据是邮政/邮政编码到实际街道地址的映射,格式如下:
[zip_or_postal_code] [street_number] [street_name] [city] [state_or_province] [country]
Run Code Online (Sandbox Code Playgroud)
我的目标是在200毫秒内保持我的查找(通过邮政编码搜索).
我不确定这是否会有所作为,但我打算做以下事情:
state/province,country和city列自己的表和引用这些在我的主表,以避免不必要的膨胀.我可以做些什么优化来帮助查找速度?例如,Google的反向地理定位API会在300毫秒内返回一个包含HTTP开销的结果.他们是如何做到的呢?
此外,我愿意使用其他数据库,但由于我已经在使用MySQL,这将是更好的选择.
编辑:查询将始终通过邮政编码完成,例如:给定邮编12345我需要返回街道#(s)/名称,城市,州和国家.街道#(s)/名称将存储为单个字符串字段,但是,我的应用程序将负责解析它们.
下面的简短代码可以解决问题.基本上我是计时方法addToStorage.我开始执行它一百万次,我能够将它的时间缩短到大约723纳秒.然后我做一个短暂的暂停(使用繁忙的旋转方法不释放cpu核心)并在另一个代码位置再次计算方法N次.令我惊讶的是,我发现N越小,addToStorage延迟越大.
例如:
If N = 1 then I get 3.6 micros
If N = 2 then I get 3.1 and 2.5 micros
if N = 5 then I get 3.7, 1.8, 1.7, 1.5 and 1.5 micros
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么会这样,以及如何解决它?我希望我的方法能够在最快的时间内始终如一地执行,无论我在哪里调用它.
注意:我不认为它与线程有关,因为我没有使用Thread.sleep.我还测试了使用taskset相同的结果将我的线程固定到cpu核心.
import java.util.ArrayList;
import java.util.List;
public class JvmOdd {
private final StringBuilder sBuilder = new StringBuilder(1024);
private final List<String> storage = new ArrayList<String>(1024 * 1024);
public void addToStorage() {
sBuilder.setLength(0); …Run Code Online (Sandbox Code Playgroud) latency ×10
performance ×3
low-latency ×2
networking ×2
arm ×1
assembly ×1
c ×1
c# ×1
c++ ×1
cpu-cache ×1
get ×1
hotspot ×1
http ×1
java ×1
jvm ×1
large-data ×1
linux-kernel ×1
list ×1
lookup ×1
mysql ×1
optimization ×1
ping ×1
post ×1
real-time ×1
scylla ×1