我试图通过在单个服务器进程中传输和路由来在多个客户端(进程)之间本地移动数据。此传输通过localhost:8080上的websockets进行。服务器和客户端都是用python实现的;客户端是python的websocket-client库的简单版本,服务器是tornado.web.Application对象。 现在,当从客户端1传输数据包(大小约为20-100字节)时 - >服务器 - > client2,我在不同的平台上看到不同的速度: 1.亚马逊AWS:给我一个大约0.7毫秒的时间延迟。 2. Raspberry Pi:给我一个4.5毫秒的时间延迟。
如果客户端在顶部使用任何类型的排队(collections.deque库),则RPi中的延迟会有时超过100毫秒,尽管在AWS中它会保持在7.5毫秒内。 我知道本地IP地址套接字必须作为文件描述符保存在易失性存储器中,并且添加不同报头和websocket相关参数的网络开销会增加数据包处理过程中的延迟。 我的怀疑是RPi上的RAM读写速度比AWS小。我通过运行'dd'来证实这一点。在每个平台上传输1k大小的块。 RPi不会超过95Mb /秒,而AWS容易超过900 Mb /秒。我认为RPi通过串行接口连接到SD卡。但亚马逊必须比使用EC2虚拟机更好。
我的问题是这种怀疑是否属实? RAM访问速度是否可以单独负责两个平台之间的性能差异。
注意:很抱歉,我不想在此处粘贴部分代码,除非有可靠的原因/需要。谢谢你的理解。
答案 0 :(得分:0)
经过一番研究后,我能够找到导致这些延迟的一些细节:
示例:
Write speed on AWS:
$ dd if=/dev/zero of=test bs=1048576 count=200
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 0.301986 s, 694 MB/s
Write speed on Raspberry:
# dd if=/dev/zero of=test bs=1048576 count=200
200+0 records in
200+0 records out
209715200 bytes (210 MB) copied, 23.9886 s, 8.7 MB/s