- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
作为练习的一部分,我正在编写一个小程序来测试网络吞吐量,并且需要将发送和接收缓冲区增加到 256 KB(以尝试提高 TCP 性能)。我使用 setsockopt()
和 SO_SNDBUF/SO_RCVBUF 选项执行此操作,并且还增加了“net.core.rmem_max”和“net.core.wmem_max”值。
getsockopt() 确认缓冲区大小的增加(256KB 值的两倍)所以我知道这很好。但是,当我将 256KB 的数据从一台主机发送到另一台主机时,接收方总是在多次读取中接收它,每次读取的大小各不相同(形式介于 20 到 40 次读取之间,接收字节数从 1448 到 18824 不等)直到它接收到所有数据.在这一点上,我主要对这些问题很困惑,
下面是显示读取部分的接收方代码片段,
while(1) {
memset(&client_addr, 0, sizeof(client_addr));
if ((connfd = accept(listenfd, (struct sockaddr*)&client_addr, &socklen)) <= 0) {
perror("accept()");
exit(EXIT_FAILURE);
}
while ((n = recv(connfd, &buff[0], BUFF_SIZE, 0/*MSG_WAITALL*/)) > 0) {
totalBytes += n;
++pktCount;
printf("Received(%d): %d bytes\n", pktCount, n);
}
if (n == 0) {
printf("Connection closed (Total: %lu bytes received)\n", totalBytes);
}
close(connfd);
connfd = -1;
totalBytes = 0;
pktCount = 0;
}
任何帮助都会很棒。
TIA
最佳答案
With the increased buffer size shouldn't it receive it in one read?
没有。 TCP/IP 是一种流式传输协议(protocol),将数据分段成较小的数据包。缓冲区大小主要影响底层网络层实现可以使用多少内存(Linux 通常将您设置的内存加倍),但不能保证接收方将以与发送方发送它的大小完全相同的 block 接收数据(在总之,当您调用 send()/write()
时,实际上并不意味着数据包已发送。此外,由于 MTU,您很可能还是将数据包拆分了。
Also why do the amount of bytes in each read differ so much (shouldnt they be more of less constant)?
您可能想调试为什么会发生这种情况。有数百个因素——正在使用的 NIC、它的设置、它的驱动程序、TCP/IP、TCP、以太网网络层设置、发送方和接收方之间的东西(即交换机)等。但是,嘿,更多的数据进来,而你的操作系统并且应用程序正在处理前一个 block 。鉴于将数据从 NIC 传递到用户空间应用程序的成本相对非常高,因此缓冲数据并以不同大小获取数据也就不足为奇了。
Is there some way to ensure the 256KB is received in one read?
可能有。可以使用阻塞式 read()
并要求操作系统仅在接收到至少 256KB 或发生错误时才唤醒进程。
关于c - TCP 网络吞吐量测量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13543565/
有没有一种方法我可以编写一个“工具”来分析从 C/C++ 程序生成的 x86 汇编语言并以这种方式测量性能,无论我在 1GHz 还是 3GHz 上运行它都没有关系处理器? 我在考虑更多的指令吞吐量?我
我们正在使用 NATS 并使用 3+ 节点的集群。我们有几个生产者和许多消费者。消息大小很小 (~100bytes) 但是我们的吞吐量有点高。 ~40k/秒。所有流量都在 2x10gbps 绑定(bi
我需要一些帮助才能使用 JMeter。我想记录两种不同的场景,比如点击 2 个不同的按钮。如果我尝试为 2 个用户运行,一个用户应该点击第一个按钮,另一个用户应该同时点击另一个按钮。 我知道这是基本问
在 100Gb 网络上,我创建了一个服务器来监听 4 个端口,grpc 客户端可以达到 3GB+/s 的吞吐量。然而,当服务器监听一个端口时,grpc 客户端达到了 1GB/s 的吞吐量,即使我设置了
android Handlers可行的数据IO吞吐量是多少?足以在线程之间传递原始音频或视频吗?它应该是可持续的吗? 我在 android Handler docs 中没有看到任何对此的引用, $WE
我正在使用 logstash 和 elasticsearch 构建日志系统。 RabbitMQ 用于在两个 logstash 之间排队日志消息。 消息路径如下: source log -> logst
我正在研究 .NET Core 在 Linux 机器上的性能。具体来说,确定框架本身可用的工具可能存在什么样的限制。 我一直以 ~ 50,000 pps 的价格击中盒子。到目前为止,似乎 ~ 20,0
我有一个使用 nfs 挂载的 gentoo 无盘客户端,看起来 nfs 的吞吐量很慢。 iperf 显示网络能够推送 770 Mb/s,hdparm 显示服务器上的 SATA 磁盘速度为 90 Mb/
我正在使用 Java Preferences API 来存储 Swing 应用程序的窗口位置和大小。此时此刻,我正在监听窗口调整大小/重新定位事件并在每次更改时存储位置和大小。然而,这意味着如果用户慢
我正在尝试弄清楚 DataFlow 如何扩展某些操作以及如何使其表现最佳。首先,我刚刚创建了一个简单的流程,它从 BigQuery 中读取数据(约 2500 万行,总共 30GB),进行 JSON 提
确定 Oracle Java 8 JVM 垃圾收集器吞吐量的最简单方法是什么,最好使用 JDK 命令行工具? 通过 jstat 命令,我可以获得总的垃圾收集时间(GCT 列)。根据这个值的变化与GC日
我有一个 Java 程序,它使用 HDFS 数据输入/输出流读取文件并将内容写入新文件。我的目标是找出我的 HDFS 的 I/O 吞吐量。下面是执行读/写和计时的代码片段: long start =
我了解延迟 - 消息从发件人到收件人所需的时间 - 和带宽 - 在给定时间内可以传输的最大数据量 - 但我正在努力寻找合适的术语来描述相关事物: 如果协议(protocol)是基于对话的——负载在端点
我有一个在 pesto、mod_wsgi 和 Apache 上运行的普通 WSGI 应用程序: def viewData(request): return Response("aaaaaaaa
我们计划将 10000 个 JSON 文档写入 Azure Cosmos DB (MongoDB),吞吐量单位重要吗?如果重要,我们可以增加批量负载并将其设置回较低的数字 最佳答案 是的,你可以做到。
我们计划将 10000 个 JSON 文档写入 Azure Cosmos DB (MongoDB),吞吐量单位重要吗?如果重要,我们可以增加批量负载并将其设置回较低的数字 最佳答案 是的,你可以做到。
在我的 spark 应用程序中,我正在阅读 kafka 主题。该主题有 10 个分区,因此我创建了 10 个接收器,每个接收器一个线程。通过这样的配置,我可以观察到接收器的奇怪行为。这些消费者的平均利
关于 AWS DynamoDb 吞吐量,我有些无法理解的地方。 让我们考虑强一致性读取。 现在,我明白在这种情况下,1 个容量单位意味着我每秒最多可以读取 4KB 的数据。 “每秒”这一点让我有点困惑
来自 AWS Lambda 常见问题解答: Q: Is there a limit to the number of AWS Lambda functions I can execute at onc
在内核版本 4.X 上运行 iperf tcp_ul 流量时,我观察到 tcp_ul 的吞吐量有所下降。任何人都知道,为什么会这样。 最佳答案 在内核版本 4.4 之后,他们修改了 TCP 拥塞控制算
我是一名优秀的程序员,十分优秀!