1. vswitchd 有沒有 multiple thread 會導致存取同一個檔案(用來存parse出來的src_ip / dst_ip)的問題?
#503 ~ #505 官方文件說明:在OVS 2.0版之後就都是多線程的了。
- The ovs-vswitchd process is no longer single-threaded. Multiple threads are now used to handle flow set up and asynchronous logging.
在非dpdk即傳統的ovs應用模式下,多線程主要用於處理內核fastpath lookup miss的流表,此過程稱為upcall;並對這些流表進行統計、老化處理,此過程稱為revalidate。
upcall和revalidate的線程數量計算,以openvswitch 2.3.x為例,代碼中的判斷是將物理核數約3/4分配給upcall,而revalidate則佔1/4,這個分配直觀上是合理的,畢竟upcall處理轉發,要盡可能的快,處理能力也要更強。
2. K-ary sketch implement
3. tot_length test .by 16pkt.pcap
OK。但都會有另兩個封包 。
ip_src = 1694498826 (10.0.0.101)
ip_dst = 4211081440 (224.0.0.251)
length = 73
--------------------------------
ip_src = 16777226 (10.0.0.1)
ip_dst = 4211081440 (224.0.0.251)
length = 169
--------------------------------
4. Parse count test by bigger trace file
OK / Test by tracereply small.pcap ~7700 pps
應收 6901513 封包,實讀出 6901513 封包。
NG / Test by tracereply big.pcap ~19000 pps
應收 17460371 封包,實讀出 17457902 封包。
少讀到 2469 封包。
NG / Test by tcpreplay big.pcap (2 PMD Thread)
做兩次,數字一樣。
應收 17460371 封包,實讀出 17460039 封包。
少讀出 332 封包。
原因???
多Thread同時間寫檔?
是IPv4 但卻未Parse出來?
從wireshark看不太出來。
DPDK PMD Thread不夠導致掉封包?
可能不是,因為PMD Core 的 idle cycle ~ 90% , processing cycle ~ 10%
做了一個實驗每個interface有2個PMD Thread,每個Thread有一個Core來執行,結果一樣。
DPDK參數設定不夠優化?
HugePage?RXQ?
HugePage設定 / CPU Mask and RXQ 設定測試
/ Scale差太多。官方文件說160個clock cycle可以處理一個封包,這邊大約是將近20000個clock cycle。
5. 跟controller連會斷線?
6. IBM X3200 M3 7328 firmware update (Openstack Controller)
ioping test,沒有解決IO讀寫慢的問題,~200us 到 50 ms,高階伺服器約 20us。
註1
註3
pmd thread numa_id 0 core_id 3:
emc hits:4505127
megaflow hits:3998659
avg. subtable lookups per hit:1.00
miss:28
lost:0
idle cycles:2049352098300 (94.59%)
processing cycles:117167745945 (5.41%)
avg cycles per packet: 254770.37 (2166519844245/8503814)
avg processing cycles per packet: 13778.26 (117167745945/8503814)
linux@linux-SYS-7048A-T:/$ sudo ovs-appctl dpif-netdev/pmd-rxq-show
pmd thread numa_id 0 core_id 0:
isolated : false
port: dpdkone queue-id: 1
pmd thread numa_id 0 core_id 1:
isolated : false
port: dpdktwo queue-id: 1
pmd thread numa_id 0 core_id 2:
isolated : false
port: dpdktwo queue-id: 0
pmd thread numa_id 0 core_id 3:
isolated : false
port: dpdkone queue-id: 0
註4
Total IPv4 packets >> 6901513
Count total packets by python
>>> f = open('flow_c_bk.txt','r')
>>> print(f.read().count('ip_dst'))
6901523
>>> f = open('flow_c_bk.txt','r')
>>> print(f.read().count('4211081440'))
10
6901523 - 10 = 6901513
big. pcap