6.3. 解決方法
このセクションでは、ovs-appctl
コマンドを使用してトラフィックフローを表示する手順を示します。
6.3.1. アイドル PMD
次の例は、core_ids が dpdk0 に固定されている PMD にサービスを提供し、管理トラフィックのみが dpdk0 を流れるシステムを示しています。
[root@overcloud-compute-0 ~]# ovs-appctl dpif-netdev/pmd-stats-clear && sleep 10 && ovs-appctl dpif-netdev/pmd-stats-show | egrep 'core_id (2|22):' -A9 pmd thread numa_id 0 core_id 22: emc hits:0 megaflow hits:0 avg. subtable lookups per hit:0.00 miss:0 lost:0 polling cycles:12613298746 (100.00%) processing cycles:0 (0.00%) -- pmd thread numa_id 0 core_id 2: emc hits:5 megaflow hits:0 avg. subtable lookups per hit:0.00 miss:0 lost:0 polling cycles:12480023709 (100.00%) processing cycles:14354 (0.00%) avg cycles per packet: 2496007612.60 (12480038063/5) avg processing cycles per packet: 2870.80 (14354/5)
6.3.2. パケットドロップを伴う負荷テスト中の PMD
次の例は、core_ids が dpdk0 に固定されている PMD にサービスを提供し、負荷テストが dpdk0 を通過して、多数の RX ドロップを引き起こすシステムを示しています。
[root@overcloud-compute-0 ~]# ovs-appctl dpif-netdev/pmd-stats-clear && sleep 10 && ovs-appctl dpif-netdev/pmd-stats-show | egrep 'core_id (2|4|22|24):' -A9 pmd thread numa_id 0 core_id 22: emc hits:35497952 megaflow hits:0 avg. subtable lookups per hit:0.00 miss:0 lost:0 polling cycles:1446658819 (6.61%) processing cycles:20453874401 (93.39%) avg cycles per packet: 616.95 (21900533220/35497952) avg processing cycles per packet: 576.20 (20453874401/35497952) -- pmd thread numa_id 0 core_id 2: emc hits:30183582 megaflow hits:0 avg. subtable lookups per hit:0.00 miss:2 lost:0 polling cycles:1497174615 (6.85%) processing cycles:20354613261 (93.15%) avg cycles per packet: 723.96 (21851787876/30183584) avg processing cycles per packet: 674.36 (20354613261/30183584)
パケットドロップが発生する場合、処理サイクルとポーリングサイクルの比率が高いことがわかります (90% 以上の処理サイクル)。
polling cycles:1497174615 (6.85%) processing cycles:20354613261 (93.15%)
パケットあたりの平均サイクル (CPP) とパケットあたりの平均処理サイクル (PCPP) を確認します。アイドルサイクルはカウントされないため、完全にロードされた PMD の PCPP/CPP 比は 1 と予想できます。
avg cycles per packet: 723.96 (21851787876/30183584) avg processing cycles per packet: 674.36 (20354613261/30183584)
6.3.3. mpps 容量の 50% で負荷テスト中の PMD
次の例は、core_ids が dpdk0 に固定された PMD にサービスを提供し、負荷テストが dpdk0 を通過して、この dpdk0 インターフェイス (約 12.85 Mpps) の 6.4 Mpps (最大容量の約 50%) を送信するシステムを示しています。
[root@overcloud-compute-0 ~]# ovs-appctl dpif-netdev/pmd-stats-clear && sleep 10 && ovs-appctl dpif-netdev/pmd-stats-show | egrep 'core_id (2|4|22|24):' -A9 pmd thread numa_id 0 core_id 22: emc hits:17461158 megaflow hits:0 avg. subtable lookups per hit:0.00 miss:0 lost:0 polling cycles:4948219259 (25.81%) processing cycles:14220835107 (74.19%) avg cycles per packet: 1097.81 (19169054366/17461158) avg processing cycles per packet: 814.43 (14220835107/17461158) -- pmd thread numa_id 0 core_id 2: emc hits:14874381 megaflow hits:0 avg. subtable lookups per hit:0.00 miss:0 lost:0 polling cycles:5460724802 (29.10%) processing cycles:13305794333 (70.90%) avg cycles per packet: 1261.67 (18766519135/14874381) avg processing cycles per packet: 894.54 (13305794333/14874381)
pps がインターフェイスの最大値の約半分である場合、処理サイクルとポーリングサイクルの比率が低くなります (約 70% の処理サイクル)。
polling cycles:5460724802 (29.10%) processing cycles:13305794333 (70.90%)
6.3.4. ヒット vs ミス vs ロスト
次の例は、対象に関する man ページを示しています。
an ovs-vswitchd (...) DPIF-NETDEV COMMANDS These commands are used to expose internal information (mostly statistics) about the `dpif-netdev` userspace datapath. If there is only one datapath (as is often the case, unless dpctl/ commands are used), the dp argument can be omitted. dpif-netdev/pmd-stats-show [dp] Shows performance statistics for each pmd thread of the datapath dp. The special thread ``main'' sums up the statistics of every non pmd thread. The sum of ``emc hits'', ``masked hits'' and ``miss'' is the number of packets received by the datapath. Cycles are counted using the TSC or similar facilities when available on the platform. To reset these counters use dpif-netdev/pmd-stats-clear. The duration of one cycle depends on the measuring infrastructure. (...) Raw man ovs-dpctl (...) dump-dps Prints the name of each configured datapath on a separate line. [-s | --statistics] show [dp...] Prints a summary of configured datapaths, including their datapath numbers and a list of ports connected to each datapath. (The local port is identified as port 0.) If -s or --statistics is specified, then packet and byte counters are also printed for each port. The datapath numbers consists of flow stats and mega flow mask stats. The "lookups" row displays three stats related to flow lookup triggered by processing incoming packets in the datapath. "hit" displays number of packets matches existing flows. "missed" displays the number of packets not matching any existing flow and require user space processing. "lost" displays number of packets destined for user space process but subsequently dropped before reaching userspace. The sum of "hit" and "miss" equals to the total number of packets datapath processed. (...) Raw man ovs-vswitchd (...) dpctl/show [-s | --statistics] [dp...] Prints a summary of configured datapaths, including their datapath numbers and a list of ports connected to each datapath. (The local port is identified as port 0.) If -s or --statistics is specified, then packet and byte counters are also printed for each port. The datapath numbers consists of flow stats and mega flow mask stats. The "lookups" row displays three stats related to flow lookup triggered by processing incoming packets in the datapath. "hit" displays number of packets matches existing flows. "missed" displays the number of packets not matching any existing flow and require user space processing. "lost" displays number of packets destined for user space process but subsequently dropped before reaching userspace. The sum of "hit" and "miss" equals to the total number of packets datapath processed. (...)
一部のドキュメントはカーネルデータパスを参照しているため、user space processing
とは、パケットがカーネル sw
キャッシュ (emc
および dpcls
と同等) に分類されず、ユーザースペースの ofproto レイヤーに送信されないことを意味します。