Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

高速ネットワーク最新動向と具体例 (ENOG58 Meeting)

310 views

Published on

高速ネットワーク最新動向と具体例 (ENOG58 Meeting)

Naoto MATSUMOTO / 流しの研究者
2019年08月30日

Published in: Technology
  • Be the first to comment

高速ネットワーク最新動向と具体例 (ENOG58 Meeting)

  1. 1. 高速ネットワーク最新動向と具体例 (ENOG58 Meeting) Naoto MATSUMOTO / 流しの研究者 2019年08月30日
  2. 2. 高速ネットワーク最新動向 (CPU 12コアを使えば100GbE Line Rate)。 SOURCE: https://fast.dpdk.org/doc/perf/DPDK_19_05_Mellanox_NIC_performance_report.pdf
  3. 3. でも、あまりパケット処理をCPUに頼りたくないなという方へは。 # mst start # mlxconfig -d /dev/mst/mt4121_pciconf0 set SRIOV_EN=1 # mlxconfig -d /dev/mst/mt4121_pciconf0 set NUM_OF_VFS=32 # sync; sync; sync; reboot # echo 1 > /sys/class/net/enp1s0f0/device/sriov_numvfs # echo 0000:01:00.1 > /sys/bus/pci/drivers/mlx5_core/unbind # devlink dev eswitch set pci/0000:01:00.0 mode switchdev # echo 0000:01:00.1 > /sys/bus/pci/drivers/mlx5_core/bind # apt install openvswitch-switch -y # /etc/init.d/openvswitch-switch start # ovs-vsctl set Open_vSwitch . other_config:hw-offload=true # /etc/init.d/openvswitch-switch restart # ovs-vsctl add-br ovs-sriov # ovs-vsctl add-port ovs-sriov enp1s0f0 # ovs-vsctl add-port ovs-sriov enp1s0f0_0 # ifconfig enp1s0f0 up up (*PF) # ifconfig enp1s0f0_0 up up (*VF representor) # ip netns add TEST (*namespace TEST) # ip link set enp1s0f1 netns TEST # ip netns exec TEST ifconfig enp1s0f1 up up (*VF) # ip netns exec TEST dhcient enp1s0f1 (*VF assigned ip address 1.2.3.4) # ip netns exec TEST ping 8.8.8.8 Mellanox ASAP2 Direct / Full OVS Offload CPU使いません
  4. 4. サーバー接続は100GbEですが、そもそも日本インターネットって… Copyright © 2017 Japan Internet Exchange. All Rights Reserved. https://www.jpix.ad.jp/jp/technical_traffic.php Incoming Traffic to IX
  5. 5. とはいえ、今はこんな簡単にH/W Offload NICでL4LBが触れる時代。 # dpkg -i linux-headers-4.19.0-041900rc3_4.19.0-041900rc3.201809120832_all.deb # dpkg -i linux-headers-4.19.0-041900rc3-generic_4.19.0-041900rc3.201809120832_amd64.deb # dpkg -i linux-modules-4.19.0-041900rc3-generic_4.19.0-041900rc3.201809120832_amd64.deb # dpkg -i linux-image-unsigned-4.19.0-041900rc3-generic_4.19.0-041900rc3.201809120832_amd64.deb # sync; sync; sync; reboot # dpkg -i agilio-bpf-firmware-2.0.6.121-1.deb # dpkg -i bpftool-4.18_amd64.deb # modprobe -r nfp; modprobe nfp # cd /opt # apt install elfutils libelf-dev libmnl-dev bison flex pkg-config # git clone https://git.kernel.org/pub/scm/network/iproute2/iproute2-next.git # cd iproute2-next; ./configure; make; make install # ip link set dev enp101s0np0 xdpoffload obj l4lb_xdp.o sec xdp # ./l4lb_map.py -i enp101s0np0 -f ./destination_samples/32_destinations.csv # ./l4lb_stats.py -i enp101s0np0 == Load balancer outbound statistics [Offload] == 1 10.0.0.57 0 pkts/s 0 bits/s 2 10.0.125.19 0 pkts/s 0 bits/s 3 10.0.129.60 0 pkts/s 0 bits/s :
  6. 6. ここ25年以上、オンライン・データ処理って、あまり変化ないけどね。 キャッシュ/サービス (API) リクエスト振分処理 不特定多数の参照ユーザー(80%) 不特定少数の投稿ユーザー(20%) データベース/ストレージ 恒久的なデータ保存 整合性チェックアーカイブ処理 力技と物量による問題解決(現在)
  7. 7. よくこの手の話で昔から「GPUを使えば!」が出ますが、こういう実態。 a = cp.array(R, dtype=np.uint8) 2.27 sec a = np.array(R, dtype=np.uint8) 0.46 sec cp.sort(a) 0.54 sec np.sort(a) 15.1sec # apt install python-pip # pip install --upgrade pip # pip install --upgrade setuptools # pip install numpy cupy time # python import time import cupy as cp import numpy as np from numpy.random import * R = randint(0,100,600000000) a = cp.array(R, dtype=cp.uint8) cp.sort(a) numpy (CPU) cupy (GPU) 15.56秒 (処理時間) 2.81秒 (処理時間) ↑ GPUメモリ空間への配列データ転送
  8. 8. それでも「GPUで何か高速化したい!」方へは、こういうモノもある。 # apt install -y curl apt-transport-https # useradd -U mapd; ufw disable; ufw enable; ufw allow 9092/tcp; ufw allow 22/tcp # curl https://releases.mapd.com/ce/mapd-ce-cuda.list | sudo tee /etc/apt/sources.list.d/mapd.list # curl https://releases.mapd.com/GPG-KEY-mapd | sudo apt-key add - # apt update # apt install -y mapd # vi ~/.bashrc export MAPD_USER=mapd export MAPD_GROUP=mapd export MAPD_STORAGE=/var/lib/mapd export MAPD_PATH=/opt/mapd # source ~/.bashrc # mkdir -p $MAPD_STORAGE; chown -R $MAPD_USER $MAPD_STORAGE # cd $MAPD_PATH/system; ./install_mapd_systemd.sh; cd $MAPD_PATH # systemctl start mapd_server; systemctl enable mapd_server # systemctl start mapd_web_server; systemctl enable mapd_web_server # $MAPD_PATH/insert_sample_data # $MAPD_PATH/bin/mapdql -t Password: HyperInteractive mapdql> SELECT origin_city AS "Origin", dest_city AS "Destination", AVG(airtime) AS "Average Airtime" FROM flights_2008_10k WHERE distance <= 33 GROUP BY origin_city, dest_city; Execution time: 1268 ms, Total time: 1269 ms CUDA9.1 (MapD Community Edition 3.4.0)
  9. 9. でも、クロックの高いCPUを使おうともデータサイズが大きければ… # mkdir /ramdisk # mount -t tmpfs tmpfs /ramdisk # fio -directory=/ramdisk -rw=read -bs=* -size=1G -numjobs=16 -runtime=10 -group_reporting -name=data 無駄に大きなデータを 扱っていないか?
  10. 10. 最近PCI Express 4.0でバス速度も速くなりましたし、楽しい限りです。 # lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 12 Vendor ID: AuthenticAMD # lspci -vv 01:00.0 Non-Volatile memory controller: Phison Electronics Corporation Device 5016 ... Capabilities: [80] Express (v2) Endpoint, MSI 00 LnkCap: Port #1, Speed 16GT/s, Width x4, ASPM L1, Exit Latency L0s unlimited, LnkSta: Speed 16GT/s, Width x4, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt- LnkCtl2: Target Link Speed: 16GT/s, EnterCompliance- SpeedDis- # lspci -vv (PCIe 2.0 to 4.0 on BIOS Config) PCIe2.0: LnkSta: Speed 5GT/s, Width x4, TrErr- Train- SlotClk+ PCIe3.0: LnkSta: Speed 8GT/s, Width x4, TrErr- Train- SlotClk+ PCIe4.0: LnkSta: Speed 16GT/s, Width x4, TrErr- Train- SlotClk+ # fio --directory=/root/ --rw=read --bs=4k --size=10G --numjobs=16 ... PCIe2.0: read: IOPS=443k, BW=1732MiB/s (1816MB/s)(160GiB/94590msec) PCIe3.0: read: IOPS=876k, BW=3421MiB/s (3587MB/s)(160GiB/47889msec) PCIe4.0: read: IOPS=1209k, BW=4724MiB/s (4954MB/s)(160GiB/34681msec)
  11. 11. まとめ とくにまとめません。 いつの世でも「楽しい」をまずやってみてくださいませ。 そうすれば、きっと結果も未来もおのずと現れてきます。 小さくとも何かの知識欲のきっかけになりましたら幸いです。

×