Description
What happened and what you expected to happen:
I have written a WebSocket program in Python and used it to test the latency increase caused by using Edgemesh. Experiment one involved directly running the Python program between two hosts to test the transmission latency. Experiment two involved packaging the program into a container image and running it in a KubeEdge environment with Edgemesh deployed, again to test transmission latency. The test data is as follows: there was a noticeable increase in latency when using Edgemesh. I would like to inquire about the specific reasons for this latency increase and whether there are ways to reduce it.
How to reproduce it (as minimally and precisely as possible):
server.py
import socket
import numpy as np
import json
import numbers
import sys
def is_number(var):
return isinstance(var, numbers.Number)
#创建 socket 对象
socket_server = socket.socket()
socket_server.bind(("0.0.0.0", 8888))
socket_server.listen(1)
print("等待客户端连接...")
sys.stdout.flush()
conn, address = socket_server.accept()
print(f"接收到的客户端连接信息为{address}")
while True:
#接收维度信息
dim_info = conn.recv(1024).decode()
if not dim_info:
print("No dimension info received")
continue
#print(type(dim_info))
dimensions = json.loads(dim_info)
expected_size = np.prod(dimensions) * 4 # float32 占 4 字节
#发送确认信号
conn.send(b"ACK")
#接收数据
received_data = bytearray()
while len(received_data) < expected_size:
packet = conn.recv(expected_size - len(received_data))
if not packet:
break
received_data.extend(packet)
#转换数据
np_array = np.frombuffer(received_data, dtype=np.float32).reshape(*dimensions)
print(f"接收到的 numpy 数组: {np_array.shape}")
#计算数据大小并回复
data_size_mb = len(received_data) / (1024 * 1024)
response = f"Received data size: {data_size_mb:.2f} MB"
conn.send(response.encode())
sys.stdout.flush()
#关闭连接
conn.close()
socket_server.close()
client.py
import socket
import numpy as np
import json
import time
#创建 socket 对象
socket_client = socket.socket()
socket_client.connect(("10.107.198.254", 8888))
while True:
#用户输入第一维度大小
first_dim = int(input("Enter the size of the first dimension of the array: "))
#定义数组维度并生成数组
dimensions = (first_dim, 56, 56)
np_array = np.random.rand(*dimensions).astype(np.float32)
#发送数组维度信息
dim_info = json.dumps(dimensions)
socket_client.send(dim_info.encode())
#等待确认
ack = socket_client.recv(1024)
if ack.decode() != "ACK":
print("No ACK received")
break
#发送数组数据
time_start = time.time()
binary_data = np_array.tobytes()
socket_client.sendall(binary_data)
#接收响应
data = socket_client.recv(1024).decode("UTF-8")
print(f"服务器回复的消息为:{data}")
time_end = time.time()-time_start
print('所用时间为:',time_end)
#关闭连接
socket_client.close()
Anything else we need to know?:
I conducted several sets of experiments, and the latency with Edgemesh was three to five times higher than the baseline experiment. Moreover, in high-bandwidth networks, Edgemesh showed even worse performance. Surprisingly, it demonstrated more ideal performance in complex network environments across different LANs.
Environment:
- Kubernetes version (use
kubectl version
): 1.23.7 - KubeEdge version(e.g.
cloudcore --version
andedgecore --version
): v1.23.17 & v1.22.6-kubeedge-v1.12.1 - Edgemesh version: v1.12.1