[筆記] 虛擬化技術

前提概要

本課程為暑期開課,產學合作的課程。暑期上課各種虐待,反人類行為。

Day 1 虛擬機技術簡介

虛擬化不外乎就是在同一個硬體執行環境下,同時模擬出多個的執行環境,當然不外乎模擬的行為都是間接對機器硬體執行,因此許多指令需要被轉譯,或者是多好幾個步驟來做轉換,因此效率上一定會慢許多。

虛擬化的好處在於,根據硬體的汰換率在維護的費用,每隔固定一段時間就必須增加硬體來服務新的需求,如此一來必須要有更大的空間和電費來部屬伺服器。而且每一台伺服器的功率沒有一直維持高效佔有 (即使 CPU 使用率不高,用電量也不會下降多少,貌似 10% 不到,可以說是少得可憐)。倒不如來整合硬體,根據需求進行分配,同時可以讓需要的空間縮小、電費下降,做到整合到同一台機器上運行,就需要虛擬化的技術。

虛擬化技術分很多層面,最常見的就是在 Host OS 上開始虛擬化的軟體,如 VMware workstation, xen 之類的,在上面可以掛載很多不同的作業系統 Guest OS 執行。在全虛擬化的情況 (如上述),與一般使用個人電腦沒有什麼差別,所以非常容易入手。半虛擬化效率上又比全虛擬化來得高,在硬體需求上部分不使透過軟體進行,可以在高效率的情況下接軌。

在虛擬化的另一個最常見的就是 JVM,這是在 Application 面向的虛擬化,Java visual machine,提供跨平台等服務,這麼看起來虛擬化無所不在。

虛擬化有幾個困難之處,從經濟面向來看,一開始的轉移到虛擬階段和虛擬化的授權費用太高,畢竟不是所有虛擬化的技術都是 open source。從技術層面來看,虛擬化必須針對硬體做銜接,因此有時候必須靠有限的資源進行組合,才能完成虛擬化的單一功能,因此在初步階段,還必須看 Intel 等硬體架構,是否有考慮虛擬化的設計。在現今,已經有根據虛擬化進行設計,虛擬化也更為普及。

在周邊設備上,虛擬化的架構設計也相當重要,因此部份廠商也搭配他們的驅動程式 driver 進行修改和開源,來方便虛擬化的製作。

但也不是所有情況都適合虛擬化

  • 大量計算程序
  • 本身的 CPU 就一直維持滿載
  • 大量 I/O 的程序
  • 原本的執行環境沒有辦法虛擬化 (虛擬化廠商沒有針對其設備)

虛擬化還必須搭載四個主要的功能:

  • 多工
  • 狀態儲存
  • 狀態復原
  • 狀態遷徙 (無延遲服務)

虛擬化技術仍有安全疑慮,如何確保資訊安全和風險保證?

平常 VMware workstation 開啟就佔了相當記憶體資源 Orz

Day 2 軟體測試與 VM 測試

用 code coverage 來決定測試好壞,是否能逆向找到 code coverage 的測試情況。

這一天的內容已經在做專題的時候,由指導教授講了好幾次,概念上差不多能理解一大半。

重點為軟體工程的運行面向

  • debug
  • test-driven develop
  • continuous integration

正常大學不會教這些軟工概念,因此在大學畢業進入職場,挺多公司還是會給一段時間來訓練這些運行模式。來教導開發方式和其價值所在,催促人做事必須先教導其價值。

debug 技術而言,從海森堡 BUG、薛丁格 BUG … 等,都是相當有意思的。《BUG 的類型》,知道 BUG 也不見得能修好,這就是現在的情況,而有些 BUG 只會在高階 (過度) 使用者身上才會見到,軟體公司甚至不會想去修 (看看邪惡的微軟便是如此)。從 printf() 開始抓 BUG 的初學技巧,演化到加入中斷點來程序慢慢清除,用 assert() 來防止不符合規格的輸入,用 #ifdef DEBUG 使用 b2g system program 來查閱狀況,雖然不太善用這些技巧,但是 assert()#ifdef DEBUG 偶爾在無法一次掛載在腦部的時候就會採用。

很慶幸,在大學畢業前還有用過這些技巧來 DEBUG,雖然只是在單純的 ACM 解題上使用。

test-driven develop (測試驅動),這在敏捷開發這套軟工方法中談到。比起程式代碼,測試資料更令人可貴,這也是為什麼挺多大學的開發團隊會藉由參加大型比賽測試資料,來拿不容易收集到的測試資料,單純只是為了測試資料而參加比賽,當然最後主辦單位最後改階段式比賽來發送資料,以免選手罷賽拿資料。

continuout integration (連續整合),從一部分一部分的代碼中,階段式完成並且測試,確保每一步都是對的,相關的工具很多,來知道每次整合遇到了什麼問題、現在改善什麼 BUG,歷史情況是如何 … 等。

詳見敏捷開發

Day 3 工業電腦虛擬化技術簡介

這一天內容與 Day 1 類似,不過更詳細說明這門課程如何運行,不過看似就會活不下去, 3 人一組在 2 個星期後期中考、4 個星期後期末考,必須要完成的 Final project。

升大四修碩班課程果然還有點落差,問題在於資源上沒有實驗室的協助,要怎麼將實習課所需要的虛擬機器的伺服器弄出來?助教講得很輕鬆,真正有資源來完成要求的人卻很少呢。

  1. Github 使用
  2. RedMine 協助

第一點有在用,但是不專精,對我來說目前只當作是垃圾倉庫使用中。還真是慘不忍睹。

Day 4 軟體容錯 與 NCU - FTVM

  1. 虛擬容錯的處理器環境要相同,是否是相當嚴苛的條件,而這個容錯只在於軟體掛點的時候,轉移狀態給另外一台虛擬機進行程序接手,在存取空間是共用的,因是為存取空間的備份不容易完成嗎?
  2. 由於容錯功能不能與許多功能兼容,是否會造成無法長時間處於容錯狀態?
Read More +

大學專題紀錄 Universities Project

Morris’ 大學專題

前言

大學專題時間為期一年,分為上下兩學期習滿才能畢業,但有些科系不是,但多少資工系基本上都是的,沒有修過專題,就相當於只是寫學校作業!如何研究與邁向下新的目標,這將會是專題給您的經驗。

怎麼選專題教授

首先,先來區分教授類型。

  • 自由放任型
    您的專題將會任您發展,同時也是掛名的教授,相當建議有想法的同學們去選,畢竟想做想學的事情可能很多,中間變卦也是常有的事情,但您必須真的有去學到知識的衝勁。但有自主學習動力的人少之又少,更別說學習目標的定論,如果您是那種不管課業上什麼,都會額外深入學習者 … 或許您有那股潛力。
  • 學術研究型
    您將會開始看論文,並且實作和學習。身邊人沒什麼聽聞。
  • 產學合作型
    您將會用基礎程式和教授專長去討論做出相關產品,至於有沒有深入了解產業需求和教授專長領域又是另一回事情了。這是最有可能產出作品的,如果想要在面試中講講大學做了什麼成果,大概這是最有機會的一群。
    但是必須得明白,有作品不見得是好事,也就是說沒有實質學習和產出品質,也只是陡增垃圾。
  • 業界指導型
    相較於產學合作,告訴您宏觀的慘業現況,並且指導走入業界環境,突破學習的局限與個人思維,通常是屬於資訊系所中偏向軟體開發教授們的領導風格。

選教授要看個人性格,如果平常不怎麼專注於學習者,就跟著最要好的小夥伴們選吧。

而雖然對於 ACM 算法競程稍有經驗,可能就會被旁人認為要去玩學術研究,不過學術研究也是相當嚴苛的一條路,沒有想法沒有產出,那可是會逼死人的,只有一年的學習專題(當然有人會無限延長),最後選了軟體工程來玩玩,結果沒想到跟以前所寫的 ACM 那套可說是八字相剋。

於是漫長的旅行就開始了 …

何時修專題課程

專題要不要產出

很多人一直都想要有個成果發表展之類的,或者是可以張貼海報展覽的機會,看起來會留下美好的紀錄,且認為相當有機會在面試的時候被提及,以免被問到時,什麼都沒有得說。

但是請自行思考,這是唯一的成果製造流程?

進度狀況

  • 上學期為軟體工程圍觀

    • 程式基礎-物件導向,軟工產業介紹

      只會寫學校作業是不夠的,產業界要的不是這種人。

    • 修習物件物件導向課程
      雖然以前修過物件導向,但是相當輕描淡寫,真正應該是要學到 Design pattern 、資料表單的建造後,才算學過物件導向,否則只是濫用三大利器繼承、多型、封裝。

      學過、學會、應用 乃屬三個階段,少自以為是。

    • 工具的重要性

      如何用好工具將會給予後期強大的助力開發。

    • 開發前奏曲 prototype 的製作與重要性
      與業界需求產出網頁 prototype,使用 JQuery, HTML。

      相當慘淡,經驗沒到,思維不足,無法造出需求結果。

  • 下學期為軟體工程入門

    • 跟著 Mozilla 導師們學習
      • Sprint meeting
      • GitHub
      • Nodejs
      • FirefoxOS - gaia // 環境卡太久,什麼都還沒學到就胎死腹中

階段性

學習條目

結語

Read More +