Enviar pesquisa
Carregar
High speed-pc-router 201505
•
1 gostou
•
1,462 visualizações
Y
ykuga
Seguir
NICにおけるPCI E性能の計測 @高速PCルータ研究会 2015/5
Leia menos
Leia mais
Dispositivos e hardware
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 24
Baixar agora
Baixar para ler offline
Recomendados
SDN Japan: ovs-hw
SDN Japan: ovs-hw
ykuga
低遅延10Gb EthernetによるGPUクラスタの構築と性能向上手法について
低遅延10Gb EthernetによるGPUクラスタの構築と性能向上手法について
Atsushi Suzuki
Kernel vm-2014-05-25
Kernel vm-2014-05-25
Hirochika Asai
Fpga local 20130322
Fpga local 20130322
Takefumi MIYOSHI
NetBSD/evbarm on Raspberry Pi
NetBSD/evbarm on Raspberry Pi
tokudahiroshi
Solarflare SolarCapture - 10Gbイーサネットパケットキャプチャソフトウェア リリース
Solarflare SolarCapture - 10Gbイーサネットパケットキャプチャソフトウェア リリース
Atsushi Suzuki
Vyatta 201310
Vyatta 201310
Takefumi MIYOSHI
Reconf_201409
Reconf_201409
Takefumi MIYOSHI
Recomendados
SDN Japan: ovs-hw
SDN Japan: ovs-hw
ykuga
低遅延10Gb EthernetによるGPUクラスタの構築と性能向上手法について
低遅延10Gb EthernetによるGPUクラスタの構築と性能向上手法について
Atsushi Suzuki
Kernel vm-2014-05-25
Kernel vm-2014-05-25
Hirochika Asai
Fpga local 20130322
Fpga local 20130322
Takefumi MIYOSHI
NetBSD/evbarm on Raspberry Pi
NetBSD/evbarm on Raspberry Pi
tokudahiroshi
Solarflare SolarCapture - 10Gbイーサネットパケットキャプチャソフトウェア リリース
Solarflare SolarCapture - 10Gbイーサネットパケットキャプチャソフトウェア リリース
Atsushi Suzuki
Vyatta 201310
Vyatta 201310
Takefumi MIYOSHI
Reconf_201409
Reconf_201409
Takefumi MIYOSHI
FPGAのトレンドをまとめてみた
FPGAのトレンドをまとめてみた
Takefumi MIYOSHI
FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向
Shinya Takamaeda-Y
Synthesijer.Scala (PROSYM 2015)
Synthesijer.Scala (PROSYM 2015)
Takefumi MIYOSHI
Lagos running on small factor machine
Lagos running on small factor machine
Lagopus SDN/OpenFlow switch
ハードウェア技術の動向 2015/02/02
ハードウェア技術の動向 2015/02/02
maruyama097
マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法
Takuya ASADA
ICD/CPSY 201412
ICD/CPSY 201412
Takefumi MIYOSHI
NVIDIA TESLA V100・CUDA 9 のご紹介
NVIDIA TESLA V100・CUDA 9 のご紹介
NVIDIA Japan
High Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many Core
slankdev
FPGAX6_hayashi
FPGAX6_hayashi
愛美 林
DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発
slankdev
Ethernetの受信処理
Ethernetの受信処理
Takuya ASADA
増え続ける情報に対応するためのFPGA基礎知識
増え続ける情報に対応するためのFPGA基礎知識
なおき きしだ
Lagopus Switch Usecases
Lagopus Switch Usecases
Sakiko Kawai
Linux packet-forwarding
Linux packet-forwarding
Masakazu Asama
透過型確率的パケットマーキング装置の提案と開発(オープンルータコンペティション発表資料)
透過型確率的パケットマーキング装置の提案と開発(オープンルータコンペティション発表資料)
Akira Kanaoka
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法
Kentaro Sano
GTC 2017 基調講演からディープラーニング関連情報のご紹介
GTC 2017 基調講演からディープラーニング関連情報のご紹介
NVIDIA Japan
Fpgax 20130604
Fpgax 20130604
Takefumi MIYOSHI
Dpdk環境の話
Dpdk環境の話
Masaru Oki
20170421 tensor flowusergroup
20170421 tensor flowusergroup
ManaMurakami1
[DL Hacks]FPGA入門
[DL Hacks]FPGA入門
Deep Learning JP
Mais conteúdo relacionado
Mais procurados
FPGAのトレンドをまとめてみた
FPGAのトレンドをまとめてみた
Takefumi MIYOSHI
FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向
Shinya Takamaeda-Y
Synthesijer.Scala (PROSYM 2015)
Synthesijer.Scala (PROSYM 2015)
Takefumi MIYOSHI
Lagos running on small factor machine
Lagos running on small factor machine
Lagopus SDN/OpenFlow switch
ハードウェア技術の動向 2015/02/02
ハードウェア技術の動向 2015/02/02
maruyama097
マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法
Takuya ASADA
ICD/CPSY 201412
ICD/CPSY 201412
Takefumi MIYOSHI
NVIDIA TESLA V100・CUDA 9 のご紹介
NVIDIA TESLA V100・CUDA 9 のご紹介
NVIDIA Japan
High Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many Core
slankdev
FPGAX6_hayashi
FPGAX6_hayashi
愛美 林
DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発
slankdev
Ethernetの受信処理
Ethernetの受信処理
Takuya ASADA
増え続ける情報に対応するためのFPGA基礎知識
増え続ける情報に対応するためのFPGA基礎知識
なおき きしだ
Lagopus Switch Usecases
Lagopus Switch Usecases
Sakiko Kawai
Linux packet-forwarding
Linux packet-forwarding
Masakazu Asama
透過型確率的パケットマーキング装置の提案と開発(オープンルータコンペティション発表資料)
透過型確率的パケットマーキング装置の提案と開発(オープンルータコンペティション発表資料)
Akira Kanaoka
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法
Kentaro Sano
GTC 2017 基調講演からディープラーニング関連情報のご紹介
GTC 2017 基調講演からディープラーニング関連情報のご紹介
NVIDIA Japan
Fpgax 20130604
Fpgax 20130604
Takefumi MIYOSHI
Dpdk環境の話
Dpdk環境の話
Masaru Oki
Mais procurados
(20)
FPGAのトレンドをまとめてみた
FPGAのトレンドをまとめてみた
FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向
Synthesijer.Scala (PROSYM 2015)
Synthesijer.Scala (PROSYM 2015)
Lagos running on small factor machine
Lagos running on small factor machine
ハードウェア技術の動向 2015/02/02
ハードウェア技術の動向 2015/02/02
マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法
ICD/CPSY 201412
ICD/CPSY 201412
NVIDIA TESLA V100・CUDA 9 のご紹介
NVIDIA TESLA V100・CUDA 9 のご紹介
High Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many Core
FPGAX6_hayashi
FPGAX6_hayashi
DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発
Ethernetの受信処理
Ethernetの受信処理
増え続ける情報に対応するためのFPGA基礎知識
増え続ける情報に対応するためのFPGA基礎知識
Lagopus Switch Usecases
Lagopus Switch Usecases
Linux packet-forwarding
Linux packet-forwarding
透過型確率的パケットマーキング装置の提案と開発(オープンルータコンペティション発表資料)
透過型確率的パケットマーキング装置の提案と開発(オープンルータコンペティション発表資料)
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法
GTC 2017 基調講演からディープラーニング関連情報のご紹介
GTC 2017 基調講演からディープラーニング関連情報のご紹介
Fpgax 20130604
Fpgax 20130604
Dpdk環境の話
Dpdk環境の話
Semelhante a High speed-pc-router 201505
20170421 tensor flowusergroup
20170421 tensor flowusergroup
ManaMurakami1
[DL Hacks]FPGA入門
[DL Hacks]FPGA入門
Deep Learning JP
OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...
OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...
VirtualTech Japan Inc.
機械学習とこれを支える並列計算: ディープラーニング・スーパーコンピューターの応用について
機械学習とこれを支える並列計算: ディープラーニング・スーパーコンピューターの応用について
ハイシンク創研 / Laboratory of Hi-Think Corporation
200625material naruse
200625material naruse
RCCSRENKEI
2015年度GPGPU実践基礎工学 第7回 シングルコアとマルチコア
2015年度GPGPU実践基礎工学 第7回 シングルコアとマルチコア
智啓 出川
データ爆発時代のネットワークインフラ
データ爆発時代のネットワークインフラ
NVIDIA Japan
Trema day 1
Trema day 1
ykuga
Myoshimi extreme
Myoshimi extreme
Masato Yoshimi
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料
一路 川染
CMSI計算科学技術特論A(7) 線形代数演算ライブラリBLASとLAPACKの基礎と実践2
CMSI計算科学技術特論A(7) 線形代数演算ライブラリBLASとLAPACKの基礎と実践2
Computational Materials Science Initiative
【関東GPGPU勉強会#4】GTX 1080でComputer Visionアルゴリズムを色々動かしてみる
【関東GPGPU勉強会#4】GTX 1080でComputer Visionアルゴリズムを色々動かしてみる
Yasuhiro Yoshimura
PFI Seminar 2010/01/21
PFI Seminar 2010/01/21
Preferred Networks
20220602コンピュータネットワーク.pdf
20220602コンピュータネットワーク.pdf
risakitagawa
クラウドの組み立て方事始め H/W利用者としての事業者
クラウドの組み立て方事始め H/W利用者としての事業者
Naoto MATSUMOTO
HPC 的に H100 は魅力的な GPU なのか?
HPC 的に H100 は魅力的な GPU なのか?
NVIDIA Japan
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門
ryos36
Abstracts of FPGA2017 papers (Temporary Version)
Abstracts of FPGA2017 papers (Temporary Version)
Takefumi MIYOSHI
A100 GPU 搭載! P4d インスタンス使いこなしのコツ
A100 GPU 搭載! P4d インスタンス使いこなしのコツ
Kuninobu SaSaki
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
Hiroki Nakahara
Semelhante a High speed-pc-router 201505
(20)
20170421 tensor flowusergroup
20170421 tensor flowusergroup
[DL Hacks]FPGA入門
[DL Hacks]FPGA入門
OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...
OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...
機械学習とこれを支える並列計算: ディープラーニング・スーパーコンピューターの応用について
機械学習とこれを支える並列計算: ディープラーニング・スーパーコンピューターの応用について
200625material naruse
200625material naruse
2015年度GPGPU実践基礎工学 第7回 シングルコアとマルチコア
2015年度GPGPU実践基礎工学 第7回 シングルコアとマルチコア
データ爆発時代のネットワークインフラ
データ爆発時代のネットワークインフラ
Trema day 1
Trema day 1
Myoshimi extreme
Myoshimi extreme
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料
CMSI計算科学技術特論A(7) 線形代数演算ライブラリBLASとLAPACKの基礎と実践2
CMSI計算科学技術特論A(7) 線形代数演算ライブラリBLASとLAPACKの基礎と実践2
【関東GPGPU勉強会#4】GTX 1080でComputer Visionアルゴリズムを色々動かしてみる
【関東GPGPU勉強会#4】GTX 1080でComputer Visionアルゴリズムを色々動かしてみる
PFI Seminar 2010/01/21
PFI Seminar 2010/01/21
20220602コンピュータネットワーク.pdf
20220602コンピュータネットワーク.pdf
クラウドの組み立て方事始め H/W利用者としての事業者
クラウドの組み立て方事始め H/W利用者としての事業者
HPC 的に H100 は魅力的な GPU なのか?
HPC 的に H100 は魅力的な GPU なのか?
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門
Abstracts of FPGA2017 papers (Temporary Version)
Abstracts of FPGA2017 papers (Temporary Version)
A100 GPU 搭載! P4d インスタンス使いこなしのコツ
A100 GPU 搭載! P4d インスタンス使いこなしのコツ
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
High speed-pc-router 201505
1.
NICにおけるPCI E 性能の計測 Yohei
Kuga@KEIO Univ ⾼速PCルータ研究会 2015/5
2.
今⽇の話 1. PCIe NICの基礎体⼒測定 2.
ざっくばらんにFPGA開発ネタ • FPGA+SystemVerilogで合成可能なパケット処理を考える • その他のFPGA NIC実装 1
3.
Motivation ネットワークを⾼機能化するためにNICを⾃由に拡張したい 最近のDC+SW界隈 (Kernel bypass/Unikernels)
に⽐べて, ネットワークHWはまだまだユーザ拡張性が低い ▶ 現在のOffload機能はL2˜L4パケットヘッダ操作が主流 • Capsulation, CSUM, TCP など ▶ Programmable NICの検討は始まっている ”NICがProgrammableであること”が最初の⼀歩 ▶ ヘッダやFIB操作はProgrammable NICやNPUで実現可能 ▶ ペイロード操作/Interrupt/PCIe/遅延制御などを直接触り たいならFPGA NICが有⼒ 2
4.
今回のチャレンジ 前回: シングルポート1GE NIC ▶
Lattice ECP3 versa kit (1GEx2 + PCIe1.1) ▶ PCIE-TX: PIO write + Write combining, RX: DMA write ▶ Linux Driver and Timestamp機能 今回: マルチポート10GE NIC ▶ KC705 (10GEx4 + PCIe gen2 x8) or NetFPGA-SUME ▶ PCIE: TX: DMA read, RX: DMA write ▶ 性能⽬標: 少なくとも10G 2ポートはline rate出したい 3
5.
FPGA NICのどこらへんが難しいのか いまのところ マルチポート
らへんが課題 ▶ Ethernetポートは増やせても使えるPCIe帯域は共通 ▶ だめ回路ではマルチポートで性能がだせない可能性がある しかしマルチポートNICのPCIe利⽤帯域の⾒積もりは難しい ▶ ネットワークではマルチポート送受信利⽤が前提だがPCIe は共有 ▶ マルチポートEthernet利⽤時のTLP送信待ち時間が課題 ▶ マルチポート40GE/100GE NICがきびしい理由を計測から 考える 今回は,市販NICでPCIeの現実に使える利⽤可能帯域を計測 4
6.
計測のねらい ▶ Ethernetの性能を最⼤限出すために,現実的なPCIeの利⽤ 可能帯域を探りたい ▶ ⼀⽅で,市販NICはPCIe帯域に余裕を持って設計されてい るため,計測⽅法に⼯夫が必要 ▶
今回はIntel x520-SR2 (10GE x2)を⽤いて計測 Intel 82599: Host Interface Features1 PCIe Host Interface PCIe gen2 (2.5GT/s, 5GT/s) Number of Lanes x1, x2, x4, x8 意図的にNIC PCIeの使⽤レーン数を絞ることでThroughput を計測 1(PDF) Intel 82599 10 GbE Controller Datasheet 5
7.
計測環境 Host CPU Intel
Core i7 4770 NIC Intel x520-SR2 OS BSD Router 1.55 (FreeBSD 10.1-RELEASE-p8) Tool netmap pkt-gen Tester (Intel x520) DUT (Intel x520) Test 1: TX Tester (Intel x520) DUT (Intel x520) Test 2: TXRX (same interface) pkt-gen (60B, 1514B) pkt-gen (60B, 1514B) pkt-gen (60B, 1514B) 6
8.
テープを使ってPCIeスロットを物理マスク $ sudo lspci
-vv 01:00.0 Ethernet controller: Intel Corporation 82599ES LnkCap: Port #0, Speed 5GT/s, Width x8, ... LnkSta: Speed 5GT/s, Width x1, ... 上: x1マスク, 中: x4マスク, 下: x1時のLink status 7
9.
計測環境 Tester (Intel x520) DUT (Intel x520) Test
1: TX Tester (Intel x520) DUT (Intel x520) Test 2: TXRX (same interface) pkt-gen (60B, 1514B) pkt-gen (60B, 1514B) pkt-gen (60B, 1514B) ここでPCIeレーン数を絞る 計測結果の注意点 ▶ Softwareで試験パケットを⽣成しているので計測PPSに誤 差が⽣じる ▶ もちろんx8の時に最⼤限PCIe性能がだせる回路と考えられ るので,NICそのものの絶対評価ではない 8
10.
Max. TX Throughput 0 2 4 6 8 10 12 x1
x2 x4 x8 Gbps Lane width 60B(TX) 60B(TXRX) 1514B(TX) 1514B(TXRX) Theoretical Max. Throughput (GT/s) * 8b/10b overhead (0.8): x1: 4Gbps, x2: 8Gbps, x4: 16Gbps, x8: 32Gbps 9
11.
% of Max.
TX Throughput 0 20 40 60 80 100 x1 x2 x4 x8 Throughput(%) Lane width 60B(TX) 60B(TXRX) 1514B(TX) 1514B(TXRX) Theoretical Max. Throughput (GT/s) * 8b/10b overhead (0.8): x1: 4Gbps, x2: 8Gbps, x4: 16Gbps, x8: 32Gbps 10
12.
NICのPCIe基礎体⼒測定 考察 0 20 40 60 80 100 x1 x2
x4 x8 Throughput(%) Lane width % of Theoretical Max. TX Throughput 60B(TX) 60B(TXRX) 1514B(TX) 1514B(TXRX) PCIe利⽤可能帯域を計測することでNIC回路の性能を推測 ▶ 送信のみの場合,PCIeの約81%の帯域が利⽤可能 ▶ 送受信時,PCIeの約73%の帯域が利⽤可能 ▶ 送受信時,1514B-60Bで約20%利⽤可能帯域が減少 ▶ (PCIeはFull duplexにも関わらず) 60B送受信-送信のみ で,PCIe利⽤可能帯域が約18%減少 11
13.
NICのPCIe基礎体⼒測定 考察 0 20 40 60 80 100 x1 x2
x4 x8 Throughput(%) Lane width % of Theoretical Max. TX Throughput 60B(TX) 60B(TXRX) 1514B(TX) 1514B(TXRX) ▶ PCIeの最⼤利⽤可能帯域の割合で⾒るとx1, x2で同じ傾向 ▶ x4(TXRX60B以外)とx8では,Ethernet帯域(10Gbps)を上 回るので特性は⾒えない 検討内容 1. パケットサイズとPCIe利⽤可能帯域の関係 2. Full duplexとPCIe利⽤可能帯域の関係 12
14.
NICのおさらい パケット送信時のPCIe操作 1. ドライバがNICのリングバッファのTail pointerを更新 2.
データ転送 (DMA read) 3. Write-back the NIC status パケット受信時のPCIe操作 1. データ転送 (DMA write) 2. ドライバがTail pointerを更新 13
15.
PCIeのおさらい ▶ PCIeのメモリ操作は送受信のレーンを使ってTLPパケット の通信が発⽣ ▶ Ethernetポートを送受信パケットでFull
duplex専有して も,PCIeでは上り下りリンクの専有ができるわけではない ⇛ TLPパケットの送信待ちが発⽣する Ethernetパケット送信 (DMA read) 1. TLP (Memory read)を送信 2. ACKとデータ付きコンプリーションを受信 3. コンプリーションに対するACKを送信 Ethernetパケット受信時 (DMA write) 1. TLP (Memory write)を送信 2. ACKを受信 14
16.
計測結果をどう考えるか 0 20 40 60 80 100 x1 x2 x4
x8 Throughput(%) Lane width % of Theoretical Max. TX Throughput 60B(TX) 60B(TXRX) 1514B(TX) 1514B(TXRX) 参考データ Throughput %. gen3x8(64Gbps) %. gen3x16(128Gbps) 10GE 10Gbps 15 8 40GE 40Gbps 62 31 100GE 100Gbps - 78 Xeon環境があるとPCMでもう少し詳細がわかりそう NICのレーン数の変更はEEPROMの書き換えで変更できるかも 15
17.
ざっくばらんにFPGA開発ネタ 16
18.
FPGA開発環境の話 ▶ Xilinx vivadoではSystemverilogで論理合成が可能になった •
使える型が増えた (typedef, union, struct, enum, etc) ⇛ FPGA回路の合成時に型のチェックができるだけでもかなりう れしい • Classなど合成できないSVの機能はまだまだ多い • FPGAでのunionやenumはとても強⼒ • VHDL, Verilog混在環境で合成可能 ▶ Systemverilogがとても良かったので合成可能なパケット処 理を考えてみる • Classなどが使えないのでOSSで公開されているような検証⽤ラ イブラリはそのままでは使えない • そこでLinuxのRaw socketぽくしてみる 17
19.
Systemverilogによるパケット処理 [1/3] ethernet_pkg.sv /* MAC
adderss */ typedef bit [ETH_ALEN-1:0][7:0] macaddr_t; /* ethernet header */ typedef struct packed { macaddr_t h_dest; macaddr_t h_source; bit [15:0] h_proto; } ethhdr; 18
20.
Systemverilogによるパケット処理 [2/3] user_app.sv union packed
{ bit [5:0][63:0] raw; // XGMII (64bit) struct packed { ethhdr eth; iphdr ip; udphdr udp; bit [47:0] padding; } hdr; } tx_pkt, rx_pkt; 19
21.
Systemverilogによるパケット処理 [3/3] TX // User
register to XGMII_TX xgmii.data = endian_conv64(tx_pkt.raw[5]); RX // XGMII_RX to User register rx_pkt.raw[5] <= endian_conv64(xgmii_rx.data); ... // packet filtering if (rx_pkt.hdr.eth.h_proto == ETH_P_IP && rx_pkt.hdr.ip.protocol == IP4_PROTO_UDP && rx_pkt.hdr.udp.dest == 16’d9) begin Raw socket ぽい? 20
22.
その他のFPGA NIC実装 ▶ NetFPGA-10G
(最近1ポート10Gラインレート対応) ▶ NetFPGA-SUME (リファレンス回路待ち) ▶ KC705, VC709などのリファレンスNIC それぞれ論理合成に2から3時間かかる 21
23.
Summary ▶ 実験⽤のFPGA NIC回路を作るために,まずは市販NICの PCIe帯域を計測 •
PCIeの使⽤レーンを減らすことでPCIe利⽤可能帯域を計測 • Ethert送受信時はPCIeの利⽤可能帯域が60%前後まで下がった • NICはEthernetの広帯域化に従って,PCIe利⽤可能帯域の効率 化が課題になる ▶ 100GE NIC以降はNIC間をデイジーチェーンでつないで PCIe帯域を増やすアプローチもあるらしい ▶ 今後は現在⼀般的なNICリングバッファ構造以外の⽅法を検 討 22
24.
Q ⌣ 23
Baixar agora