日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

龙芯团队 在移值 MIPS64 下的.NET Core 进度速报

發布時間:2023/12/4 asp.net 71 豆豆
生活随笔 收集整理的這篇文章主要介紹了 龙芯团队 在移值 MIPS64 下的.NET Core 进度速报 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

寫在開始前

我們的主要業務基于 dotnet core 2.x 與 3.1 完成,目前 dotnet core 3.1 支持的 CPU 架構列表中還不包含龍芯,且在 gitlab issue 中表示官方當前沒有對 MIPS 的支持計劃。

更具體操作系統與 CPU 架構列表見 [Download .NET Core 3.1](https://dotnet.microsoft.com/download/dotnet-core/3.1

6月下旬,龍芯團隊宣布在 dotnet/coreclr 基礎上完成了MIPS64 的移植工作 Open-sourcing CoreCLR MIPS64 Port #38069,計劃實現 3.x 版本并貢獻到上游 dotnet/runtime。

按照相關 issue 里的指引,這里對編譯了移值工作,進行了一些測試。

具體的進度

作為下游開發者,想知道距離生產環境使用還有多遠,必須先提及 dotnet core 應用程序的發布/部署方式

1. dotnet core 支持兩種方式的發布/部署

  • 獨立應用(self-contained)

  • 依賴于運行時(runtime-dependent)

前者包含可執行文件(exe),無法跨平臺;后者生成了跨平臺的二進制文件(dll),需要運行環境預先安裝好運行時。關于部署策略的詳細信息,可以參考.NET Core application publishing overview。

發布獨立應用需要針對特定操作系統及 CPU 架構編譯并包含相應運行時,實際開發中我們以依賴于運行時的方式交付,配合預先準備的包含運行時(runtime)的 docker 鏡像完成部署。

微軟官方 aspnet core 示例中的 Dockerfile

# ... FROM mcr.microsoft.com/dotnet/core/runtime:3.1 WORKDIR /app COPY --from=build /app . ENTRYPOINT ["dotnet","dotnetapp.dll"]

2. dotnet core 的組成部分

作為編譯型語言,和 Java 源代碼被 javac 編譯為字節碼再交由 JVM 運行一樣,csharp/vb.net 等源代碼被編譯為內容主要是 IL(中間語言,平臺無關)的 Windows PE 文件(可用于所有操作系統),然后交由 CLR 運行。

dotnet core 由以下若干部分組成:

  • 運行時與框架庫,包含 .NET Core Runtime 與 ASP.NET Core Runtime,平臺特定

  • SDK 和編譯器:開發相關

  • dotnet 命令:啟動 dotnet 應用及作為交互式工具鏈

mono,unity3d 都是運行時實現,在此略提及

由前文的 Dockerfile 可以看到,依賴于運行時的 dotnet core 應用通過 dotnet xxxx.dll 運行,這里有若干層意義:

  • dotnet 提供了 Host(宿主/主機)能力,因為依賴于運行時(runtime-dependent)的 dotnet core 應用并不是可執行文件,需要類似 JVM 的機制運行起來

  • dotnet 以交互式命令將 runtime 與 sdk 集合在一起,成為完整的工具鏈

  • 而 dotnet/coreclr 編譯結果并不包含可執行的 dotnet 命令,運行/測試已發布的 dotnet core 應用有以下選擇

    • 編寫本機/原生代碼,參考 Write a custom .NET Core host to control the .NET runtime from your native code。

    • 使用編譯得到的 corerun,參考 Using CoreRun To Run .NET Core Application。

    當前的交付/部署體驗都是通過 dotnet 命令進行的,獲取該命令需要更多的工作,接下來是龍芯團隊的移值工作的說明。

    龍芯團隊的工作

    龍芯團隊的工作在 19 年 7 月份開始,當時的 dotnet core源碼結構、功能與現在的變更如下表。

    原倉庫移值倉庫功能釋出變更
    dotnet/coreclrgsvm/coreclr運行時源碼
    合并入 dotnet/runtime
    dotnet/corefxgsvm/corefx標準庫源碼2020/7/7合并入 dotnet/runtime
    dotnet/core-setupgsvm/core-setup編譯倉庫2020/7/7合并入 dotnet/runtime
    dotnet/cli
    命令行工具鏈源碼
    合并入 dotnet/sdk

    dotnet/core-setup 比較特殊,它是用來用來編譯 runtime,類庫和宿主程序的倉庫,注意直到這一步 dotnet 命令才終于可用。

    本地編譯 gsvm/coreclr

    龍芯團隊首份釋出的源碼是 dotnet/coreclr。按照社區的溝通記錄,由于依賴復雜,建議基于 docker 進行編譯

    git clone https://github.com/gsvm/coreclr.git cd coreclr docker run --rm -v $(pwd):/coreclr -w /coreclr aoqi/dotnet-buildtools:loongson3a-loongnix-1.0-llvm8ld ./build.sh -skiptests -ignorewarnings release

    注意使用docker manifest inspect可知,鏡像 aoqi/dotnet-buildtools:loongson3a-loongnix-1.0-llvm8ld 僅適用于龍芯操作系統,更多內容請參考 龍芯3A4000 開發機編譯CoreCLR 環境 #6

    作者使用的服務器使用 uname -p 輸出的是 mips64 而不是 mips,前者會導致 gsvm/coreclr 中相關腳本對 CPU 架構的斷言失敗,被相關人士認為違反了分發版本的命名規則,所以后續使用了交叉編譯。

    交叉編譯 gsvm/coreclr

    如果手邊已經有 x64 服務器,基于 docker 進行交叉編譯也是不錯的選擇,我們可以將編譯結果 scp/rsync 到龍芯服務器。

    docker run --rm -v $(pwd):/coreclr -w /coreclr -e ROOTFS_DIR=/crossrootfs/mips64el aoqi/dotnet-buildtools:x86_64-ubuntu-16.04-c103199-20180628134544-upstream-cross-mips64el ./build.sh release ignorewarnings mips64 cross skipcrossgen

    編譯耗時不多,但鏈接步驟需要使用大量的內存,作者最初使用了一臺騰迅云低配主機都在進度 87% 時失敗,更換使用一臺更高配置服務器后編譯成功,相關討論可見于 cross compile failed ...

    交叉編譯 gsvm/corefx

    7月7日龍芯團隊釋出了 dotnet/corefx 和 dotnet/core-setup 倉庫,編譯方法如下,參考 cross-building.md。

    git clone https://github.com/gsvm/corefx.git cd corefx docker run --rm -v $(pwd):/corefx -w /corefx -e ROOTFS_DIR=/crossrootfs/mips64el aoqi/dotnet-buildtools:x86_64-ubuntu-16.04-c103199-20180628134544-upstream-cross-mips64el-corefx ./src/Native/build-native.sh mips64 debug cross ignorewarnings cmakeargs -DOBJCOPY=/usr/lib/llvm-6.0/bin/llvm-objcopy

    本地編譯

    docker run --rm -v $(pwd):/corefx -w /corefx -e ROOTFS_DIR=/crossrootfs/mips64el_loongnix aoqi/dotnet-buildtools:x86_64-ubuntu-16.04-c103199-20180628134544-upstream-cross-mips64el-corefx ./src/Native/build-native.sh mips64 debug cross ignorewarnings cmakeargs -DOBJCOPY=/usr/lib/llvm-6.0/bin/llvm-objcopy

    leoninew 原創,轉載請注明來自博客園

    總結

    以上是生活随笔為你收集整理的龙芯团队 在移值 MIPS64 下的.NET Core 进度速报的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。