pikesaku’s blog

個人的な勉強メモです。記載内容について一切の責任は持ちません。

遅延(RTT)とTCPのスループットの関係

ポイント

①遅延(RTT)が小さければTCPの1セッションで帯域をフル近くまで使える。

②遅延(RTT)が大きいとTCPの1セッションあたりでは帯域をフル近くまで使えない。

③遅延(RTT)が大きいとTCPの1セッションあたりでは帯域をフル近くまで使えないが、複数セッションを使えば帯域をフル近くまで使える。

ポイントの検証結果

検証環境

直結のパスでiperf3を動かし測定
RTTはtcコマンドで設定
RTT、パケロス、帯域を設定するツールを作ったので、それで設定した。※最後部にコード掲載。

サマリ

ポイント RTT(ms) 並列実行数 最大スループット(Mb/s)
0.183 1 944
100 1 247
100 4 931

結果ログ

①の確認
root@sv1:~# echo "#SV1"; tc qdisc show; echo "#SV2"; ssh sv2-r "tc qdisc show"
#SV1
qdisc noqueue 0: dev lo root refcnt 2 
qdisc tbf 1: dev enp0s25 root refcnt 2 rate 1Gbit burst 500000b lat 36.0ms 
qdisc fq_codel 0: dev enp2s0 root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 32Mb ecn 
qdisc fq_codel 0: dev enp3s0 root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 32Mb ecn 
#SV2
qdisc noqueue 0: dev lo root refcnt 2 
qdisc tbf 1: dev enp0s25 root refcnt 2 rate 1Gbit burst 500000b lat 36.0ms 
qdisc fq_codel 0: dev enp2s0 root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 32Mb ecn 
qdisc fq_codel 0: dev enp3s0 root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 32Mb ecn 
root@sv1:~# ping sv2 -c 1 > /dev/null && ping sv2 -c 5 | tail -3
--- sv2 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4074ms
rtt min/avg/max/mdev = 0.145/0.183/0.223/0.029 ms
root@sv1:~# iperf3 -c sv2 -t 30
Connecting to host sv2, port 5201
[  4] local 192.168.0.250 port 49056 connected to 192.168.0.251 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec   113 MBytes   944 Mbits/sec    0    366 KBytes       
[  4]   1.00-2.00   sec   111 MBytes   935 Mbits/sec    0    366 KBytes       
[  4]   2.00-3.00   sec   111 MBytes   935 Mbits/sec    0    366 KBytes       
[  4]   3.00-4.00   sec   111 MBytes   934 Mbits/sec    0    366 KBytes       
[  4]   4.00-5.00   sec   111 MBytes   935 Mbits/sec    0    366 KBytes       
[  4]   5.00-6.00   sec   111 MBytes   934 Mbits/sec    0    366 KBytes       
[  4]   6.00-7.00   sec   111 MBytes   935 Mbits/sec    0    366 KBytes       
[  4]   7.00-8.00   sec   111 MBytes   934 Mbits/sec    0    366 KBytes       
[  4]   8.00-9.00   sec   111 MBytes   934 Mbits/sec    0    366 KBytes       
[  4]   9.00-10.00  sec   111 MBytes   935 Mbits/sec    0    366 KBytes       
[  4]  10.00-11.00  sec   111 MBytes   935 Mbits/sec    0    366 KBytes       
[  4]  11.00-12.00  sec   112 MBytes   943 Mbits/sec    0    553 KBytes       
[  4]  12.00-13.00  sec   111 MBytes   934 Mbits/sec    0    553 KBytes       
[  4]  13.00-14.00  sec   111 MBytes   935 Mbits/sec    0    553 KBytes       
[  4]  14.00-15.00  sec   111 MBytes   935 Mbits/sec    0    553 KBytes       
[  4]  15.00-16.00  sec   111 MBytes   935 Mbits/sec    0    553 KBytes       
[  4]  16.00-17.00  sec   111 MBytes   934 Mbits/sec    0    553 KBytes       
[  4]  17.00-18.00  sec   111 MBytes   935 Mbits/sec    0    553 KBytes       
[  4]  18.00-19.00  sec   111 MBytes   935 Mbits/sec    0    553 KBytes       
[  4]  19.00-20.00  sec   111 MBytes   934 Mbits/sec    0    553 KBytes       
[  4]  20.00-21.00  sec   111 MBytes   935 Mbits/sec    0    553 KBytes       
[  4]  21.00-22.00  sec   111 MBytes   934 Mbits/sec    0    553 KBytes       
[  4]  22.00-23.00  sec   111 MBytes   935 Mbits/sec    0    553 KBytes       
[  4]  23.00-24.00  sec   111 MBytes   935 Mbits/sec    0    553 KBytes       
[  4]  24.00-25.00  sec   111 MBytes   934 Mbits/sec    0    553 KBytes       
[  4]  25.00-26.00  sec   111 MBytes   935 Mbits/sec    0    553 KBytes       
[  4]  26.00-27.00  sec   111 MBytes   935 Mbits/sec    0    553 KBytes       
[  4]  27.00-28.00  sec   111 MBytes   934 Mbits/sec    0    553 KBytes       
[  4]  28.00-29.00  sec   111 MBytes   935 Mbits/sec    0    553 KBytes       
[  4]  29.00-30.00  sec   111 MBytes   935 Mbits/sec    0    553 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-30.00  sec  3.27 GBytes   935 Mbits/sec    0             sender
[  4]   0.00-30.00  sec  3.26 GBytes   934 Mbits/sec                  receiver

iperf Done.
②の確認
root@sv1:~# echo "#SV1"; tc qdisc show; echo "#SV2"; ssh sv2-r "tc qdisc show"
#SV1
qdisc noqueue 0: dev lo root refcnt 2 
qdisc tbf 1: dev enp0s25 root refcnt 2 rate 1Gbit burst 500000b lat 36.0ms 
qdisc netem 10: dev enp0s25 parent 1: limit 1000 delay 50.0ms
qdisc fq_codel 0: dev enp2s0 root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 32Mb ecn 
qdisc fq_codel 0: dev enp3s0 root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 32Mb ecn 
#SV2
qdisc noqueue 0: dev lo root refcnt 2 
qdisc tbf 1: dev enp0s25 root refcnt 2 rate 1Gbit burst 500000b lat 36.0ms 
qdisc netem 10: dev enp0s25 parent 1: limit 1000 delay 50.0ms
qdisc fq_codel 0: dev enp2s0 root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 32Mb ecn 
qdisc fq_codel 0: dev enp3s0 root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 32Mb ecn 
root@sv1:~# ping sv2 -c 1 > /dev/null && ping sv2 -c 5 | tail -3
--- sv2 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 100.204/100.234/100.301/0.034 ms
root@sv1:~# iperf3 -c sv2 -t 30
Connecting to host sv2, port 5201
[  4] local 192.168.0.250 port 49248 connected to 192.168.0.251 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec   239 KBytes  1.96 Mbits/sec    0   19.8 KBytes       
[  4]   1.00-2.00   sec   369 KBytes  3.02 Mbits/sec    0   32.5 KBytes       
[  4]   2.00-3.00   sec   509 KBytes  4.17 Mbits/sec    0   52.3 KBytes       
[  4]   3.00-4.00   sec   827 KBytes  6.78 Mbits/sec    0   86.3 KBytes       
[  4]   4.00-5.00   sec  1.37 MBytes  11.5 Mbits/sec    0    140 KBytes       
[  4]   5.00-6.00   sec  2.17 MBytes  18.2 Mbits/sec    0    228 KBytes       
[  4]   6.00-7.00   sec  3.54 MBytes  29.7 Mbits/sec    0    369 KBytes       
[  4]   7.00-8.00   sec  5.84 MBytes  49.0 Mbits/sec    0    600 KBytes       
[  4]   8.00-9.00   sec  7.83 MBytes  65.7 Mbits/sec    0    976 KBytes       
[  4]   9.00-10.00  sec  11.2 MBytes  94.3 Mbits/sec    0   1.52 MBytes       
[  4]  10.00-11.00  sec  18.3 MBytes   154 Mbits/sec    0   2.43 MBytes       
[  4]  11.00-12.00  sec  27.6 MBytes   232 Mbits/sec    0   3.02 MBytes       
[  4]  12.00-13.00  sec  29.4 MBytes   246 Mbits/sec    0   3.02 MBytes       
[  4]  13.00-14.00  sec  28.4 MBytes   238 Mbits/sec    0   3.02 MBytes       
[  4]  14.00-15.00  sec  28.9 MBytes   242 Mbits/sec    0   3.02 MBytes       
[  4]  15.00-16.00  sec  29.4 MBytes   247 Mbits/sec    0   3.02 MBytes       
[  4]  16.00-17.00  sec  28.6 MBytes   239 Mbits/sec    0   3.02 MBytes       
[  4]  17.00-18.00  sec  28.2 MBytes   237 Mbits/sec    0   3.02 MBytes       
[  4]  18.00-19.00  sec  28.1 MBytes   236 Mbits/sec    0   3.02 MBytes       
[  4]  19.00-20.00  sec  29.4 MBytes   247 Mbits/sec    0   3.02 MBytes       
[  4]  20.00-21.00  sec  29.4 MBytes   247 Mbits/sec    0   3.02 MBytes       
[  4]  21.00-22.00  sec  29.4 MBytes   246 Mbits/sec    0   3.02 MBytes       
[  4]  22.00-23.00  sec  28.7 MBytes   241 Mbits/sec    0   3.02 MBytes       
[  4]  23.00-24.00  sec  28.1 MBytes   236 Mbits/sec    0   3.02 MBytes       
[  4]  24.00-25.00  sec  28.2 MBytes   236 Mbits/sec    0   3.02 MBytes       
[  4]  25.00-26.00  sec  29.4 MBytes   246 Mbits/sec    0   3.02 MBytes       
[  4]  26.00-27.00  sec  29.4 MBytes   246 Mbits/sec    0   3.02 MBytes       
[  4]  27.00-28.00  sec  29.4 MBytes   247 Mbits/sec    0   3.02 MBytes       
[  4]  28.00-29.00  sec  28.9 MBytes   243 Mbits/sec    0   3.02 MBytes       
[  4]  29.00-30.00  sec  27.6 MBytes   232 Mbits/sec    0   3.02 MBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-30.00  sec   599 MBytes   167 Mbits/sec    0             sender
[  4]   0.00-30.00  sec   598 MBytes   167 Mbits/sec                  receiver

iperf Done.
root@sv1:~# 
③の確認
root@sv1:~# echo "#SV1"; tc qdisc show; echo "#SV2"; ssh sv2-r "tc qdisc show"
#SV1
qdisc noqueue 0: dev lo root refcnt 2 
qdisc tbf 1: dev enp0s25 root refcnt 2 rate 1Gbit burst 500000b lat 36.0ms 
qdisc netem 10: dev enp0s25 parent 1: limit 1000 delay 50.0ms
qdisc fq_codel 0: dev enp2s0 root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 32Mb ecn 
qdisc fq_codel 0: dev enp3s0 root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 32Mb ecn 
#SV2
qdisc noqueue 0: dev lo root refcnt 2 
qdisc tbf 1: dev enp0s25 root refcnt 2 rate 1Gbit burst 500000b lat 36.0ms 
qdisc netem 10: dev enp0s25 parent 1: limit 1000 delay 50.0ms
qdisc fq_codel 0: dev enp2s0 root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 32Mb ecn 
qdisc fq_codel 0: dev enp3s0 root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 32Mb ecn 
root@sv1:~# ping sv2 -c 1 > /dev/null && ping sv2 -c 5 | tail -3
--- sv2 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 100.212/100.237/100.252/0.400 ms
root@sv1:~# iperf3 -c sv2 -t 30 -P 4
Connecting to host sv2, port 5201
[  4] local 192.168.0.250 port 49190 connected to 192.168.0.251 port 5201
[  6] local 192.168.0.250 port 49192 connected to 192.168.0.251 port 5201
[  8] local 192.168.0.250 port 49194 connected to 192.168.0.251 port 5201
[ 10] local 192.168.0.250 port 49196 connected to 192.168.0.251 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec   291 KBytes  2.39 Mbits/sec    0   21.2 KBytes       
[  6]   0.00-1.00   sec   267 KBytes  2.19 Mbits/sec    0   19.8 KBytes       
[  8]   0.00-1.00   sec   284 KBytes  2.33 Mbits/sec    0   21.2 KBytes       
[ 10]   0.00-1.00   sec   257 KBytes  2.11 Mbits/sec    0   19.8 KBytes       
[SUM]   0.00-1.00   sec  1.07 MBytes  9.01 Mbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]   1.00-2.00   sec   321 KBytes  2.63 Mbits/sec    0   35.4 KBytes       
[  6]   1.00-2.00   sec   325 KBytes  2.66 Mbits/sec    0   32.5 KBytes       
[  8]   1.00-2.00   sec   320 KBytes  2.62 Mbits/sec    0   35.4 KBytes       
[ 10]   1.00-2.00   sec   321 KBytes  2.63 Mbits/sec    0   32.5 KBytes       
[SUM]   1.00-2.00   sec  1.26 MBytes  10.5 Mbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]   2.00-3.00   sec   573 KBytes  4.69 Mbits/sec    0   58.0 KBytes       
[  6]   2.00-3.00   sec   509 KBytes  4.17 Mbits/sec    0   53.7 KBytes       
[  8]   2.00-3.00   sec   573 KBytes  4.69 Mbits/sec    0   58.0 KBytes       
[ 10]   2.00-3.00   sec   509 KBytes  4.17 Mbits/sec    0   52.3 KBytes       
[SUM]   2.00-3.00   sec  2.11 MBytes  17.7 Mbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]   3.00-4.00   sec   954 KBytes  7.82 Mbits/sec    0   93.3 KBytes       
[  6]   3.00-4.00   sec   827 KBytes  6.78 Mbits/sec    0   86.3 KBytes       
[  8]   3.00-4.00   sec   954 KBytes  7.82 Mbits/sec    0   93.3 KBytes       
[ 10]   3.00-4.00   sec   827 KBytes  6.78 Mbits/sec    0   86.3 KBytes       
[SUM]   3.00-4.00   sec  3.48 MBytes  29.2 Mbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]   4.00-5.00   sec  1.43 MBytes  12.0 Mbits/sec    0    153 KBytes       
[  6]   4.00-5.00   sec  1.37 MBytes  11.5 Mbits/sec    0    139 KBytes       
[  8]   4.00-5.00   sec  1.49 MBytes  12.5 Mbits/sec    0    153 KBytes       
[ 10]   4.00-5.00   sec  1.37 MBytes  11.5 Mbits/sec    0    140 KBytes       
[SUM]   4.00-5.00   sec  5.65 MBytes  47.4 Mbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]   5.00-6.00   sec  2.36 MBytes  19.8 Mbits/sec    0    249 KBytes       
[  6]   5.00-6.00   sec  2.11 MBytes  17.7 Mbits/sec    0    226 KBytes       
[  8]   5.00-6.00   sec  2.36 MBytes  19.8 Mbits/sec    0    249 KBytes       
[ 10]   5.00-6.00   sec  2.17 MBytes  18.2 Mbits/sec    0    228 KBytes       
[SUM]   5.00-6.00   sec  9.01 MBytes  75.6 Mbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]   6.00-7.00   sec  3.98 MBytes  33.4 Mbits/sec    0    404 KBytes       
[  6]   6.00-7.00   sec  3.54 MBytes  29.7 Mbits/sec    0    368 KBytes       
[  8]   6.00-7.00   sec  3.98 MBytes  33.4 Mbits/sec    0    406 KBytes       
[ 10]   6.00-7.00   sec  3.60 MBytes  30.2 Mbits/sec    0    372 KBytes       
[SUM]   6.00-7.00   sec  15.1 MBytes   127 Mbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]   7.00-8.00   sec  6.46 MBytes  54.2 Mbits/sec    0    659 KBytes       
[  6]   7.00-8.00   sec  5.84 MBytes  49.0 Mbits/sec    0    597 KBytes       
[  8]   7.00-8.00   sec  6.40 MBytes  53.7 Mbits/sec    0    659 KBytes       
[ 10]   7.00-8.00   sec  5.90 MBytes  49.5 Mbits/sec    0    604 KBytes       
[SUM]   7.00-8.00   sec  24.6 MBytes   206 Mbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]   8.00-9.00   sec  8.20 MBytes  68.8 Mbits/sec    0   1.05 MBytes       
[  6]   8.00-9.00   sec  7.77 MBytes  65.2 Mbits/sec    0    970 KBytes       
[  8]   8.00-9.00   sec  8.20 MBytes  68.8 Mbits/sec    0   1.05 MBytes       
[ 10]   8.00-9.00   sec  7.83 MBytes  65.7 Mbits/sec    0    981 KBytes       
[SUM]   8.00-9.00   sec  32.0 MBytes   268 Mbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]   9.00-10.00  sec  13.0 MBytes   110 Mbits/sec    0   1.70 MBytes       
[  6]   9.00-10.00  sec  11.5 MBytes  96.5 Mbits/sec    0   1.52 MBytes       
[  8]   9.00-10.00  sec  13.0 MBytes   109 Mbits/sec    0   1.70 MBytes       
[ 10]   9.00-10.00  sec  11.7 MBytes  98.0 Mbits/sec    0   1.54 MBytes       
[SUM]   9.00-10.00  sec  49.2 MBytes   413 Mbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]  10.00-11.00  sec  21.0 MBytes   177 Mbits/sec    0   2.74 MBytes       
[  6]  10.00-11.00  sec  18.4 MBytes   154 Mbits/sec    0   2.44 MBytes       
[  8]  10.00-11.00  sec  20.4 MBytes   171 Mbits/sec    0   2.71 MBytes       
[ 10]  10.00-11.00  sec  17.6 MBytes   148 Mbits/sec    0   2.42 MBytes       
[SUM]  10.00-11.00  sec  77.4 MBytes   650 Mbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]  11.00-12.00  sec  27.1 MBytes   227 Mbits/sec    0   3.15 MBytes       
[  6]  11.00-12.00  sec  26.4 MBytes   221 Mbits/sec    0   3.15 MBytes       
[  8]  11.00-12.00  sec  27.5 MBytes   230 Mbits/sec    0   3.15 MBytes       
[ 10]  11.00-12.00  sec  27.3 MBytes   229 Mbits/sec    0   3.01 MBytes       
[SUM]  11.00-12.00  sec   108 MBytes   908 Mbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]  12.00-13.00  sec  27.7 MBytes   233 Mbits/sec    0   3.15 MBytes       
[  6]  12.00-13.00  sec  27.8 MBytes   233 Mbits/sec    0   3.15 MBytes       
[  8]  12.00-13.00  sec  27.1 MBytes   227 Mbits/sec    0   3.15 MBytes       
[ 10]  12.00-13.00  sec  27.7 MBytes   232 Mbits/sec    0   3.01 MBytes       
[SUM]  12.00-13.00  sec   110 MBytes   925 Mbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]  13.00-14.00  sec  27.8 MBytes   233 Mbits/sec    0   3.15 MBytes       
[  6]  13.00-14.00  sec  27.8 MBytes   233 Mbits/sec    0   3.15 MBytes       
[  8]  13.00-14.00  sec  27.7 MBytes   233 Mbits/sec    0   3.15 MBytes       
[ 10]  13.00-14.00  sec  27.2 MBytes   228 Mbits/sec    0   3.01 MBytes       
[SUM]  13.00-14.00  sec   111 MBytes   927 Mbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]  14.00-15.00  sec  27.8 MBytes   233 Mbits/sec    0   3.15 MBytes       
[  6]  14.00-15.00  sec  27.5 MBytes   230 Mbits/sec    0   3.15 MBytes       
[  8]  14.00-15.00  sec  27.8 MBytes   233 Mbits/sec    0   3.15 MBytes       
[ 10]  14.00-15.00  sec  27.7 MBytes   232 Mbits/sec    0   3.01 MBytes       
[SUM]  14.00-15.00  sec   111 MBytes   929 Mbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]  15.00-16.00  sec  27.4 MBytes   230 Mbits/sec    0   3.15 MBytes       
[  6]  15.00-16.00  sec  27.8 MBytes   233 Mbits/sec    0   3.15 MBytes       
[  8]  15.00-16.00  sec  28.1 MBytes   235 Mbits/sec    0   3.15 MBytes       
[ 10]  15.00-16.00  sec  27.7 MBytes   232 Mbits/sec    0   3.01 MBytes       
[SUM]  15.00-16.00  sec   111 MBytes   931 Mbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]  16.00-17.00  sec  27.8 MBytes   233 Mbits/sec    0   3.15 MBytes       
[  6]  16.00-17.00  sec  27.7 MBytes   233 Mbits/sec    0   3.15 MBytes       
[  8]  16.00-17.00  sec  27.3 MBytes   230 Mbits/sec    0   3.15 MBytes       
[ 10]  16.00-17.00  sec  27.8 MBytes   233 Mbits/sec    0   3.01 MBytes       
[SUM]  16.00-17.00  sec   111 MBytes   928 Mbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]  17.00-18.00  sec  27.2 MBytes   228 Mbits/sec    0   3.15 MBytes       
[  6]  17.00-18.00  sec  27.0 MBytes   227 Mbits/sec    0   3.15 MBytes       
[  8]  17.00-18.00  sec  27.2 MBytes   228 Mbits/sec    0   3.15 MBytes       
[ 10]  17.00-18.00  sec  27.0 MBytes   227 Mbits/sec    0   3.01 MBytes       
[SUM]  17.00-18.00  sec   108 MBytes   910 Mbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]  18.00-19.00  sec  26.6 MBytes   223 Mbits/sec    0   3.15 MBytes       
[  6]  18.00-19.00  sec  26.6 MBytes   223 Mbits/sec    0   3.15 MBytes       
[  8]  18.00-19.00  sec  26.5 MBytes   222 Mbits/sec    0   3.15 MBytes       
[ 10]  18.00-19.00  sec  26.5 MBytes   222 Mbits/sec    0   3.01 MBytes       
[SUM]  18.00-19.00  sec   106 MBytes   891 Mbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]  19.00-20.00  sec  26.6 MBytes   223 Mbits/sec    0   3.15 MBytes       
[  6]  19.00-20.00  sec  26.6 MBytes   223 Mbits/sec    0   3.15 MBytes       
[  8]  19.00-20.00  sec  26.5 MBytes   222 Mbits/sec    0   3.15 MBytes       
[ 10]  19.00-20.00  sec  26.5 MBytes   222 Mbits/sec    0   3.01 MBytes       
[SUM]  19.00-20.00  sec   106 MBytes   891 Mbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]  20.00-21.00  sec  26.4 MBytes   221 Mbits/sec    0   3.15 MBytes       
[  6]  20.00-21.00  sec  26.4 MBytes   221 Mbits/sec    0   3.15 MBytes       
[  8]  20.00-21.00  sec  26.4 MBytes   221 Mbits/sec    0   3.15 MBytes       
[ 10]  20.00-21.00  sec  26.3 MBytes   220 Mbits/sec    0   3.01 MBytes       
[SUM]  20.00-21.00  sec   105 MBytes   885 Mbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]  21.00-22.00  sec  26.7 MBytes   224 Mbits/sec    0   3.15 MBytes       
[  6]  21.00-22.00  sec  26.7 MBytes   224 Mbits/sec    0   3.15 MBytes       
[  8]  21.00-22.00  sec  26.5 MBytes   222 Mbits/sec    0   3.15 MBytes       
[ 10]  21.00-22.00  sec  26.4 MBytes   221 Mbits/sec    0   3.01 MBytes       
[SUM]  21.00-22.00  sec   106 MBytes   892 Mbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]  22.00-23.00  sec  26.5 MBytes   223 Mbits/sec    0   3.15 MBytes       
[  6]  22.00-23.00  sec  26.4 MBytes   221 Mbits/sec    0   3.15 MBytes       
[  8]  22.00-23.00  sec  26.5 MBytes   222 Mbits/sec    0   3.15 MBytes       
[ 10]  22.00-23.00  sec  26.1 MBytes   219 Mbits/sec    0   3.01 MBytes       
[SUM]  22.00-23.00  sec   106 MBytes   885 Mbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]  23.00-24.00  sec  26.6 MBytes   223 Mbits/sec    0   3.15 MBytes       
[  6]  23.00-24.00  sec  26.5 MBytes   223 Mbits/sec    0   3.15 MBytes       
[  8]  23.00-24.00  sec  26.5 MBytes   222 Mbits/sec    0   3.15 MBytes       
[ 10]  23.00-24.00  sec  26.3 MBytes   221 Mbits/sec    0   3.01 MBytes       
[SUM]  23.00-24.00  sec   106 MBytes   888 Mbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]  24.00-25.00  sec  26.6 MBytes   223 Mbits/sec    0   3.15 MBytes       
[  6]  24.00-25.00  sec  26.5 MBytes   222 Mbits/sec    0   3.15 MBytes       
[  8]  24.00-25.00  sec  26.4 MBytes   222 Mbits/sec    0   3.15 MBytes       
[ 10]  24.00-25.00  sec  26.3 MBytes   220 Mbits/sec    0   3.01 MBytes       
[SUM]  24.00-25.00  sec   106 MBytes   888 Mbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]  25.00-26.00  sec  26.6 MBytes   223 Mbits/sec    0   3.15 MBytes       
[  6]  25.00-26.00  sec  26.5 MBytes   223 Mbits/sec    0   3.15 MBytes       
[  8]  25.00-26.00  sec  26.5 MBytes   222 Mbits/sec    0   3.15 MBytes       
[ 10]  25.00-26.00  sec  26.3 MBytes   220 Mbits/sec    0   3.01 MBytes       
[SUM]  25.00-26.00  sec   106 MBytes   888 Mbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]  26.00-27.00  sec  26.7 MBytes   224 Mbits/sec    0   3.15 MBytes       
[  6]  26.00-27.00  sec  26.6 MBytes   223 Mbits/sec    0   3.15 MBytes       
[  8]  26.00-27.00  sec  26.5 MBytes   222 Mbits/sec    0   3.15 MBytes       
[ 10]  26.00-27.00  sec  26.3 MBytes   221 Mbits/sec    0   3.01 MBytes       
[SUM]  26.00-27.00  sec   106 MBytes   890 Mbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]  27.00-28.00  sec  26.6 MBytes   223 Mbits/sec    0   3.15 MBytes       
[  6]  27.00-28.00  sec  26.5 MBytes   222 Mbits/sec    0   3.15 MBytes       
[  8]  27.00-28.00  sec  26.4 MBytes   222 Mbits/sec    0   3.15 MBytes       
[ 10]  27.00-28.00  sec  26.4 MBytes   222 Mbits/sec    0   3.01 MBytes       
[SUM]  27.00-28.00  sec   106 MBytes   889 Mbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]  28.00-29.00  sec  26.6 MBytes   223 Mbits/sec    0   3.15 MBytes       
[  6]  28.00-29.00  sec  26.6 MBytes   223 Mbits/sec    0   3.15 MBytes       
[  8]  28.00-29.00  sec  26.5 MBytes   222 Mbits/sec    0   3.15 MBytes       
[ 10]  28.00-29.00  sec  26.4 MBytes   222 Mbits/sec    0   3.01 MBytes       
[SUM]  28.00-29.00  sec   106 MBytes   890 Mbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]  29.00-30.00  sec  26.6 MBytes   223 Mbits/sec    0   3.15 MBytes       
[  6]  29.00-30.00  sec  26.5 MBytes   222 Mbits/sec    0   3.15 MBytes       
[  8]  29.00-30.00  sec  26.5 MBytes   222 Mbits/sec    0   3.15 MBytes       
[ 10]  29.00-30.00  sec  26.3 MBytes   221 Mbits/sec    0   3.01 MBytes       
[SUM]  29.00-30.00  sec   106 MBytes   888 Mbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-30.00  sec   571 MBytes   160 Mbits/sec    0             sender
[  4]   0.00-30.00  sec   570 MBytes   159 Mbits/sec                  receiver
[  6]   0.00-30.00  sec   563 MBytes   157 Mbits/sec    0             sender
[  6]   0.00-30.00  sec   562 MBytes   157 Mbits/sec                  receiver
[  8]   0.00-30.00  sec   568 MBytes   159 Mbits/sec    0             sender
[  8]   0.00-30.00  sec   567 MBytes   159 Mbits/sec                  receiver
[ 10]   0.00-30.00  sec   561 MBytes   157 Mbits/sec    0             sender
[ 10]   0.00-30.00  sec   560 MBytes   156 Mbits/sec                  receiver
[SUM]   0.00-30.00  sec  2.21 GBytes   633 Mbits/sec    0             sender
[SUM]   0.00-30.00  sec  2.21 GBytes   632 Mbits/sec                  receiver

iperf Done.
root@sv1:~# 

おまけ。設定ツール

使い方

root@sv1:~# python2 ./set.py -h
usage: set.py [-h] [--rtt RTT] [--loss LOSS] --tp TP

nw analyzer

optional arguments:
  -h, --help   show this help message and exit
  --rtt RTT    rtt(ms)
  --loss LOSS  packet loss(percent)
  --tp TP      through put(Mb/s)
root@sv1:~# 

コード

# -*- coding: utf-8 -*-

import argparse
import sys
from datetime import datetime as dt
import subprocess
import time
import json
import syslog
import copy
import os


#os.environ['LANG'] = 'C'


DST_HOST_CNT = "sv2-r"
DST_HOST = "sv2"
DST_NIC = "enp0s25"
SRC_NIC = "enp0s25"
TMP_LOG1 = "/tmp/ana_http_tmp_iperf.log"
TMP_LOG2 = "/tmp/ana_http_tmp_wget.log"
#L_ENV = { 'LANG':'C' }
PATH="/test/"


parser = argparse.ArgumentParser(description='nw analyzer')
parser.add_argument('--rtt', help='rtt(ms)', type=float)
parser.add_argument('--loss', help='packet loss(percent)', type=float)
parser.add_argument('--tp', help='through put(Mb/s)', type=float, required=True)
args = parser.parse_args()


ARG = copy.deepcopy(sys.argv)
LOG_LABEL = dt.now().strftime('%H:%M:%S') + " " + " ".join(ARG[1:])


def get_hz():
  src_kv, dst_kv = exec_cmd_both("uname -r", True)

  src_hz = exec_cmd('grep CONFIG_HZ= /boot/config-' + src_kv, True)
  src_hz = src_hz.split("=")[1]
  if not src_hz.isdigit():
    sub_error("src_hz invalid data : " + src_hz)

  dst_hz = exec_cmd('ssh ' + DST_HOST_CNT + ' grep CONFIG_HZ= /boot/config-' + dst_kv, True)
  dst_hz = dst_hz.split("=")[1]
  if not dst_hz.isdigit():
    sub_error("dst_hz invalid data : " + dst_hz)

  return src_hz, dst_hz


def chk_env():
  # NIC確認
  exec_cmd("ip link show " + SRC_NIC, True)
  exec_cmd("ssh " + DST_HOST_CNT + " ip link show " + DST_NIC, True)


def setup_tp(src_hz, dst_hz):
  def set_param(hz):
    rate = args.tp
    burst = rate * 1000 * 1000 / 8 / int(hz)
    limit = burst * 10
    return [ rate, burst, limit ]

  src_rate, src_burst, src_limit = set_param(src_hz)
  dst_rate, dst_burst, dst_limit = set_param(dst_hz)

  cmd = "tc qdisc delete dev " + SRC_NIC + " root"
  exec_cmd(cmd, False)
  cmd = "tc qdisc delete dev " + DST_NIC + " root"
  exec_rmt_cmd(cmd, False)

  cmd = "tc qdisc add dev " + SRC_NIC + " root handle 1:0 tbf limit " + str(src_limit)  + " burst " + str(src_burst) + " rate " +  str(src_rate) + "mbit"
  exec_cmd(cmd, True)
  cmd = "tc qdisc add dev " + DST_NIC + " root handle 1:0 tbf limit " + str(dst_limit)  + " burst " + str(dst_burst) + " rate " +  str(dst_rate) + "mbit"
  exec_rmt_cmd(cmd, True)


def test_tp():
  exec_rmt_cmd("pkill -x iperf3", False)

#  exec_rmt_cmd("iperf3 -d -D -s", True)
  exec_rmt_cmd("iperf3 -J -D -s", True)

  time.sleep(1)

  exec_cmd("rm -f " + TMP_LOG1, True)
#  o = exec_cmd("iperf3 -d --get-server-output -c " + DST_HOST, True)
  exec_cmd("iperf3 -J --get-server-output -c " + DST_HOST + " --logfile " + TMP_LOG1, True)
  with open(TMP_LOG1) as f:
    j = json.load(f)

  exec_rmt_cmd("pkill -x iperf3", False)
  l = str()
  s =  j['end']['streams'][0]['sender']
  for k,v in s.items():
    l = l + " s_" + str(k) + "=" + str(v)
  r =  j['server_output_json']['end']['streams'][0]['receiver']
  for k,v in r.items():
    l = l + " r_" + str(k) + "=" + str(v)
  op_log("Test: " + l[1:]) 


def setup_delay_and_loss():
  def exec_tc_cmd(p):
    opt = list()
    if "rtt" in p:
      opt.append("delay")
      opt.append(str(p["rtt"] / 2) + "ms")
    if "loss" in p:
      opt.append("loss")
      opt.append(str(p["loss"] / 2) + "%")
    opt = " ".join(opt)

    if opt:
      cmd = "tc qdisc add dev " + SRC_NIC + " parent 1:0 handle 10: netem " + opt
      exec_cmd(cmd, True)
      cmd = "tc qdisc add dev " + DST_NIC + " parent 1:0 handle 10: netem " + opt
      exec_rmt_cmd(cmd, True)

  if args.rtt:
    if args.loss:
      exec_tc_cmd({"rtt":args.rtt, "loss":args.loss})
    else:
      exec_tc_cmd({"rtt":args.rtt})
  else:
    if args.loss:
      exec_tc_cmd({"loss":args.loss})


def get_setting():
  src_res, dst_res = exec_cmd_both("tc qdisc show", True)
  for i in [src_res, dst_res]:
    for l in i.split("\n"):
      op_log("Setting: " + l.strip()) 


def setup_ol():
  cmd = "ethtool -K " + SRC_NIC + " tso off gso off gro off rx off tx off"
  exec_cmd(cmd, True)
  cmd = "ethtool -K " + DST_NIC + " tso off gso off gro off rx off tx off"
  exec_rmt_cmd(cmd, True)


def setup_env():
  # 各種NICオフロード機能無効化
  setup_ol()

  # CONFIG_HZ取得
  src_hz, dst_hz = get_hz()

  # 帯域設定
  setup_tp(src_hz, dst_hz)

  # 遅延 パケロス設定
  setup_delay_and_loss()

  # 設定確認
  get_setting()


def sub_error(m):
  m = "Error: " + m
  print(m)
  op_log(m)
  exit()


def exec_cmd_both(cmd, cmd_err):
  src_out = exec_cmd(cmd, cmd_err)
  dst_out = exec_cmd("ssh " + DST_HOST_CNT + " " + cmd, cmd_err)
  return src_out, dst_out


def exec_rmt_cmd(cmd, cmd_err):
  cmd = "ssh " + DST_HOST_CNT + " " + cmd
  d = exec_cmd(cmd, cmd_err)
  return d


def exec_cmd(cmd, cmd_err):
  op_log("Exec_cmd: " + cmd)
  try:
    d = subprocess.check_output(cmd.split(), stderr=subprocess.STDOUT)
    d = d.strip()
    return d
  except subprocess.CalledProcessError as e:
    rc = str(e.returncode).strip()
    op = e.output.strip()
    if cmd_err:
      sub_error("RC: " + rc + " CMD: " + cmd + " OUTPUT: " + op)
      exit()
  except OSError as e:
    sub_error(cmd + ": " + e.strerror)
    exit()


def op_log(mes):
  syslog.syslog(LOG_LABEL + " " + mes) 


def main():
  chk_env()
  setup_env()


if __name__ == '__main__':
  main()

IOについて

この人の本はおすすめです!

https://www.shoeisha.co.jp/book/detail/9784798117034

これ家にある。

https://www.shoeisha.co.jp/book/article/detail/228

これ見て、軽くおさらい。

ディスクが遅い理由
・頭出し(シーク)
・回転待ち時間
 →シーク完了後、目的のデータが回ってくるのを待つ時間。HDD回転速度に依存
・データ転送速度
 →HDDの回転速度に依存


メモリとの性能の違い
・メモリは電気信号で処理。HDDは機械動作が入るので遅い
・メモリに対するアクセスはnsec(ナノ秒)の単位
・ディスクに対するアクセスはmsec(ミリ秒)の単位

DB待ち時間を減らす為に大事なこと!
①シーケンシャルとフルスキャンの理解が大事
シーケンシャルは「逐次(順を追って)」のことで、先頭から間を抜かさずにアクセス(読み/書き)すること
フルスキャンはテーブルの全レコードを読み込むこと

フルスキャンの際に、メモリにデータがないとシーケンシャルアクセスが発生

②インデックスの考え方
インデックス使わないと待ち時間が大きくなるケースある。
例)転送速度が20MB/sの環境で、1GBの表テーブルをフルスキャする場合、シーケンシャルアクセスとなり、50秒かかる。

インデックス自体のサイズが大きくなっても問題なし。内部的に「インデックスのインデックス」のように、自動的に多段の構成になっているため。

➂IOPS
インデックスでアクセスしても、ランダムアクセスになると時間がかかる。

※ランダムアクセスは、シーケンシャルの反対語。頭出し&回転待ちを繰り返しアクセスする

例)1秒間でシークを100回できるディスクで、一回のIOのサイズが8KBの場合、スループットは800KB/sになる。
→非常に遅い。
※一般的なHDDのシーク速度は100から200

データベースのIOはランダムアクセス多い。なのでIOPSが大事。
一つのディスクだけでデータベースを構築すると遅いのは必至。RAIDで複数ディスク構成にして、
IOPSを上げる=ランダムアクセスが速くなる

OLTP (OnLine Transaction Processing)
たとえば、鉄道の座席予約システムや銀行の入出金処理など。多くの端末からオンラインで大きくないデータを読み書きし、すぐに結果を求めるシステム形態のこと
大きくないデータ すぐに →DBインデックス必要

「インデックスアクセスが有利なのはデータの15%未満」と一般的に言われる。理由は、
ランダムはシーケンシャルよりデータの読み込み効率が悪い
の考えより。

例)二万行がテーブルから一万行とりだす場合
ランダムで取り出すより、フルスキャンでシーケンシャルで全部取り出す方が早い。

1行は8KBとします。今まで使ってきたディスクの性能値を使った計算だと、ランダムアクセスでは約100秒かかります(インデックスは頻繁に使われるので、キャッシュに載っていると想定します)。それに対して2万行全部を読み込むシーケンシャルアクセスでは、すべての行(2万行)をディスクから読み込んでも約8秒で終了します。つまりディスクの特性から、全




ランダムの場合、以下の処理で時間がかかる。各一万回行われる
・インデックス読み込み
 2回目以降はキャッシュ活用。
・頭出し
・データ読み込み(一行)

シーケンシャルの場合、以下の処理で時間がかかる。各一回だけ行われる。
・頭出し
・データ読み込み(フルスキャン)

TLSで暗号化について

あたりまえの話だけど

TLSで暗号化された通信を、最初から最後までキャプチャしたら、中身を解読できる?

できない。
理由は、サーバー証明書に含まれる公開鍵を使って共有鍵を交換してるから。
※クライアントは公開鍵で暗号化してデータ送信。このデータは、秘密鍵持ってる人しか復号てまきない。




デジタル署名の検証せずに暗号化目的でTLSはできる。ただ、暗号化通信先が、誰か保証できない。

中央値と四分位数

https://mathlandscape.com/quartile/

中央値(Median、 メジアン、メディアン)
→データを昇順または降順並べたときに、ちょうど真ん中にあたる値

例)
7,5,6の場合は6
7,5,6,4の場合は5.5 ※偶数の場合、中央の2値の平均値
7,5,5,6,4の場合は5

https://bellcurve.jp/statistics/course/19277.html
https://mathlandscape.com/quartile/


四分位数

「四分位数(しぶんいすう)」とはデータを小さい順に並び替えたときに、データの数で4等分した時の区切り値のこと
4等分すると3つの区切りの値が得られ、小さいほうから
「25パーセンタイル(第一四分位数)」
「50パーセンタイル(中央値)」★
「75パーセンタイル(第三四分位数)」

75パーセンタイル(第三四分位数)から25パーセンタイル(第一四分位数)を引いた値を「四分位範囲」

四分位範囲を2で割ったものを「四分位偏差」

第一四分位数と第三四分位数の求め方

中央値で区切った左右のそれそれのデータの中央値
※元のデータ数が偶数か偶数かで少し計算が違う

NVMeとは?とディスク性能

https://www.pro.logitec.co.jp/about_hdd/hddssd/20191129/#:~:text=NVMe%EF%BC%88%E3%82%A8%E3%83%8C%E3%83%96%E3%82%A4%E3%82%A8%E3%83%A0%E3%82%A4%E3%83%BC%EF%BC%89%E3%81%A8,%E3%81%AE%E3%81%93%E3%81%A8%EF%BC%89%E3%82%92%E6%8C%87%E3%81%97%E3%81%BE%E3%81%99%E3%80%82

「Non-Volatile Memory Express」の略名
SSDをはじめ、不揮発性メモリを使用したフラッシュストレージのために最適化された通信プロトコル
従来使われていたSATAAHCI)規格では転送速度の限界であった為、フラッシュストレージによる通信に最適化することを目的に作られた。

SATAと比較し、
「4KBのデータを転送する際、従来は2つ必要であったメッセージが1つだけで済む。」
「コマンド処理のためのキューが従来の1個から65,536個へ大幅に増えている。」
のような改良が行われているのが特長

コマンド処理のキューが増えているため、ディスクI/Oを一挙に多数同時処理するようなサーバーで、大幅な処理の高速化が見込める。
より簡潔にいうと、データの読み書き速度が従来のAHCIよりも非常に速いのがNVMe


https://itskillmap.com/menu2_07/
概ね実体は以下
SATASASのアクセス速度~ 
SATA SAS
アクセス速度 100MB/s 150~250MB/s

SATASASの仕様・インターフェース規格~ 
SATA SAS
最大データ転送速度 SATA-3:600MB/s SAS-2:600MB/s
SAS-3:1,200MB/s
回転数 5,400rpm、7,200rpm 10,000rpm、15,000rpm
通信形式 半二重 全二重
転送仕様 ATA(一方的に転送) SCSI(状態を確認しながら正確に転送)
ネクター シングルポート デュアルポート(冗長化可)
最大ケーブル長 1m 10m


 ~SSDのアクセス速度~ 
SSD
アクセス速度 4000MB/s
 概ねアクセス速度は4000MB/sと圧倒的

SSD通信プロトコルとして、以下二種類あり。
NVMe
SATA 規格で600MB
どちらを使うか?がポイント

SSDはハードウェアタイプは二種類あり。
メモリモジュールの形式(M.2)※PCIe接続
2.5インチ(U.2)※NVMe未対応。SASSATA対応

M.2のSSD=高速ではない。プロトコルSATAだと遅い。


SSDのメリット】
・構造上HDDのようにシークタイムがなく、読み込み速度が非常に高速。
・物理的な稼動箇所がないため省電力、静か、振動・衝撃に強い。
・小型。

SSDのデメリット】
・容量単価がHDDより高い。
・大容量SSDが販売されていない。
・書き込み・消去(内部動作)のたびに素子が劣化するため、寿命が短い。
・故障時のデータ復旧の技術は現時点で確立されておらず、サルベージが極めて難しい。
・周辺機器のインターフェースがSSDに追いついておらず、その能力を生かし切れない。

Nutanixバイブルのメモ

https://www.nutanixbible.jp/


Webスケールなインフラストラクチャーの重要な要素

ハイパーコンバージェンス
ソフトウェア デファインド インテリジェンス
自律分散システム
インクリメンタルかつリニアな拡張性
その他の要素:

APIベースの自動化と豊富な分析機能
セキュリティをコアに据えている
自己修復機能


戦略とビジョン

あらゆる場所のインフラストラクチャーコンピューティングを、存在を意識しなくていいくらい簡単(インビジブル)にする。

このシンプルさは、次の3つのコア領域に焦点を当てることで達成されました。

選択とポータビリティを可能にする。 (HCI/Cloud/Hypervisor)

コンバージェンス、抽象化、インテリジェント ソフトウェア(AOS)による「スタック」のシンプル化。

ユーザーエクスペリエンス(UX)とデザイン(Prism)を重視した、直感的なユーザーインターフェイス(UI)の提供。


コア サービス
基礎的なサービス群
プラットフォーム サービス
コア サービスをもとにしたサービス群であり、付加的な機能およびサービスを提供する


Nutanix Cloud Platform

 AOSスケールアウトストレージ
 AHVハイパーバイザ―
 仮想ネットワーキング
 ディザスタリカバリ
 コンテナサービス
 データとネットワークのセキュリティ
  内蔵のローカルキーマネージャーでの暗号化を使用したデータの包括的なセキュリティと、Flow Network Securityでのネットワークとアプリケーションのためのソフトウェアベースのファイアウォールがあります。


Nutanixクラウドマネージャー(NCM)

AI Operations(NCM インテリジェントオペレーション)
 キャパシティの最適化、プロアクティブなパフォーマンス異常検出、そしてインフラストラクチャー管理を合理化できる運用タスク自動化機能を提供
セルフサービスによるインフラストラクチャ―とアプリのライフサイクル管理(NCMセルフサービス)
 セルフサービス、自動化、そして集中化されたロールベースのガバナンス
コストガバナンス
Security Central
 クラウドセキュリティオペレーションの統合、ワークロード脆弱性の特定、マイクロセグメンテーション管理、ゼロトラストなどの戦略的イニシアチブにおける規制コンプライアンス要件順守のためのセキュリティダッシュボードです。

Nutanix ユニファイドストレージサービス
 Filesストレージ
 Objectsストレージ
 Volumesブロックストレージ
 Mine統合型バックアップ

Nutanixデータベースサービス

デスクトップサービス




ハイパーコンバージドシステムの核となる構造

コンピューティングスタックの収束と崩壊が必要(例:コンピュート+ストレージ)
システム内のノード間でデータとサービスのシャード(分散)が必要
集中型ストレージと同等の機能を備えていることが必要(例:HA、ライブマイグレーションなど)
データを可能な限り実行処理(コンピュート)に近づける必要 (Importance of Latency)
ハイパーバイザーに依存しない
ハードウェアに依存しない


コントローラーを仮想化してホストに移動する
コアサービスとロジックをソフトウェアによって提供する
システム内のすべてのノードにデータを分散(シャード)する
ストレージをコンピュートのローカルに移動する



それぞれのノードで、業界の標準的なハイパーバイザー(現在はESXi、AHV、Hyper-V)およびNutanixコントローラーVM(CVM)を稼動させることができます。 Nutanix CVMは、Nutanixソフトウェアを稼動させ、ハイパーバイザーおよびその上で稼動する全てのVMに対するI/O処理の全てを受け持ちます。



Nutanix CVMは以下のようなサービスを処理

ストレージI/Oと変換(重複排除、圧縮、EC)
UI / API
アップグレード
DR / レプリケーション
その他





一部のサービスや機能は、
追加のヘルパーVMを利用
マイクロサービスプラットフォーム(MSP)を使用

例、Nutanix Filesは追加のVMをデプロイしますが、Nutanix ObjectsはMSPのためのVMをデプロイし、それらを活用します。

VMware vSphereが動作するNutanixユニットの場合、SSDやHDDデバイスを管理するSCSIコントローラーが、VM-Direct Path(Intel VT-d)を利用して直接CVMに接続されます。 Hyper-Vの場合は、ストレージデバイスがCVMにパススルー接続されます。



VMware vSphereの場合、SSDやHDDデバイスを管理するSCSIコントローラーが、VM-Direct Path(Intel VT-d)を利用して直接CVMに接続
Hyper-Vの場合は、ストレージデバイスがCVMにパススルー接続



コントローラーの仮想化
Nutanixコントローラーをユーザー空間でのVMとして実行する主な理由は以下

移動性
回復性
保守とアップグレード
パフォーマンス(はい、本当ですよ)


ユーザー空間のVMとして実行することで、実行環境に依存せず同じソースコードで異なる環境に対応できた


アップグレードやCVMの「障害」といったものをエレガントに処理できる。
CVMダウン時もノード全体が、クラスタ内の他のCVMからのストレージI/Oとサービスで引き続き稼働

AOSアップグレード中でも、そのホストで実行されているワークロードに影響を与えずCVMを再起動できる

しかし、カーネル内にあるほうがより高速ではないでしょうか? 簡潔に答えると、NOです。

理由は「ユーザー空間とカーネル空間」のセクションを参照





分散システム
分散システムとして不可欠な要素は以下

単一障害点 (SPOF) を持たないこと
規模に関わりなくボトルネックが発生しないこと(リニアな拡張が可能であること)
並列処理を利用していること (MapReduce)


全てのノードやディスクデバイスメタデータやデータを分散することで、通常のデータ投入や再保護を行う際、最大のパフォーマンスが発揮される

これにより、クラスタの能力を最大限に引き出しながら、Nutanixが使用するMapReduceフレームワーク(Curator)が並列処理を行える。
例)データの再保護、圧縮、消失訂正号、重複排除

重要な点: クラスタのノード数が増加(クラスタが拡大)すると、各ノードが負担すべき処理の割合が低下し、処理全体としての効率も向上する


ソフトウェア デファインド
ソフトウェア デファインド システムには、4つの不可欠な要素があります:

プラットフォーム(ハードウェア、ハードウェア)間のモビリティ(可搬性)を提供できること
カスタムなハードウェアに依存しないこと
迅速な開発(機能開発、バグ修正、セキュリティパッチ)を可能にすること
ムーアの法則の恩恵を活かせること

コントローラーVMには、Nutanixソフトウェアとロジックの大半が組み込まれており、当初から拡張性を持つプラガブルなアーキテクチャーとして設計されたものです。ソフトウェア デファインドとしてハードウェアの構成に依存しないメリットは、その拡張性にあります。製品を既に使用中の場合でも、拡張機能や新機能をいつでも取り入れることができる

製品が出荷された当初、サポートはハイパーバイザーからのI/Oに対するiSCSIに限定されていましたが、現在では、NFSとSMBもその対象になっています。 将来的には、新しいアダプターを様々なワークロードやハイパーバイザー(HDFSなど)に向けて作成できるようになるでしょう。 繰り返しますが、これらの対応は全てソフトウェアのアップデートで完了します。



クラスタ コンポーネント
常にユーザーを主眼に置くNutanix製品は、その導入や使用が極めて容易。 これは基本的に、抽象化や様々な自動化、さらにソフトウェアの連携機能によって実現されています。


Cassandra
主な役割: 分散メタデータ ストア
説明: Cassandraは、Apache Cassandraを大幅に改修した分散リング上に全てのクラスタ メタデータをストアして管理。
一貫性を厳格に保つため、Paxosアルゴリズムが使用されています。 そして本サービスは、クラスタ内の全てのノードで稼動。

Zookeeper
主な役割: クラスタ構成マネージャー
説明: Apache ZookeeperをベースにしたZookeeperは、ホスト、IP、状態など全てのクラスタ構成をストアします。 本サービスは、クラスタ内の3つのホストで稼働

Stargate
主な役割: データI/Oマネージャー
説明: Stargateは、全てのデータ管理とI/O処理に対応し、ハイパーバイザーからの主なインターフェイスNFSiSCSIまたはSMB経由)となります。 該当サービスはクラスタ内の全てのノードで稼動し、ローカルI/Oを処理します。


Curator
主な役割: MapReduceクラスタの管理とクリーンアップ
説明: Curatorは、クラスタ全体のディスクのバランシング、事前スクラブといった多くのタスクの管理と分散を行います。





Prism
主な役割: UIおよびAPI
説明: Prismは、コンポーネントや管理者が、Nutanixクラスタを構成およびモニターするための管理ゲートウェイとしての役割を果たします。 これにはHTML5 UI, Ncli, REST APIが含まれます。 Prismは、全てのノードで稼動

スクラブとは、ディスクをスキャンし不良ブロックを検知し習性する機能
https://blogs.networld.co.jp/entry/nutanix-10-disk-0ac4

nutanixは全てのIO時にチェックサムを行う。
コールドデータ障害の検知漏れしないよう、一日に一回、スクラブを実行する。
※vsanは年に一回


Genesis
主な役割: クラスタコンポーネントおよびサービス マネージャー
説明: Genesisは全てのノードで稼動するプロセスで、サービスの初期設定と制御(開始、停止など)を行います。 Genesisは、クラスタから独立して稼動するプロセスで、クラスタの構成や稼動を必要としません。 Zookeeperが稼動していることがGenesisの動作要件


Chronos
主な役割: ジョブとタスクのスケジューラー
説明: Chronosは、Curatorスキャンされたジョブやタスクをノード間で実行するためのスケジューリングや調整を行います。 Chronosは、全てのノードで稼動し、選出されたChronosリーダーによってコントロールされます。 Chronosリーダーはタスクやジョブを委任し、Curatorリーダーと同じノード上で稼働します。

Cerebro
主な役割: レプリケーション/DRマネージャー
説明: Cerebroは、DSFのレプリケーションとDR機能を担っています。 これには、スナップショットのスケジューリング、リモートサイトへのレプリケーション、サイトの移行、そしてフェイルオーバー機能が含まれています。 CerebroはNutanixクラスタ内の全てのノードとリモート クラスタ/サイトへのレプリケーションに加わる全てのノードで稼動します。

Pithos
主な役割: vDisk構成マネージャー
説明: Pithosは、vDisk(DSFファイル)の構成データを担っています。Pithosは全てのノードで稼動し、Cassandraの上に構築されます。




無停止アップグレード

厳密な事前チェック
2つのパーティション(現用とアップグレード後)を使い、再起動よりアップグレードされる
アップグレードトークンを受信したら、アップグレード実行される。一台づつ。
事前チェックによりアップグレード中のエラーは稀だが、バージョン混在がサポートされる設計のため業務影響なしで運用継続可能。



Foundation (イメージング)
Foundationイメージングのアーキテクチャ
Foundation(ファンデーション)は、Nutanixクラスタのブートストラップ、イメージング及び導入のためにNutanixが提供しているツール

Nutanixノードには、デフォルトでAHVがプリインストールされており、異なるハイパーバイザーをインストールするためには、Foundationを使用して、該当ノード上に必要とされるハイパーバイザーを再イメージングする必要がある

Foundationディスカバリ アプレットは、ノードをディスカバリしてユーザーが接続するノードを選択できるようにします。 ユーザーが接続ノードを選択すると、アプレットlocalhost:9442のIPv4アクセスを、CVMのIPv6リンクローカルアドレスのポート8000にプロキシします。


ターゲットとなるNutanixノードとは異なる(L2)ネットワークを使用している(WAN経由など)場合はディスカバリアプレットが使用できません。 しかしCVMにIPv4アドレスが割り当てられていれば、ディスカバリアプレットを使わずに直接Foundationサービスに接続することができる

直接接続するには
:8000/gui/index.html
をブラウズします




インプット
Foundationには、以下の入力設定があります。 典型的な導入例では、1ノードあたり3つのIP(ハイパーバイザー、CVM、リモート管理(IPMI、iDRACなど))が必要。
さらに、各ノードに対し、クラスタとデータサービスIPアドレスを設定することを推奨

クラスタ
クラスタ
IP*
NTP*
DNS*

CVM
CVM毎のIP
Netmask
Gateway
メモリ

ハイパーバイザー
ハイパーバイザーホスト毎のIP
Netmask
Gateway
DNS*
ホスト名のプリフィックス

IPMI*
ノード毎のIP
Netmask
Gateway
注意: (*) が付いた項目はオプションですが、設定することを強く推奨


ドライブの分割

パフォーマンス デバイス
ノードで最もパフォーマンスの高いデバイス
以下が格納される。
Nutanix Home(CVMコア)
 各ノード2つのデバイスに、60GIB予約
メタデータ(Cassandra / AESストレージ)
 各ノード15GIB
OpLog(永続的書き込みバッファ)
 1ノード最大12
 MIN(((Max cluster RF/2)*400 GiB)/ numDevForOplog), ((Max cluster RF/2)*25%) x Remaining GiB)
エクステントストア(永続的ストレージ)
 残り容量



Prismのアーキテクチャ


Prismは分散リソース管理プラットフォーム
ユーザーがNutanix環境全体のオブジェクトやサービスを管理およびモニターすることができる

機能は以下2つの主要なカテゴリに分かれる

インターフェイス
HTML5 UI、REST APICLIPowerShell コマンドレットなど
管理
ポリシー定義とコンプライアンス、サービス設計とステータス、分析とモニタリング


2つの主要コンポーネントに分けられる

Prism Central (PC)
複数のNutanix Clusterを、1つの集中管理インターフェイスから管理するための★マルチクラスタマネージャー★。 Prism Centralは、AOS Clusterに追加導入し稼動することが可能な、オプションのソフトウェアアプライアンス (VM) です。
1対多のクラスタマネージャー

Prism Element (PE)
単一のクラスタの管理と運用のためのローカルクラスタマネージャー。全てのNutanix Clusterに、Prism Elementが組み込まれています。
1対1のクラスタマネージャー

※大規模な環境、あるいは分散環境(例えば1クラスタ以上あるいは複数のサイト)に導入する場合、運用のシンプル化を図るため、Prism Centralを使用し、 全てクラスタやサイトへの対応を1つの管理UIから実施できるようにすることを推奨

Prismのサービス
Prismのサービスは、HTTPリクエストに対応する特定のPrismリーダーと連携しながら、全てのCVM上で動作する。
他のコンポーネントと同様にPrismリーダーに障害が発生した場合、新しいリーダーが選定される。
PrismリーダーではないCVMがHTTPリクエストを受け取ると、当該リクエストはPrismリーダーに、HTTPレスポンスステータスコード301を使用して、恒久的にリダイレクトされる

Prismは、ポート80と9440を使用。HTTPトラフィックがポート80に到達した場合、ポート9440のHTTPS側にリダイレクトされる

クラスタの外部IPを使用する場合(推奨)、同IPは常に現在のPrismリーダーによってホストされる。★VIP★


認証とアクセス制御(RBAC)
認証
以下の認証プロバイダーとのインテグレーションをサポート

Prism Element (PE)
ローカル
Active Directory
LDAP

Prism Central (PC)
ローカル
Active Directory
LDAP
SAML認証 (IDP) ★IDP連携することで多要素認証に対応可能

アクセス制御
近日公開

ナビゲーション

主要なページとその基本的な使用法を説明

Prism Central
ここには書かない。バイブル参照
マルチクラスタ管理なので、メニューからの情報アクセスが大変。検索機能でアクセス可能。

Prism Element
以下の主要なページがあり

ホーム (Home) ページ
アラート、キャパシティ、パフォーマンス、ヘルス、タスクなどに関する詳細情報を含む、ローカルクラスタをモニターするためのダッシュボード。詳細な情報を取得する際には、対象となる項目をクリック。

Health ページ
環境、ハードウェアおよび管理下にあるオブジェクトのヘルスと状態に関する情報。NCCヘルスチェックステータスも含む。

VMページ
完全なVM管理、モニタリングおよびCRUD (AOS)

Storageページ
コンテナの管理、モニタリングおよびCRUD

Hardware ページ
サーバー、ディスクおよびネットワークの管理、モニタリングおよびヘルスチェック。クラスタの拡張とノードおよびディスクの削除

Data Protection ページ
DR、Cloud ConnectおよびMetro Availabilityの構成。PDオブジェクト、スナップショット、レプリケーションおよびリストアの管理

Analysis ページ
クラスタおよび管理下のオブジェクトに対するイベントの相関関係を含む詳細なパフォーマンス分析

Alerts ページ
ローカルクラスタおよび環境に関するアラート

キーボードのショートカット
アクセスの良さと使いやすさがPrismの重要な構成概念。
★キーボードから全てを操作できるようにショートカットが用意されている。★

例)
O – オーバービュー (Overview)
D – ダイアグラムビュー (Diagram View)
T – テーブルビュー (Table View)
A – アラート
P – タスク
M – メニューのドロップダウン
S – 設定(歯車アイコン)
F – 検索バー
U – ユーザードロップダウン
H – ヘルプ


使用方法とトラブルシューティング
典型的なPrismの使用方法と、一般的なトラブルシューティング方法について説明

Nutanixソフトウェアのアップグレード
AOSとAHVとCVMの関係

AOSはクラウドOS。ハイパーバイザーを制御しオーケストレーションやテナント機能等を提供する。AOSはcvm上に実装される。
AHVはハイパーバイザーのOS

https://www.google.com/url?sa=t&source=web&rct=j&url=https://www.nutanix.com/content/dam/nutanix/ja/documents/support/doc-aos-upgrade.pdf&ved=2ahUKEwiC84nj9pP_AhWdglYBHdNlB1QQFnoECEsQAQ&usg=AOvVaw3-mRTuTYnkVBuQoms-s76o
〜〜〜
AOS アップグレードは各 CVM に対して 1 台ずつ順番にアップグレード(ローリングアップグレード)を実施します。このため、アップグレード中も仮想マシンの I/O は継続可能であり、動作には特に影響はありません。ホスト(ノード)間の仮想マシンのライブマイグレーションも発生しません。
〜〜〜

AOS、AHVどちらもGUI操作で簡単にアップデート可能、




異常検出(Anomaly Detection)
システムは時系列データ(例えば、CPU使用率、メモリ使用率、レイテンシーなど)の季節的傾向を監視し、期待値の「バンド」を確立します。 「バンド」の外にあたる値のみがイベントやアラートをトリガーします。
エンティティまたはイベントのページから異常によるイベントやアラートを確認


キャパシティプラニング

Prismから
クラスタおいて最も切迫したリソース(制約的なリソース)に関する情報を表示
また、リソースを大きく消費している対象に関する詳細情報
キャパシティをクリーンアップできる可能性
クラスタ拡張のための適切なノードタイプに関する情報

クロスプレイ(X-Play)
一般的なアクティビティのセットを自動化

イベント駆動型の自動化は、以下のように動作する
イベント → ロジック → アクション
イベントを受け取り、いくつかのロジックを適用し、その後いくつかのアクションを実行
例)ディスク不足検知し、自動的に増設する等

TLSのお勉強

https://hayashier.com/article/tls-getting-started/amp/

3wayハンドシェイク

やってる事は大きく以下3つ
接続方法のネゴシエーション
認証およびマスターシークレットの共有
完全性検証の3つに分けられます。

暗号スイート
TLSの目的を実現する手段
その手段を実現するにあたっての情報の交換方法

クライアント側は自身が対応している暗号スイートを優先度順にしてリストを送る。
通常は、サーバー側は自身で対応している暗号スイートの中で、クライアントから提示されたリストの上から選択


Server Order Preference等の設定が行われている場合は、サーバー側のリストの上から選択

暗号スイート

例)
ECDHE-ECDSA-AES128-SHA256
4つの要素からなり、それぞれ以下の内容を実現する方法を表現

ECDHE : 鍵交換
ECDSA : 認証
AES128 : 暗号
SHA256 : データ完全性

例)AES128-SHA256
→4情報なし

# openssl ciphers -v

上記実行するとわかる。

AES128-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA256

鍵交換
→Kx=RSA

認証
Au=RSA

暗号
→Enc=AES(128)

データ完全性
Mac=SHA256

以下に表記と意味がわかる対応表があり。

https://www.ipa.go.jp/security/ipg/documents/tls_cipher_suite_config_20200707.pdf
1.1.3. 一般的な名称と OpenSSL での名称の対応表

鍵交換

ここも理解する
https://qiita.com/angel_p_57/items/8ca86cc0ec0ca3a27105