Mercurial > hg > Papers > 2018 > tobaru-thesis
diff slide/thesis.md @ 6:3a99fc0296ce
mindmap slide 修正
author | tobaru |
---|---|
date | Thu, 22 Feb 2018 02:31:50 +0900 |
parents | 0aabd94a0126 |
children | 79fb933328ec |
line wrap: on
line diff
--- a/slide/thesis.md Wed Feb 21 15:39:20 2018 +0900 +++ b/slide/thesis.md Thu Feb 22 02:31:50 2018 +0900 @@ -8,6 +8,11 @@ - メタレベルの処理では、メモリ管理、スレッド管理、CPU や GPU の資源管理を記述 することができる。 - 本研究では、ARM で動くシングルボードコンピュータである Raspberry Pi で Gears OS を動かせるようになる事で、ハードウェア上でもメタレベルの処理、並列実行ができるプログラミングを記述できるようになる事を目指している。 +# 実装までの流れ +- RaspberryPi上にGearsOSを実装するために、まずはCbCコンパイラをRaspberryPi(ARM)用に作成する +- その後に、CbCをを使ってxv6というOSを参考にRaspberryPiで動くGearsOSを作る +- xv6 とは ANIX V6 とい う OS を ANSI-C に書き換え、x86 に移植した OS である。xv6 は Raspberry Pi で動かす事ができる。 + # RaspberryPi上でCbCのmake - Raspberry Pi 1 のメモリは 256MB と小さいため、 CbC を make することができない。 @@ -17,7 +22,7 @@ - ninja-buildはコア数を調べて実行するので使わない場合と比べてmakeが高速になる。 # make 時間の比較 -<div align="center"><img src="./images/maketime.png" width="700" height="250" style="center"></div> +<div align="center"><img src="./images/maketime.pdf" width="700" height="250" style="center"></div> # CrossCompile - CrossCompile を行うことで make 時間の問題を解決する方法がある。 @@ -25,23 +30,72 @@ - Raspbian 以外の OS 環境であらかじめ Raspberry Pi で CbC が動くように CrossCompile を行い、その コードを Raspberry Pi に移す事で、実行できるようになる。 - Raspberry Pi の OS である Rasbian は qemu によるメモリの拡張もできないので、別の手法で Raspberry Pi 上に CbC を実装する方が好ましい。 + +# OSX CrossCompile +- OSX上でCbCを実装を試みた +- OSX上でCrossCompileを行うとMach-Oのバイナリが生成される。 +- Mach-oのローダーを作らなければならず、実装は困難である。 + + # Linux CrossCompile - Linux環境でCbCを動かす際にCrossCompileを行なう方法がある。 -- RaspberryPiはARMのコードを生成するので、LinuxでもCrossCompileによってARMのコードを生成すればRaspberry Pi でも実行可能なファイルを作ることができる。 -- C言語で書かれた簡単なファイルをCrossCompileしたコマンドを示す。 +- RaspberryPiはARMのコードを生成するので、CrossCompileによってARMのコードを生成すればRaspberry Pi でも実行可能なファイルを作ることができる。 + + +%# T図形 +% - CbC を Raspberry Pi で動かすためのアプローチの手法をを、I と T の形をした図の組み合わせによって説明を行う。 +% - I の上部分に cbclang や Xv6 などのソースコード名を、下部分にその機能の記述言語を記してある +% - T の上部分は左に入力されるファイル、右に出力されるその機能によって出力されるファイルが記され、下部分にその機能の記述言語が記されている。 +% +% <div align="center"><img src="./images/examples_2.pdf" style="center"></div> + +% # Linux上でのCbCの実装 +% - OSX上に立ち上げられたLinux で CbC のCrossCompileを行う過程を図に示す。 +% - CbCは C によって記述されているため、CからARM形式の.oファイルを生成し、.oからARMのa.outを出力する。 +% - これらはARM形式なのでRaspberryPiで実行できるファイルである。 +% <div align="center"><img src="./images/OSX_Linux_VM.pdf" style="center"></div> + + + +# LLVM/Clang +- CbC には、LLVM/Clang 上に実装したものと、GCC で実装したものがある。 +- LLVM とは任意のプログラミング言語の静的コンパイルと 動的コンパイルの両方をサポートできる事を目的としたプロ ジェクトから始まった、モジューラと再利用可能な コンパイラ とツールチェーン技術の集まりである。 +- Clang は高速なコンパイルを目的とした LLVM をバック エンドとした、C/C++/Objective-C の コンパイラ である。 -```c -./bin/clang -target arm-linux-gnueabi -mfpu=neon-fp16 -marm --I /net/open/Linux/arm/gcc-arm-none-eabi-7-2017-q4-major/arm-none-eabi/include/ - hello.c -c -mfloat-abi=hard -``` +# LLVM CrossCompile +- Makefile に変更を加えることで LLVM/Clang 上に実装 された CbC で Raspberry Pi で実行できる ARM の コードを生成できるようにCrossCompilerを作ったが、動作していない +- LLVMかxv6のどちらに修正が必要なのか分かってないのでデバッガを使って調査していく + + +# KVM +- ARM版のxv6をデバッグするためにKVMを使用する。 +- KVMとは完全仮想化を実現できる機能の事である。 +- 完全仮想化なので、kernelに変更を加えなくても別のOSを動かせるメリットがある。 +- KVMはqemuによって操作を行う。 +- qemu-system-armはRaspberryPiをサポートしていなかったが、KVMを立ち上げるために使うxmlファイルにarch='armv7l' machine='versatileab'を指定する事で、解決した。 + + +# GCC CrossCompile +- GCC は C/C++/Objective-C などを様々な言語をコンパイルすることのできるコンパイラである。 +- GCCで実装されたCbCについてはARMのコードを生成するようにMakefileを作成した。 +% - LLVMと同様に動作していなかったが、GCCで実装されたCbCコンパイラのバージョンをあげる事で、 動作させる事に成功した。 +- Linux上でARMのコードを生成するためのツールチェーンであるgcc-linux-gnuを使う事でxv6をKVM上で動作させる事に成功した。 + + + +# 今後の課題 +- LLVMで実装されたLLVMで作成したxv6が動作しない原因をKVMを用いて調べる。 +- 必要であれば、xv6またはLLVMを修正していく。 +- xv6kernelの構文に沿ってCbCで書き換える部分を考察する。 + # T図形 -- CbC を Raspberry Pi で動かすためのアプローチの手法をを、I と T の形をした図の組み合わせによって説明を行う。 -- I の上部分に cbclang や Xv6 などのソースコード名を、下部分にその機能の記述言語を記してある -- T の上部分は左に入力されるファイル、右に出力されるその機能によって出力されるファイルが記され、下部分にその機能の記述言語が記されている。 + - CbC を Raspberry Pi で動かすためのアプローチの手法をを、I と T の形をした図の組み合わせによって説明を行う。 + - I の上部分に cbclang や Xv6 などのソースコード名を、下部分にその機能の記述言語を記してある + - T の上部分は左に入力されるファイル、右に出力されるその機能によって出力されるファイルが記され、下部分にその機能の記述言語が記されている。 + + <div align="center"><img src="./images/examples_2.pdf" style="center"></div> -<div align="center"><img src="./images/examples_2.pdf" style="center"></div> # Linux上でのCbCの実装 - OSX上に立ち上げられたLinux で CbC のCrossCompileを行う過程を図に示す。 @@ -49,24 +103,14 @@ - これらはARM形式なのでRaspberryPiで実行できるファイルである。 <div align="center"><img src="./images/OSX_Linux_VM.pdf" style="center"></div> - - -# xv6 -- マサチューセッツ工科大の大学院生向け講義の教材として使うために、UNIX V6 とい う OS を ANSI-C に書き換え、x86 に移植した Xv6 OS である。Xv6 は Raspberry Pi に 移植する事ができる。ANSI-C で書かれている Xv6 を CbC に書き直す事で、Raspberry Pi で CbC を動かせるようになる。 - -# LLVM/Clang -- CbC には、LLVM/Clang 上に実装したものと、GCC で実装したものがある。 -- LLVM とは任意のプログラミング言語の静的コンパイルと 動的コンパイルの両方をサポートできる事を目的としたプロ ジェクトから始まった、モジューラと再利用可能な compiler とツールチェーン技術の集まりである。 -- Clang は高速なコンパイルを目的とした LLVM をバック エンドとした、C/C++/Objective-C の compiler である。 - -# LLVM CrossCompile -- Makefile に変更を加えることで LLVM/Clang 上に実装 された CbC で Raspberry Pi で実行できるような ARM の コードを生成できるように実装した。 +# LLVM CrossCompile Makefile - makefileの一部を下に示す。 - CCはコンパイラで、すでにmakeしたCbCのコンパイラを指定している。 - AS(アセンブラ)やLD(リンカー)はarm-linux-gnuに続くコマンドを指定する。 - CFLAGS にターゲットオプションで arm-linux-gnueabihfを指定することで、ARMのコードを生成することができる。 - libgcc + ```c QEMU = qemu-system-arm @@ -87,13 +131,84 @@ LIBS =/net/open/RaspberryPi/rasbian-img/usr/lib/gcc/arm-linux-gnueabihf/6/libgcc.a ``` +# LinuxのCPUコア +- CPUごとのコア数 18 +- 論理プロセッサー 72 +```c ++dalmore+one grep cpu.cores /proc/cpuinfo | sort -u +cpu cores : 18 ++dalmore+one grep processor /proc/cpuinfo | wc -l +72 +``` -# GCC CrossCompile -- GCC は C/C++/Objective-C などを様々な言語をコンパイルすることのできるコンパイラである。 -- GCCで実装されたCbCについてもARMのコードを生成するようにMakefileを実装した。 +# OSXコア数 +```c ++firefly+one system_profiler SPHardwareDataType +Hardware: + + Hardware Overview: + + Model Name: Mac Pro + Model Identifier: MacPro5,1 + Processor Name: 6-Core Intel Xeon + Processor Speed: 2.66 GHz + Number of Processors: 2 + Total Number of Cores: 12 + L2 Cache (per Core): 256 KB + L3 Cache (per Processor): 12 MB + Memory: 16 GB + Processor Interconnect Speed: 6.4 GT/s + Boot ROM Version: MP51.007F.B03 + SMC Version (system): 1.39f11 + SMC Version (processor tray): 1.39f11 + Serial Number (system): YM20300FGWR + Serial Number (processor tray): J515201PEBH8C + Hardware UUID: F6CA8AEA-6A98-53A9-826F-B3A3D465F23B +``` + +# arm1.xml +```c +<domain type='qemu' id='22'> + <name>arm1</name> + <uuid>8028f71a-1db8-40a4-94fa-5a4a42014273</uuid> + <memory>131072</memory> + <currentMemory>131072</currentMemory> + <vcpu>1</vcpu> + <os> + <type arch='armv7l' machine='versatileab'>hvm</type> + <kernel>/var/lib/libvirt/images/zImage-versatile-2.6.24-rc7.armv5tel</kernel> + <cmdline>"root=0800"</cmdline> + <boot dev='hd'/> + </os> + <features> + <acpi/> + </features> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>restart</on_crash> + <devices> + <emulator>/bin/qemu-system-arm</emulator> + <disk type='file' device='disk'> + <driver name='qemu' type='raw'/> + <source file='/var/lib/libvirt/images/arm1.img'/> + <target dev='hdc' bus='scsi'/> + </disk> + <input type='mouse' bus='ps2'/> + <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0' passwd='43u@khii'> + <listen type='address' address='0.0.0.0'/> + </graphics> + <video> + <model type='cirrus' vram='16384' heads='1' primary='yes'/> + </video> + </devices> +</domain> + +``` + +# GCC CrossCompile makefile - CC にarm-linux-gnu-gccを指定することでARMのコードを生成できるようになる - AS(アセンブラ)やLD(リンカー)はarm-linux-gnuに続くコマンドを指定する。 - ```c QEMU = qemu-system-arm @@ -120,10 +235,4 @@ ``` -# 今後の課題 -Xv6 で CbC が動くようになれば、Raspberry Pi 以外のハードウェアでの実装も容易に なるので、Linux 上での実装を目指して研究を進めていく。xv6 で CbC が動けば、続け て Linux 上で Gears OS の実装も行なっていく。 - - - -