Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
c28f1353
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
c28f1353
编写于
8月 23, 2021
作者:
wmmhello
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[TD-5838] add network speed test function
上级
91ab5f22
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
137 addition
and
6 deletion
+137
-6
src/kit/shell/inc/shell.h
src/kit/shell/inc/shell.h
+2
-0
src/kit/shell/src/shellLinux.c
src/kit/shell/src/shellLinux.c
+13
-0
src/kit/shell/src/shellMain.c
src/kit/shell/src/shellMain.c
+3
-1
src/kit/shell/src/shellWindows.c
src/kit/shell/src/shellWindows.c
+5
-1
src/util/inc/tnettest.h
src/util/inc/tnettest.h
+1
-1
src/util/src/tnettest.c
src/util/src/tnettest.c
+113
-3
未找到文件。
src/kit/shell/inc/shell.h
浏览文件 @
c28f1353
...
...
@@ -55,6 +55,8 @@ typedef struct SShellArguments {
int
abort
;
int
port
;
int
pktLen
;
int
pktNum
;
char
*
pktType
;
char
*
netTestRole
;
}
SShellArguments
;
...
...
src/kit/shell/src/shellLinux.c
浏览文件 @
c28f1353
...
...
@@ -50,6 +50,8 @@ static struct argp_option options[] = {
{
"timezone"
,
'z'
,
"TIMEZONE"
,
0
,
"Time zone of the shell, default is local."
},
{
"netrole"
,
'n'
,
"NETROLE"
,
0
,
"Net role when network connectivity test, default is startup, options: client|server|rpc|startup|sync|speen|fqdn."
},
{
"pktlen"
,
'l'
,
"PKTLEN"
,
0
,
"Packet length used for net test, default is 1000 bytes."
},
{
"pktnum"
,
'N'
,
"PKTNUM"
,
0
,
"Packet numbers used for net test, default is 100."
},
{
"pkttype"
,
'S'
,
"PKTTYPE"
,
0
,
"Packet type used for net test, default is TCP."
},
{
0
}};
static
error_t
parse_opt
(
int
key
,
char
*
arg
,
struct
argp_state
*
state
)
{
...
...
@@ -146,6 +148,17 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) {
return
-
1
;
}
break
;
case
'N'
:
if
(
arg
)
{
arguments
->
pktNum
=
atoi
(
arg
);
}
else
{
fprintf
(
stderr
,
"Invalid packet number
\n
"
);
return
-
1
;
}
break
;
case
'S'
:
arguments
->
pktType
=
arg
;
break
;
case
OPT_ABORT
:
arguments
->
abort
=
1
;
break
;
...
...
src/kit/shell/src/shellMain.c
浏览文件 @
c28f1353
...
...
@@ -85,6 +85,8 @@ SShellArguments args = {
.
threadNum
=
5
,
.
commands
=
NULL
,
.
pktLen
=
1000
,
.
pktNum
=
100
,
.
pktType
=
"TCP"
,
.
netTestRole
=
NULL
};
...
...
@@ -118,7 +120,7 @@ int main(int argc, char* argv[]) {
printf
(
"Failed to init taos"
);
exit
(
EXIT_FAILURE
);
}
taosNetTest
(
args
.
netTestRole
,
args
.
host
,
args
.
port
,
args
.
pktLen
);
taosNetTest
(
args
.
netTestRole
,
args
.
host
,
args
.
port
,
args
.
pktLen
,
args
.
pktNum
,
args
.
pktType
);
exit
(
0
);
}
...
...
src/kit/shell/src/shellWindows.c
浏览文件 @
c28f1353
...
...
@@ -55,9 +55,13 @@ void printHelp() {
printf
(
"%s%s
\n
"
,
indent
,
"-t"
);
printf
(
"%s%s%s
\n
"
,
indent
,
indent
,
"Time zone of the shell, default is local."
);
printf
(
"%s%s
\n
"
,
indent
,
"-n"
);
printf
(
"%s%s%s
\n
"
,
indent
,
indent
,
"Net role when network connectivity test, default is startup, options: client|server|rpc|startup|sync."
);
printf
(
"%s%s%s
\n
"
,
indent
,
indent
,
"Net role when network connectivity test, default is startup, options: client|server|rpc|startup|sync
|speed|fqdn
."
);
printf
(
"%s%s
\n
"
,
indent
,
"-l"
);
printf
(
"%s%s%s
\n
"
,
indent
,
indent
,
"Packet length used for net test, default is 1000 bytes."
);
printf
(
"%s%s
\n
"
,
indent
,
"-N"
);
printf
(
"%s%s%s
\n
"
,
indent
,
indent
,
"Packet numbers used for net test, default is 100."
);
printf
(
"%s%s
\n
"
,
indent
,
"-S"
);
printf
(
"%s%s%s
\n
"
,
indent
,
indent
,
"Packet type used for net test, default is TCP."
);
printf
(
"%s%s
\n
"
,
indent
,
"-V"
);
printf
(
"%s%s%s
\n
"
,
indent
,
indent
,
"Print program version."
);
...
...
src/util/inc/tnettest.h
浏览文件 @
c28f1353
...
...
@@ -20,7 +20,7 @@
extern
"C"
{
#endif
void
taosNetTest
(
char
*
role
,
char
*
host
,
int
port
,
int
pkgLen
);
void
taosNetTest
(
char
*
role
,
char
*
host
,
int
32_t
port
,
int32_t
pkgLen
,
int32_t
pkgNum
,
char
*
pkgType
);
#ifdef __cplusplus
}
...
...
src/util/src/tnettest.c
浏览文件 @
c28f1353
...
...
@@ -27,6 +27,10 @@
#include "syncMsg.h"
#define MAX_PKG_LEN (64 * 1000)
#define MAX_SPEED_PKG_LEN (1024 * 1024 * 1024)
#define MIN_SPEED_PKG_LEN 1024
#define MAX_SPEED_PKG_NUM 10000
#define MIN_SPEED_PKG_NUM 1
#define BUFFER_SIZE (MAX_PKG_LEN + 1024)
extern
int32_t
tsRpcMaxUdpSize
;
...
...
@@ -466,6 +470,7 @@ static void taosNetTestRpc(char *host, int32_t startPort, int32_t pkgLen) {
sendpkgLen
=
pkgLen
;
}
tsRpcForceTcp
=
1
;
int32_t
ret
=
taosNetCheckRpc
(
host
,
port
,
sendpkgLen
,
spi
,
NULL
);
if
(
ret
<
0
)
{
printf
(
"failed to test TCP port:%d
\n
"
,
port
);
...
...
@@ -479,6 +484,7 @@ static void taosNetTestRpc(char *host, int32_t startPort, int32_t pkgLen) {
sendpkgLen
=
pkgLen
;
}
tsRpcForceTcp
=
0
;
ret
=
taosNetCheckRpc
(
host
,
port
,
pkgLen
,
spi
,
NULL
);
if
(
ret
<
0
)
{
printf
(
"failed to test UDP port:%d
\n
"
,
port
);
...
...
@@ -542,12 +548,110 @@ static void taosNetTestServer(char *host, int32_t startPort, int32_t pkgLen) {
}
}
void
taosNetTest
(
char
*
role
,
char
*
host
,
int32_t
port
,
int32_t
pkgLen
)
{
static
void
taosNetTestFqdn
(
char
*
host
)
{
int
code
=
0
;
uint64_t
startTime
=
taosGetTimestampUs
();
uint32_t
ip
=
taosGetIpv4FromFqdn
(
host
);
if
(
ip
==
0xffffffff
)
{
uError
(
"failed to get IP address from %s since %s"
,
host
,
strerror
(
errno
));
code
=
-
1
;
}
uint64_t
endTime
=
taosGetTimestampUs
();
uint64_t
el
=
endTime
-
startTime
;
printf
(
"check convert fqdn spend, status: %d
\t
cost: %"
PRIu64
" us
\n
"
,
code
,
el
);
return
;
}
static
void
taosNetCheckSpeed
(
char
*
host
,
int32_t
port
,
int32_t
pkgLen
,
int32_t
pkgNum
,
char
*
pkgType
)
{
// record config
int32_t
compressTmp
=
tsCompressMsgSize
;
int32_t
maxUdpSize
=
tsRpcMaxUdpSize
;
int32_t
forceTcp
=
tsRpcForceTcp
;
if
(
0
==
strcmp
(
"tcp"
,
pkgType
)){
tsRpcForceTcp
=
1
;
tsRpcMaxUdpSize
=
0
;
// force tcp
}
else
{
tsRpcForceTcp
=
0
;
tsRpcMaxUdpSize
=
INT_MAX
;
}
tsCompressMsgSize
=
-
1
;
SRpcEpSet
epSet
;
SRpcMsg
reqMsg
;
SRpcMsg
rspMsg
;
void
*
pRpcConn
;
char
secretEncrypt
[
32
]
=
{
0
};
char
spi
=
0
;
pRpcConn
=
taosNetInitRpc
(
secretEncrypt
,
spi
);
if
(
NULL
==
pRpcConn
)
{
uError
(
"failed to init client rpc"
);
return
;
}
printf
(
"check net spend, host:%s port:%d pkgLen:%d pkgNum:%d pkgType:%s
\n\n
"
,
host
,
port
,
pkgLen
,
pkgNum
,
pkgType
);
int32_t
totalSucc
=
0
;
uint64_t
startT
=
taosGetTimestampUs
();
for
(
int32_t
i
=
1
;
i
<=
pkgNum
;
i
++
)
{
uint64_t
startTime
=
taosGetTimestampUs
();
memset
(
&
epSet
,
0
,
sizeof
(
SRpcEpSet
));
epSet
.
inUse
=
0
;
epSet
.
numOfEps
=
1
;
epSet
.
port
[
0
]
=
port
;
strcpy
(
epSet
.
fqdn
[
0
],
host
);
reqMsg
.
msgType
=
TSDB_MSG_TYPE_NETWORK_TEST
;
reqMsg
.
pCont
=
rpcMallocCont
(
pkgLen
);
reqMsg
.
contLen
=
pkgLen
;
reqMsg
.
code
=
0
;
reqMsg
.
handle
=
NULL
;
// rpc handle returned to app
reqMsg
.
ahandle
=
NULL
;
// app handle set by client
strcpy
(
reqMsg
.
pCont
,
"nettest speed"
);
rpcSendRecv
(
pRpcConn
,
&
epSet
,
&
reqMsg
,
&
rspMsg
);
int
code
=
0
;
if
((
rspMsg
.
code
!=
0
)
||
(
rspMsg
.
msgType
!=
TSDB_MSG_TYPE_NETWORK_TEST
+
1
))
{
uError
(
"ret code 0x%x %s"
,
rspMsg
.
code
,
tstrerror
(
rspMsg
.
code
));
code
=
-
1
;
}
else
{
totalSucc
++
;
}
rpcFreeCont
(
rspMsg
.
pCont
);
uint64_t
endTime
=
taosGetTimestampUs
();
uint64_t
el
=
endTime
-
startTime
;
printf
(
"progress:%5d/%d
\t
status:%d
\t
cost:%8.2lf ms
\t
speed:%8.2lf MB/s
\n
"
,
i
,
pkgNum
,
code
,
el
/
1000
.
0
,
pkgLen
/
(
el
/
1000000
.
0
)
/
1024
.
0
/
1024
.
0
);
}
int64_t
endT
=
taosGetTimestampUs
();
uint64_t
elT
=
endT
-
startT
;
printf
(
"
\n
total succ:%5d/%d
\t
cost:%8.2lf ms
\t
speed:%8.2lf MB/s
\n
"
,
totalSucc
,
pkgNum
,
elT
/
1000
.
0
,
pkgLen
/
(
elT
/
1000000
.
0
)
/
1024
.
0
/
1024
.
0
*
totalSucc
);
rpcClose
(
pRpcConn
);
// return config
tsCompressMsgSize
=
compressTmp
;
tsRpcMaxUdpSize
=
maxUdpSize
;
tsRpcForceTcp
=
forceTcp
;
return
;
}
void
taosNetTest
(
char
*
role
,
char
*
host
,
int32_t
port
,
int32_t
pkgLen
,
int32_t
pkgNum
,
char
*
pkgType
)
{
tscEmbedded
=
1
;
if
(
host
==
NULL
)
host
=
tsLocalFqdn
;
if
(
port
==
0
)
port
=
tsServerPort
;
if
(
pkgLen
<=
10
)
pkgLen
=
1000
;
if
(
pkgLen
>
MAX_PKG_LEN
)
pkgLen
=
MAX_PKG_LEN
;
if
(
0
==
strcmp
(
"speed"
,
role
)){
if
(
pkgLen
<=
MIN_SPEED_PKG_LEN
)
pkgLen
=
MIN_SPEED_PKG_LEN
;
if
(
pkgLen
>
MAX_SPEED_PKG_LEN
)
pkgLen
=
MAX_SPEED_PKG_LEN
;
if
(
pkgNum
<=
MIN_SPEED_PKG_NUM
)
pkgNum
=
MIN_SPEED_PKG_NUM
;
if
(
pkgNum
>
MAX_SPEED_PKG_NUM
)
pkgNum
=
MAX_SPEED_PKG_NUM
;
}
else
{
if
(
pkgLen
<=
10
)
pkgLen
=
1000
;
if
(
pkgLen
>
MAX_PKG_LEN
)
pkgLen
=
MAX_PKG_LEN
;
}
if
(
0
==
strcmp
(
"client"
,
role
))
{
taosNetTestClient
(
host
,
port
,
pkgLen
);
...
...
@@ -560,6 +664,12 @@ void taosNetTest(char *role, char *host, int32_t port, int32_t pkgLen) {
taosNetCheckSync
(
host
,
port
);
}
else
if
(
0
==
strcmp
(
"startup"
,
role
))
{
taosNetTestStartup
(
host
,
port
);
}
else
if
(
0
==
strcmp
(
"speed"
,
role
))
{
tscEmbedded
=
0
;
char
type
[
10
]
=
{
0
};
taosNetCheckSpeed
(
host
,
port
,
pkgLen
,
pkgNum
,
strtolower
(
type
,
pkgType
));
}
else
if
(
0
==
strcmp
(
"fqdn"
,
role
))
{
taosNetTestFqdn
(
host
);
}
else
{
taosNetTestStartup
(
host
,
port
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录