Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-WIC-Cnf
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
3
Issues
3
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
CommunityXG
OpenXG-WIC-Cnf
Commits
254c58e1
Commit
254c58e1
authored
Oct 31, 2019
by
wutu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
更新TC流控接口
parent
4df52336
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
131 additions
and
16 deletions
+131
-16
bishe-edge-center/src/test/java/top/ninwoo/edgecenter/InDockerTests.java
...er/src/test/java/top/ninwoo/edgecenter/InDockerTests.java
+41
-0
bishe-utils/src/main/java/top/ninwoo/utils/util/TcUtils.java
bishe-utils/src/main/java/top/ninwoo/utils/util/TcUtils.java
+11
-0
bishe-utils/src/main/java/top/ninwoo/utils/util/impl/TcUtilsImpl.java
...src/main/java/top/ninwoo/utils/util/impl/TcUtilsImpl.java
+79
-16
No files found.
bishe-edge-center/src/test/java/top/ninwoo/edgecenter/InDockerTests.java
View file @
254c58e1
...
...
@@ -5,6 +5,8 @@ import org.junit.Assert;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.junit4.SpringRunner
;
...
...
@@ -29,6 +31,7 @@ import java.util.Map;
@RunWith
(
SpringRunner
.
class
)
@SpringBootTest
public
class
InDockerTests
{
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
InDockerTests
.
class
);
@Autowired
DockerService
dockerService
;
...
...
@@ -125,6 +128,44 @@ public class InDockerTests {
System
.
out
.
println
(
result
);
}
@Test
public
void
testTcDelay
()
{
// 查看未加限制的网络情况
LOG
.
info
(
"未加任何限制的网络:\n"
+
pingTest
());
dockerService
.
execInDocker
(
dockerContainer1
.
getId
(),
"tc qdisc add dev eth1 root netem delay 200ms"
);
LOG
.
info
(
"添加200ms固定延迟的延迟:\n"
+
pingTest
());
dockerService
.
execInDocker
(
dockerContainer1
.
getId
(),
"tc qdisc change dev eth1 root netem delay 100ms 10ms"
);
LOG
.
info
(
"添加100ms延时, 并添加10ms的随机延迟"
+
pingTest
());
dockerService
.
execInDocker
(
dockerContainer1
.
getId
(),
"tc qdisc change dev eth1 root netem delay 100ms 10ms 25%"
);
LOG
.
info
(
"添加100ms延时, 并添加10ms的随机延迟, 25%相关性"
+
pingTest
());
dockerService
.
execInDocker
(
dockerContainer1
.
getId
(),
"tc qdisc change dev eth1 netem delay 100ms 20ms distribution normal"
);
LOG
.
info
(
"正态分布"
+
pingTest
());
dockerService
.
execInDocker
(
dockerContainer1
.
getId
(),
"tc qdisc change dev eth1 root netem loss 10%"
);
LOG
.
info
(
"10%丢包率:"
+
pingTest
());
}
@Test
public
void
testTcQos
()
{
// 测试网络带宽
LOG
.
info
(
"为做任何限制的网络:\n"
+
basicQos
());
dockerService
.
execInDocker
(
dockerContainer1
.
getId
(),
"tc qdisc add dev eth1 root tbf rate 1mbit burst 32kbit latency 400ms"
);
LOG
.
info
(
"限制带宽为1mbit的网络:\n"
+
basicQos
());
}
public
String
basicQos
()
{
String
result
=
dockerService
.
execInDocker
(
dockerContainer2
.
getId
(),
"iperf -c 10.1.100.2 -i -t 2"
.
split
(
" "
));
return
result
;
}
public
String
pingTest
()
{
return
dockerService
.
execInDocker
(
dockerContainer1
.
getId
(),
"ping 10.1.100.3 -c 100"
);
}
@Test
public
void
testParseIptablesDetail
()
{
/**
...
...
bishe-utils/src/main/java/top/ninwoo/utils/util/TcUtils.java
View file @
254c58e1
...
...
@@ -7,4 +7,15 @@ package top.ninwoo.utils.util;
*/
public
interface
TcUtils
{
boolean
addQos
(
String
containerId
,
String
maxRate
,
String
minRate
);
boolean
delQos
(
String
containerId
);
boolean
addDelay
(
String
containerId
,
int
delay
);
boolean
addDelay
(
String
containerId
,
int
delay
,
int
randomDelay
);
boolean
addDelay
(
String
containerId
,
int
delay
,
int
randomDelay
,
int
correlation
);
boolean
addDelay
(
String
contianerId
,
int
delay
,
int
randomDelay
,
String
policy
);
}
bishe-utils/src/main/java/top/ninwoo/utils/util/impl/TcUtilsImpl.java
View file @
254c58e1
...
...
@@ -4,6 +4,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import
top.ninwoo.utils.util.DockerUtils
;
import
top.ninwoo.utils.util.TcUtils
;
import
java.util.HashSet
;
import
java.util.Set
;
/**
* @Author joliu
* @Description
...
...
@@ -14,34 +17,37 @@ public class TcUtilsImpl implements TcUtils {
@Autowired
DockerUtils
dockerUtils
;
Set
<
String
>
supportPolicies
=
new
HashSet
<>();
{
supportPolicies
.
add
(
"distribution"
);
}
/**
*
这是个
*
latency
* @param containerId
* @param maxRate
* @param
minRate
* @param maxRate
1mbit
* @param
latency 500ms 超过这个阈值的将被直接丢弃
* @return
*/
public
boolean
addQos
(
String
containerId
,
String
maxRate
,
String
minRate
)
{
String
resul
=
""
;
// 开启限速
dockerUtils
.
execInDocker
(
containerId
,
"tc qdisc add dev eth1 root handle 1: htb default 20"
);
// 下行总速率5Mbit
dockerUtils
.
execInDocker
(
containerId
,
"tc class add dev eth1 parent 1:0 classid 1:1 htb rate "
+
maxRate
);
// 1 号通道的下行速度,最小3Mbit 最大5 Mbit (还可以添加优先级)
dockerUtils
.
execInDocker
(
containerId
,
"tc class add dev eth1 parent 1:1 classid 1:20 htb rate "
+
minRate
+
" ceil "
+
maxRate
);
// 使用了一个公平侧率
dockerUtils
.
execInDocker
(
containerId
,
"tc qdisc add dev eth1 parent 1:20 handle 20: sfq perturb 10"
);
// 设置了一个过滤器--TODO: 这个好像没有生效
dockerUtils
.
execInDocker
(
containerId
,
"tc filter add dev eth1 parent 1:20 protocol ip u32 match ip sport 5002 0xffff classid 1:20"
);
@Override
public
boolean
addQos
(
String
containerId
,
String
maxRate
,
String
latency
)
{
String
res
=
dockerUtils
.
execInDocker
(
containerId
,
"tc qdisc add dev eth1 root tbf rate "
+
maxRate
+
" burst 32kbit latency "
+
latency
);
if
(!
""
.
equals
(
res
))
{
return
false
;
}
return
true
;
}
/**
* 解除限速
* @param containerId
* @return
*/
@Override
public
boolean
delQos
(
String
containerId
)
{
String
res
=
dockerUtils
.
execInDocker
(
containerId
,
"tc qdisc del dev eth1 root"
);
if
(!
""
.
equals
(
res
))
{
...
...
@@ -49,4 +55,61 @@ public class TcUtilsImpl implements TcUtils {
}
return
true
;
}
@Override
public
boolean
addDelay
(
String
containerId
,
int
delay
)
{
return
addDelay
(
containerId
,
delay
,
0
,
0
);
}
@Override
public
boolean
addDelay
(
String
containerId
,
int
delay
,
int
randomDelay
)
{
return
addDelay
(
containerId
,
delay
,
randomDelay
,
0
);
}
/**
* 添加时延
* @param containerId
* @param delay 添加的延迟
* @param randomDelay 随机时延范围
* @param correlation 相关系数
* @return
*/
@Override
public
boolean
addDelay
(
String
containerId
,
int
delay
,
int
randomDelay
,
int
correlation
)
{
String
cmd
=
"tc qdisc add dev eth1 root netem delay "
+
delay
+
"ms "
;
if
(
randomDelay
>
0
)
{
cmd
+=
randomDelay
+
"ms "
;
}
if
(
correlation
>
0
&&
correlation
<
100
)
{
cmd
+=
correlation
+
"%"
;
}
String
res
=
dockerUtils
.
execInDocker
(
containerId
,
cmd
);
if
(
""
.
equals
(
res
))
{
return
true
;
}
return
false
;
}
/**
* 正太分布的随机延时
* @param contianerId
* @param delay
* @param randomDelay
* @param policy distribution是目前支持的
* @return
*/
@Override
public
boolean
addDelay
(
String
contianerId
,
int
delay
,
int
randomDelay
,
String
policy
)
{
if
(!
supportPolicies
.
contains
(
policy
))
{
return
false
;
}
String
cmd
=
"tc qdisc change dev eth1 netem delay "
+
delay
+
"ms "
+
randomDelay
+
"ms "
+
policy
+
" normal"
;
String
res
=
dockerUtils
.
execInDocker
(
contianerId
,
cmd
);
if
(
""
.
equals
(
res
))
{
return
true
;
}
return
false
;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment