色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

OpenHarmony Liteos_A內核之iperf3移植心得

OpenAtom OpenHarmony ? 來源:OpenAtom OpenHarmony ? 作者:OpenAtom OpenHarmony ? 2022-10-16 21:15 ? 次閱讀

開源項目 OpenHarmony 是每個人的 OpenHarmony

蔣衛峰

深圳開鴻數字產業發展有限公司

OS內核開發工程師

一、iperf3工作原理

iperf3主要的功能是測試基于特定路徑的帶寬,在客戶端和服務器端建立連接(三次握手)后,客戶端發送一定大小的數據報并記下發送的時間,或者客戶端在一定的時間內發送數據并記下發送的總數據。帶寬的大小等于發送的總數據除以發送的總時間。對服務器端來說,在連接建立時間內,接收的總數據除以所花時間即為服務器端所測得的帶寬。

iperf3測試UDP的性能時,客戶端可以指定UDP數據流的速率。客戶端發送數據時,將根據客戶提供的速率計算數據報發送之間的時延,客戶還可以指定發送數據報的大小。每個發送的數據報包含一個ID號,用來唯一地標識該報文。服務器端則根據該ID號來確定數據報丟失和亂序。當把UDP報文大小設置可以將整個報文放入IP層的包(packet)內時,那么UDP所測得的報文丟失數據即為IP層包的丟失數據。這提供了一個有效的測試包丟失情況的方法。數據報傳輸延遲抖動(Jitter)的測試由服務器端完成,客戶發送的報文數據包含有發送時間戳,服務器端根據該時間信息和接收到報文的時間戳來計算傳輸延遲抖動。傳輸延遲抖動反映傳輸過程中是否平滑。由于它是一個相對值,所以并不需要客戶端和服務器端時間同步。

由上介紹我們可以知道iperf3的功能增加了操作系統網絡度量的能力,而攜帶Liteos_A內核的OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)操作系統目前還不支持這個功能,特此嘗試把iperf3移植到支持Liteos_A內核的OpenHarmony操作系統中,并作此文分享一些心得。

二、iperf3移植過程

iperf3可以運行在Linux和Windows平臺下,其使用了標準的POSIX接口,因此將iperf3移植到Liteos_A上,目前Liteos_A支持用戶態和內核態的命令,這個也造成了移植的很大困難,所以以下將2種添加命令的方式都記錄下,供讀者參考。

1.確定庫的類型

OpenHarmony有如下幾種目標類型:

executable: 生成可執行文件,對于Liteos_A,在目錄/bin下可以找到可執行文件

shared_library: 生成.dll或.so動態鏈接庫、對于Liteos_A,在目錄/lib或者 /usr/lib下可以找到動態庫

static_library: 生成.lib或.a靜態鏈接庫

group: 生成依賴關系組

action: 運行腳本以生成文件

根據以上幾種類型的描述可知,將iperf3移植成executable類型的組件最為合適。

2.添加庫到工程中

將源碼下載到Linux下并解壓,執行./configure,生成iperf_config.h,將iperf3的源碼拷貝到OpenHarmony代碼庫中合適的位置,如下將iperf3添加到/third_party目錄下。 c5f378f4-4bc1-11ed-a3b6-dac502259ad0.png ? 需要注意的是非內核態的庫不能添加到內核的目錄下,不然編譯和調試過程中相關的頭文件可能找不到。在/vendor/廠商名/產品型號/config.json中的某一子系統下添加組件。 ? d7fc5e94-4bc1-11ed-a3b6-dac502259ad0.png ? 在 /build/lite/components/子系統名.json中添加組件,如下: ? d82294d8-4bc1-11ed-a3b6-dac502259ad0.png ? 3.編寫配置BUILD.gn d84c6cea-4bc1-11ed-a3b6-dac502259ad0.png ? 移植的iperf3代碼目錄下需要提供一個gn文件,指明需要編譯的代碼。此文件可以通過import組件模板函數。一方面,很多引用到的頭文件需要逐個添加到系統BUILD.GN中去,import組件模板函數可以省去很多麻煩;另一方面,頭文件有多個,最終還很難確定是哪一個,使用系統配置好的組件模板函數,可以自動匹配。

4.程序啟動入口:將三方庫添加到shell命令

1) 內核態的shell功能不符合POSIX標準,僅供調試使用,本文特記錄下其添加命令的方法,此方法分為靜態和動態兩種方式,添加方式如下:

① 命令源代碼包含如下頭文件

#include "shell.h"
#include "shcmd.h"

② 靜態注冊命令方式

第一步:調用SHELLCMD_ENTRY(l, cmdType, cmdKey, paraNum, cmdHook),在源文件最后增加這個調用即可。

第二步:在鏈接選項中添加鏈接該新增命令項參數

即在kernel/liteos_a/tools/build/mk/liteos_tables_ldflags.mk中增加相應選項,SHELLCMD_ENTRY的第一個參數前加-u。

此方法添加的shell,在代碼編譯階段就已編譯進去了,其實現原理是利用了編譯器的section特性(也是代碼模塊化的重要手段),將所有shell命令相關功能都放在一段連續的地址空間,將SHELLCMD_ENTRY宏一層層展開,即可得到下面原型。

LOS_HAL_TABLE_BEGIN(g_shellcmd, shellcmd); //段的起始tag
LOS_HAL_TABLE_END(g_shellcmdEnd, shellcmd); //段的結束tag
SHELLCMD_ENTRY(l,cmdType,cmdKey,paraNum,cmdHook)

如下是編譯后生成的map文件中shell段的部分,可以觀察到已經通過此方法加入的shell命令。

d873856e-4bc1-11ed-a3b6-dac502259ad0.png

d8a89baa-4bc1-11ed-a3b6-dac502259ad0.png

③ 動態注冊命令方式

此類方式是在代碼運行階段動態的注冊,osCmdReg本身是一個函數,在命令初始化的源代碼增加此函數調用。

UINT32 osCmdReg(CmdT ype cmdType, CHAR *cmdKey, UINT32 paraNum, CmdCallBackFunc cmdProc)
函數原型在/kernel/liteos_a/shell/full/src/base/shcmd.c 可以找到,基本原理是將動態注冊的shell命令加入到動態shell命令鏈表空間。

2)用戶態的shell不用手動添加

添加目標的方式為executable,將程序下載到目標板上,在/bin目錄下找到可執行的文件,只要在串口助手中輸入 ./bin/可執行文件名,內核即可動態加載可執行的文件(或者輸入exec /bin/可執行文件名)。

三、iperf3使用方式介紹

使用iperf3測試時必須將一臺主機設置為客戶端,一臺主機設置為服務器。在Linux環境或者Windows或者OpenHarmony shell交互窗口輸入iperf3 -h可以獲取iperf3的幫助信息。以下介紹幾種常見的使用方式:

1.iperf3測試TCP

在默認的情況下,iperf3客戶端與指定的監聽5201端口的iperf3服務器建立一個TCP會話。

服務端:iperf3 -s
客戶端:iperf3 -c 服務器IP   (默認測試10秒),使用t來設置測試時間,單位是秒。
例如:iperf3 -c 192.168.99.74 -t 20
運行結果如下: d8c86f34-4bc1-11ed-a3b6-dac502259ad0.pngd8e0a31a-4bc1-11ed-a3b6-dac502259ad0.png ? 2.iperf3測試UDP iperf3測試UDP性能時,客戶端可以指定UDP數據流的速率??蛻舳税l送數據時,將根據客戶端提供的速率計算數據報發送之間的時延。 客戶端還可以指定發送數據報的大小。每個發送的數據報包含一個ID號,用來唯一標識報文,服務器端根據該ID號來確定數據報丟失和亂序。

當把UDP報文大小設置可以將整個報文放入IP層的包(packet)內時,那么UDP所測得的報文丟失數據即為IP層包的丟失數據,這提供了一個有效的測試包丟失情況的方法。

數據報傳輸延遲抖動(Jitter)的測試由服務器端完成,客戶發送的報文數據包含有發送時間戳,服務器端根據該時間信息和接收到報文的時間戳來計算傳輸延遲抖動。傳輸延遲抖動反映傳輸過程中是否平滑。由于它是一個相對值,所以并不需要客戶端和服務器端時間同步。測試過程如下:

服務端:iperf3 -s -p 6868  (設定服務端監聽6868端口)
Liteos_A shell客戶端:./bin/iperf3 -c 172.17.5.159 -p 6868 -u -b 100M
測試結果: d91241b8-4bc1-11ed-a3b6-dac502259ad0.pngd93c2b40-4bc1-11ed-a3b6-dac502259ad0.png ? - Jitter(延時變化):用iperf3 UDP測試來量度 - 數據報丟失:用iperf3 UDP測試來量度

- 帶寬:通過TCP測試來量度

3.反向帶寬測試

服務端使用的命令不變,客戶端需要加上參數-R,在幫助信息中,可以看到-R的信息是run in reverse mode (server sends, client receives)

服務端:iperf3 -s -p 6868
客戶端:./bin/iperf3 -c 172.17.5.159 -p 6868 -u -b 100M -R
測試結果如下: d95c8ef8-4bc1-11ed-a3b6-dac502259ad0.pngd9dbaba2-4bc1-11ed-a3b6-dac502259ad0.png ? 4.同步雙向帶寬測試 客戶端加上命令參數 -bidir
服務端:iperf3 -s -p 6868
客戶端:./bin/iperf3 -c 172.17.5.159 -p 6868-u-b100M-bidir
測試結果如下: da0b84e4-4bc1-11ed-a3b6-dac502259ad0.pngda387260-4bc1-11ed-a3b6-dac502259ad0.png ?

四、注意事項和遇到的問題及解決方法

1. Hi3516有三種下載程序的方式:串口、USB、網口轉USB。推薦使用USB來下載程序,使用串口來調試程序。

2. DevEco Device Tool工具使用USB燒錄Hi3516DV300鏡像時失敗,怎么解決? da570ae0-4bc1-11ed-a3b6-dac502259ad0.png ? 解決措施: 出現這個問題,主要是因為開發者將Device Tool工具安裝在系統盤符,在燒錄大文件時會因為沒有權限導致失敗,可以根據以下操作解決: ●在Windows平臺找到安裝目錄,如圖。鼠標右鍵,選中屬性。 ●?依次操作,步驟5將紅框中兩個選項都勾選上。 ? da6fdcbe-4bc1-11ed-a3b6-dac502259ad0.png ? 3. Hi3516如果攜帶操作系統是支持Linux內核的OpenHarmony,第一次下載時,需要格式化,下載完成后,系統啟動到boot,就不會引導整個系統應用程序,這時需要點擊如下菜單,然后重新拔插USB才能進入整個系統。 ? da9fbb14-4bc1-11ed-a3b6-dac502259ad0.png ? 4. 在編寫.gn文件時,如果三方組件為executable,那么第三方庫代碼中需要有唯一個入口main函數,最終生成一個可執行的命令。 5. iperf有大版本1,2,3,目前最新的是iperf3,不同的版本間命令參數不同,工作機制有所不同,所以在測試時,服務端和客戶端要求使用相同的大版本。例如iperf3服務端不支持iperf的-u,-命令。 6. 在使用iperf3進行測試過程中,需要關閉防火墻,不然可能不能進行正常測試,可以提前使用ping測試一下網絡是否已通。 7. 公司網絡端的控制也會對測試造成影響,如果測試中發現發送和接收到的數據一直是0,則可能是網絡控制端進行了控制,在拔掉外網絡的情況,測試出來的結果就會很穩定。 8. Hi3516主板作為服務端,輸入iperf3 -s,然后在PC機上啟動客戶端進行測試,發現根本不能進行正常測試,原因也是公司網絡控制導致,解決辦法是將要測試的兩個網絡接口,接到同一交換機下,然后拔掉外網的網線,可以進行正常測試;或者需要IT開發權限,當然如果不是在公司特定網絡環境下,這個現象是不會出現的。 9. Hi3516需要設置網絡才能進行測試,可以使用命令ifconfig來設置,例如: ifconfig eth0?172.17.5.253 netmask 255.255.254.0 gateway 172.17.4.1 10. MSS在OpenHarmony的底層LWIP不支持,在iperf_connect函數中調用getsockopt(test->ctrl_sck, IPPROTO_TCP, TCP_MAXSEG, &opt, &len),會通過系統調用到達kernel層中的/kernel/liteos_a/compat/posix/src/socket.c, 最終走到底層LWIP的lwip_getsockopt_impl接口,在level IPPROTO_TCP下,對于分支TCP_MAXSEG,沒有實現,解決辦法是先屏蔽iperf3對此處的操作。同樣在調用setsockopt(s, SOL_SOCKET, SO_SNDBUF, &opt, sizeof(opt))時,SO_SNDBUF分支在LWIP也未實現,先屏蔽此處,將發送緩沖區設置成和接收緩沖區同樣的大小。 11. Liteos_A未實現延時刪除,所以調用unlink時會出錯,目前處理是先屏蔽此處。 12. Liteos_A對fprintf的實現也不如Linux,Windows好,所以對help命令輸出到stdout上,長字串顯示不出來,解決辦法是使用fputs替換fprintf。

五、總結

本文從iperf3的工作原理、移植過程、使用方式、注意事項四個方面介紹了將iperf3移植到支持Liteos_A內核的OpenHarmony操作系統中的方法,希望本篇文章對開發者有所幫助。 關于OpenHarmony內核的內容,之前我還介紹了內核對象隊列的算法、OpenHarmony LiteOS-M內核事件的運作機制,以及內核IPC機制數據結構,感興趣的讀者可以點擊閱讀:《OpenHarmony——內核對象隊列之算法詳解(上)》、《OpenHarmony——內核對象隊列之算法詳解(下)》、《OpenHarmony——內核對象事件之源碼詳解》、《OpenHarmony——內核IPC機制數據結構解析》。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • OpenHarmony
    +關注

    關注

    25

    文章

    3744

    瀏覽量

    16473

原文標題:OpenHarmony Liteos_A內核之iperf3移植心得

文章出處:【微信號:gh_e4f28cfa3159,微信公眾號:OpenAtom OpenHarmony】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    淺談OpenHarmony LiteOS-A內核基礎硬件——中斷控制器GIC400

    OpenHarmony(以下簡稱“OpenHarmony”)采用多內核架構,支持Linux內核的標準系統、LiteOS-A的小型系統、
    的頭像 發表于 10-26 23:00 ?2312次閱讀

    求助,請問esp32的iperf能升級為iperf3嗎?

    請問esp32的iperf能升級為iperf3
    發表于 06-12 06:19

    給路由器安裝一個軟件iperf3的步驟

    telnet登錄路由器,進入工廠模式。 3. cd到要上傳的目錄。 4. tftp -gr iperf3 192.168.2.100。意思:下載 文件名 從PC。 5. ls檢查是否下載成功
    發表于 07-24 06:53

    [HarmonyOS][鴻蒙專欄開篇]快速入門OpenHarmonyLiteOS內核

    。 `Huawei LiteOS`微內核在`OpenHarmony`源碼中所處的位置:3LiteOS的目錄介紹我們以`Cortex-
    發表于 09-14 19:40

    LiteOS-A內核

    更友好的開發體驗。圖1為OpenHarmony LiteOS-A內核架構圖:圖 1 OpenHarmony LiteOS-A
    發表于 04-23 17:10

    OpenHarmony LiteOS-A內核介紹

    內核架構圖:圖 1OpenHarmony LiteOS-A內核架構圖目錄/kernel/liteos_a├── apps # 用戶態的ini
    發表于 08-19 10:46

    給大家分享瑞芯微三款A7芯片liteos_a內核補丁

    1、鴻蒙內核liteos_a移植補丁-支持rk3126c rk3288 rv1126給大家分享瑞芯微三款A7芯片liteos_a
    發表于 09-07 17:36

    OpenHarmony Liteos_A內核iperf3移植心得

    目前還不支持這個功能,特此嘗試把iperf3移植到支持Liteos_A內核OpenHarmony操作系統中,并作此文分享一些
    發表于 10-18 11:32

    LiteOS-A內核中的procfs文件系統分析

    》、《OpenHarmony——內核IPC機制數據結構解析》、《OpenHarmony Liteos_A內核
    發表于 12-08 11:31

    LS1046如何使用iperf3工具測試TCP數據包傳輸?

    LS1046: 我嘗試使用iperf3工具測試TCP數據包傳輸。 找到一些速度為 10Mb/s 的重傳。數據包大小為 60 字節。(網絡鏈接為 100Mbps) ethtool notify
    發表于 05-10 08:07

    LS1046A運行iperf3時出現內核崩潰怎么解決?

    我對內核恐慌有一些疑問。我使用 LS1046A 作為服務器端,我的 PC 作為客戶端。 PC通過telnet輸入命令:iperf3 -c 192.168.1.254 -t 600 -R 經過
    發表于 05-29 08:35

    淺談OpenHarmony內核以及OpenHarmony開發語言

    、java、Python、C++ 等等。 OpenHarmony內核有兩個,一個是liteos_A另一個是lite_M。 要說這倆有啥區別呢?按照我個人的理解大概就是liteos_A
    的頭像 發表于 06-24 09:47 ?4080次閱讀

    OpenHarmony內核是什么

    OpenHarmony源碼里面包含兩個內核代碼,分別是liteos_A和lite_M。
    的頭像 發表于 06-24 10:08 ?3639次閱讀

    【鴻蒙】小型系統LiteOS-A內核

    LiteOS-A 內核 移植概述 移植場景 LiteOS-A 當前支持 ARMv7-a 指令集架
    的頭像 發表于 02-29 16:16 ?1267次閱讀
    【鴻蒙】小型系統<b class='flag-5'>LiteOS-A</b><b class='flag-5'>內核</b>

    iperf3的測試結果中哪些指標最重要?

    iperf3是一個網絡性能測試工具,它被廣泛用于測量TCP和UDP帶寬性能。以下是iperf3工具的全攻略,包括它的基本用法、參數和一些高級功能。 在大多數Linux發行版中安裝iperf3,可以
    的頭像 發表于 12-26 16:07 ?275次閱讀
    主站蜘蛛池模板: 日本又黄又裸一级大黄裸片| 欧美在线激情| 欧美一级做a爰片免费| 5580免费午夜福利院| 精品蜜臀AV在线天堂| 亚洲视频91| 好男人在线视频| 亚洲综合日韩中文字幕v在线| 國產麻豆AVMDXMDX| 亚洲中文无码AV在线观看| 久久成人亚洲| 最近的2019中文字幕国语版| 久欠热视频精品首页| 91av欧美| 日本久久黄色| 国产伦子沙发午休系列资源曝光 | 成人欧美一区二区三区白人| 欧美特级特黄a大片免费| GOGOGO高清免费播放| 日本美女论坛| 国产精品女上位在线观看| 亚洲精品成人久久久影院| 国产最新进精品视频| 在线看片福利无码网址| 嗯啊哈啊好棒用力插啊| 第一福利在线永久视频| 小雪奶水涨翁工帮吸的推荐语录 | 肉肉高潮液体高干文H| 国产精品久久一区二区三区蜜桃 | 性满足久久久久久久久| 久久国产精品免费A片蜜芽| 99re久久热在这里精品| 色偷偷超碰97人人澡人人| 国产午夜三级一区二区三| 依人青青青在线观看| 免费看美女的网站| 国产 精品 亚洲 欧美 高清| 亚洲人精品午夜射精日韩| 免费乱理伦片在线观看八戒| 姑娘视频日本在线播放 | 嫩草影院未满十八岁禁止入内|