2020年5月28日 星期四

[教學] DPDK EAL parameter使用方式

大家好啊~~
官方的範例看得有夠久
在執行程式的時候實在很納悶指令的參數該怎麼下

-c <core mask>
用十六進位表示法決定要用哪些lcore去執行
如果要用core0&core1→-c 0x3
如果要用core1&core2→-c 0x6

-l <core list>
用直覺的表法決定要用哪些lcore去執行
如果要用core0&core1→-l 0,1
如果要用core0&core1&core3→-l 0,1,3

※上述兩種描述法在同行指令中互斥(只能二選一啦)

--master-lcore <core ID>
決定使用哪個lcore當作master
如果要用core3→--master-lcore 3

-s <service core mask>
決定使用哪些lcore當作service core
假定我有4個core,如果我只想要讓core1&core2執行→ -l 0,1,2,3 -s 0x9
以Helloworld當作範例,會得到
-------------------------------------------------------
hello from core 1
hello from core 2
in master lcore 0
hello from core 0
-------------------------------------------------------

到這裡你可能會問為什麼core0還會執行((-s表示:當我塑膠?
這是因為預設情況會使用core0當作master core
只要某一個core被指定為master core
不管core mask為何都會執行

所以如果要完全符合你所期望的結果
結合上面--master-lcore的指令指定master core給1(或2)
就會得到
-------------------------------------------------------
hello from core 2
in master lcore 1
hello from core 1
-------------------------------------------------------

2020年5月25日 星期一

[教學] DPDK在Ubuntu虛擬機上編譯方式

大家好啊~~
最近在研究DPDK的套件
想了解這些範例程式跑起來的樣子是什麼
但手邊沒有支援DPDK的實體網卡
後來看到網路上說
可以使用虛擬機模擬出支援的網卡!!!
於是手刀部建虛擬機&編譯環境了

以下是整理過的筆記
以DPDK-18.11.6版本+Ubuntu 16.04.3 with 4.4.0-87-generic+VMware Workstation 15當作範例

撰寫日期:2020.05.20

1. 首先建立好虛擬機並安裝好作業系統

2. 把虛擬機關機,再去設定檔這邊添加2張網卡(mode設NAT即可)

3. 修改.vmx,把你要設定網卡的"virtualDev"的值,設定為"e1000"
(否則網卡會無法給DPDK使用)

4. 開機後去官網下載dpdk的原始碼,並解壓縮出來後,進入該資料夾

5. 使用指令
sudo apt-get install make gcc python libpcap-dev libnuma-dev pkg-config -y
安裝這幾個dpdk編譯會用到的套件
./usertools/dpdk-devbind.py --status
去看網卡類型是否變為
drv=e1000
有的話就成功模擬出支援的網卡囉

6. 環境變數DESTDIR指定程式build出來的位置(名字位置任意,本範例會在dpdk目錄底下的myinstall資料夾內,建立所有範例的binary)
還有DPDK編譯相關的環境變數
export DESTDIR=myinstall
export RTE_SDK=/home/john/dpdk-stable-18.11.6/ export RTE_TARGET=x86_64-native-linuxapp-gcc

7. 執行官方設置腳本,包含載入igb_uio模組以及綁定網卡給DPDK使用
./usertools/dpdk-setup.sh
依序選擇
[15] x86_64-native-linuxapp-gcc(根據作業系統、使用的編譯器決定)
[18] Insert IGB UIO module
[24] Bind Ethernet/Crypto device to IGB UIO module(綁定指定網卡給DPDK)
[21/22] Setup hugepage mappings for (non-)NUMA systems(設定Hugeopage給DPDK使用)

8. 手動編譯範例make test,發現ImportError: No module named pexpect
補上解法
sudo apt-get install python-setuptools
sudo easy_install pip
sudo -E pip install pexpect
9. 因為在虛擬機上面執行程式,虛擬出來的網卡會有一些問題
如圖所示

要去修改library的程式碼解決問題
vim kernel/linux/igb_uio/igb_uio.c : 259
修改完畢後要重新編譯DPDK,並且重新載入igb_uio模組

10. 再去執行範例程式,以Helloworld來說存在於myinstall/share/dpdk/examples/helloworld/build/app底下

我的虛擬機有4顆Core,3張網卡(後兩張有綁給DPDK)
使用sudo ./helloworld執行範例
執行結果如下
-------------------------------------------------------------------------
john@ubuntu:~/dpdk-stable-18.11.6/myinstall/share/dpdk/examples/helloworld/build/app$ sudo ./helloworld
EAL: Detected 4 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: No free hugepages reported in hugepages-1048576kB
EAL: Probing VFIO support...
EAL: PCI device 0000:02:01.0 on NUMA socket -1
EAL:   Invalid NUMA socket, default to 0
EAL:   probe driver: 8086:100f net_e1000_em
EAL: PCI device 0000:02:06.0 on NUMA socket -1
EAL:   Invalid NUMA socket, default to 0
EAL:   probe driver: 8086:100f net_e1000_em
EAL: PCI device 0000:02:07.0 on NUMA socket -1
EAL:   Invalid NUMA socket, default to 0
EAL:   probe driver: 8086:100f net_e1000_em
hello from core 1
hello from core 2
hello from core 3
hello from core 0
john@ubuntu:~/dpdk-stable-18.11.6/myinstall/share/dpdk/examples/helloworld/build/app$
-------------------------------------------------------------------------

以上!
有問題歡迎留言討論
後續再來寫命令列參數的使用

2020年5月15日 星期五

[紀錄] 2018秋季瑞昱(Realtek)面試心得

大家好啊~~
面試心得分享馬不停蹄
這回來說說面試第一個錄取的公司瑞昱
又稱螃蟹🦀(現在已經被奉為帝王蟹🤣)

流程:
一面→二面→口頭offer→正式offer
履歷投遞是被人資
親臨小弟的實驗室而邀請投履歷
(有種備受重視的感覺啊)

當時有填一些可能比較有興趣的職缺&可能面試的時間
主要和通訊相關

過個幾天後就收到面試邀請
看到面試職缺的名義還滿神奇的
108年度非研替優秀應屆畢業生-系統設計工程師職務
說這麼長
就是預聘兩個字啦XD

光是一面的部分總共被8個部門邀請面試
裡面包含
藍芽*2
WIFI*4
LTE*1
電視螢幕*1
SSD*1

面試流程大致如下
先讓你自我介紹
主管再針對內容提問
並且考專業問題(白板題/考卷)
發現有個共通點
他們很喜歡考Linked-list類型的問題
可以從這部分去著手準備

再來會問關於人格特質的問題
滿常被問到的是
就學過程中遇過什麼困難
怎麼解決的
感覺他們可能壓力不小

總共花了2天把一面全部消化完
如果是外地的各位要面試
可以跟人資講盡量安排同一天
不然時間可能會分散

一面結束後過個4天以後就有二面的邀請
分別是藍芽、SSD
(沒想到竟然沒有LTE的...)

面試流程跟一面一樣
就不贅述了
比較特別的是SSD那邊有被問到bitwise operation
這個算是我比較不熟悉的
雖然現場最後有推出來
不過主管貌似沒有很滿意

二面結束後過了一個多禮拜
接到主管的電話告知口頭offer
詢問是否有意願接受核薪結果
有的話將進行書面offer流程

再過兩個星期就接到通知可至公司領取正式offer
感謝上帝