IPA 小註解

這裡的 IPA 是指 intermediate physical address. 一般印象中只有 virtual address (VA = 虛擬地址) 和 physical address (PA = 實際地址), 為何又多了不虛不實的中實戶 – 中間實際位址呢? 主要是因為 hypervisor mode 的關係.

首先, CPU 可以透過 MMU (Memory Management Unit) 來完成virtual address 到的 physical address 的映射. 由於需要以位址查位址, 當然就需要有個表格 – translation table. 在 ARM 的 CPU 架構中, 使用 TTBR  (Translation Table Base Register) 來幫忙查詢.

如果 page size 不大, 而 physical address 很大, 那麼就需要使用多層的 page table 分次查詢.  例如 page size = 4 KB, physical address = 1 GB, 那麼 table 就需要 1G/4K = 256 K 個 entry. 分成 3 層表格, 每一層的 entry 數目就會大幅減小. 在這每一層當中所查出來的 “physical address", 因為不是最後的真實值, 就稱之為 level N descriptor PA. 

如果打開 hypervisor mode. CPU 所運行的可能是 guest OS 的 virtual address. 萬一 guest OS 和 hypervisor 的 MMU 映射方式不同, 兩者所看到的同一個 virtual address 就不會是同樣的 physical address 了.

此時需要第二度的轉換 (所謂 stage 2 [ref 1]).  每一次的 level N descriptor PA , 就相當於 level N+1 descriptor 的 IPA, 根據它, 透過  VTTBR (virtual TTBR) 轉出 level N+1 descriptor 的 PA.

因此, IPA 的功能是表彰 hypervisor mode 中的特殊 level N descriptor PA.

[REF]

  1. ARM Virtualization Extensions – Memory and Interrupts (Part 2) – See more at: http://www.futurechips.org/understanding-chips/arm-virtualization-part-2-memory-interrupts.html#sthash.wtHYHshp.dpuf

Android 6.0 記憶卡擴充小註解

雖然 Android 6.0 有了把外部 SD Card 變成內部記憶體的能力, 但是各家廠商都捨不得這個賺錢的法門, 老大哥 iphone 的手機就是用內部記憶體大小定價的啊, 不然 128GB 以後要賣誰? Android 廠商都快活不下去了, 當然比照辦理, 硬是把這個功能給隱藏了. 原本想說 Android 親生的 Nexus 系列總該以身作則吧!? 想不到 Nexus 竟然連插卡功能都不給, 這樣就不能說他們違反 CTS 了.

以 Samsung S7 系列為例, 雖然上個月才出來, 網路上已經有一大堆 adaptive storage (SD card) 的教學, 中文英文都有 [1,2]. 不過按圖施工也不一定會成功, 這邊就讓我來做 debug 的小註解吧!

  1. 首先要備份 SD card, 因為裝好之內內容會被清掉. 卡要選速度快的, 容量愈大愈好. (see 11)
  2. 安裝 adb, Windows / Mac 都可以裝. Windows 裝 adb 的方法很多, Mac 參考這一篇 [3] 的 option 1.
  3. 手機要連到電腦 – 不過我的 Windows 10 從來沒有成功過, 兩台Macbook 都可以. 至於 Windows 8.1 應該沒問題, 因為大部分的人都是用這個環境. 其中要把開發人員選項叫出來, 才能打開 USB debug 功能 [2].
  4. adb devices 要能看到 device. 如果看不到, 可能之一是手機進入休眠, 所以沒點到螢幕上是否同意連接 adb 的選單. 允許之後就  OK.
  5. 如果 adb devices 還是失敗, 請參考 [4].
  6. 進入 adb shell 之後, 大概就可以順利執行 sm list-disks, 長相是這樣: 文字或數字 179.xxx  這個文字或是數字就是 SD Card 的代號. 如果 xxx 不是 0, 後面就簡單了.
  7. 用 sm partition disk:179,xxx private 把整個 SD Card 指定成內部記憶體, 用  sm partition disk:179,xxx  mixed 50, 其中 50 代表切給內部的 ratio.
  8. 可以用 sm list-volumes all 看到所有的內容. 完整指令如下:sm-command-1-620x200
  9. 如果很不幸地, 看到 SD Card 是 179.0, 那麼可能會伴隨各種 Java error…etc. 網路上災情不少. 例如: Error: java.lang.IllegalStateException: java.util.concurrent.TimeoutException: Thread Binder_B gave up waiting for partitionPrivate after 180000ms, 或者
    Error: java.lang.IllegalArgumentException: command ’45 volume partition disk:179:0 private’ failed with ‘500 45 Unknown disk’
  10. 這要麼辦呢? 我想應該是 Java 版本的關係. 當我在第一台比較少用的 Macbook 看到上述第二種錯誤後, 試了各種網路上建議的: 重新 format SD 卡, 改變 USB 連接方式….等等. 但是拿到另外一台 Macbook 卻是簡單地過關.
  11. 這樣做有沒有風險呢? 我認為有, 包括我自己的平台, 以及網路上其他人貼的圖. 系統把實際記憶體高估了, 也就是內部+外部記憶體, 對我來說是 32 + 64 = 96 (GB), 但系統顯示有 128GB, 其中 64GB 已使用 [1-2].
  12. 做了個實驗, 如果是內建 32GB + 外插 128GB, 合併之後, 系統認為總共是 256GB. 所以手機會固定把外部記憶體 x 2 當作總記憶體數. 已使用的部分再細項的部分都是正確的, 但是合併之後的"已使用", 包含虛胖的 128GB (假內部) – 32GB (真內部) = 96GB, 然後再加上真正已使用的部分.
  13. 不過根據 [2], 這個動作可以還原, 所以至少不影響保固.

[REF]

  1. Here’s how to configure adoptable storage on your S7 / S7 Edge
  2. 三星不給你的自己來!Galaxy S7 / Edge 合併記憶卡空間【免 Root】
  3. Installing ADB on MAC OS X
  4. ADB server didn’t ACK

HA, HA1, HA2 小註解

這兩天看到 HA 這個縮寫, Google 也沒辦法得到結果, 幸好旁邊有 HA1, HA2 出現, 總算能夠理解它在講什麼. 當然, 還有其他的 HA (Hemagglutinin – 流感病毒血凝素) 也有 HA1, HA2, 但醫學不是我的領域.

我所要找的 HA 是指 High Availability, 根據 [1], HA 有Nodes、Applications、Networks and Network-Adapters以及Disks and Disk-Adapters四種. 主要是在系統發生錯誤的時候, 由額外的軟硬體來接管出錯的網路系統或是硬碟. 因為至少有兩套系統, 才會產生 HA1 和 HA2 的差異.

那麼系統要多穩定才能叫做 high availability 呢? 有網站 [2] 說是 “five 9s" (99.999 percent) . 只能有十萬分之一以下的出錯機會. 但 MySQL 的網站 [3] 說, 5 個 9 雖然已經到軍事級的穩定, 但複雜的架構並不表示更穩定.

如果設計不良, Shared-Nothing, Geo-Replicated Clusters [4] 架構可能還不如 Replicated Systems. 下表的數字應該是指不同穩定等級對應的恢復的時間. 所謂 replicated systems 就是多備份一份, 例如從 server copy  到 client. Copy 完後, client 未必要一直跟 server 保持同步. Clustered 是指沒有 server 和 client 的差異, 幾台設備自動互相同步.

最後一個 Shared-Noting 是指每一個 node 都有獨立的硬碟、記憶體、甚至是網路. “In a shared-nothing system, each component is expected to have its own memory and disk, and the use of shared storage mechanisms such as network shares, network file systems, and SANs is not recommended or supported [5]".

Geo-Replicated [6] 是指在不同地理位置上做備份, 也就是落實雞蛋不要放在同一個籃子. “data is created or updated in a primary location and then asynchronously replicated to a secondary location so that the same data exists (and is backed up) in both locations. Ideally, these locations remain completely independent of each other, with no need to communicate with one another beyond data transfer." [6]

HA-cost-vs-complexity

[REF]

1. http://isen-blog.blogspot.tw/2008/04/hahigh-availability.html

2. http://searchdatacenter.techtarget.com/definition/high-availability

3. http://dev.mysql.com/doc/refman/5.7/en/ha-overview.html

4. http://dev.mysql.com/doc/refman/5.7/en/replication.html

5. http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-overview.html

6. http://searchwindowsserver.techtarget.com/definition/geo-replication

HDR10 小註解

繼 3D, 4K, 之後, 最近流行 HDR (high dynamic range). 除了亮到讓人眼睛快瞎掉的 Dolby Vision 之外, 還有簡單版的 HDR10. 根據 [1] 的說法,  CEA (Consumer Electronics Association) 規範要符合以下的條件才算支援 HDR10 (CEA 861.3):

  • EOTF: SMPTE ST 2084
  • Color Sub-sampling: 4:2:0 (for compressed video sources)
  • Bit Depth: 10 bit
  • Color Primaries: ITU-R BT.2020
  • Metadata: SMPTE ST 2086, MaxFALL, MaxCLL

其中, 一定要支援  10 bit 就不用說了, 不然怎麼能叫 HDR 10. Color format 要支援 4:2:0 也很容易理解, 大部分的 video decoder 都支援 420. 至於 EOTF (electro-optical transfer function), 如字面上所說是電光轉換. 也就是一個視訊的強度 (10~12 bit), 要如何對應到電視上的亮度 (0~10,000 nit = cd/cm2). 

在薄薄 14 頁要賣 50 美元的 ST 2084 規格中, input linear color value L 和 output optical value C (單位是 cd/cm2) 可以有線性對應: C = 10,000 x L. 以及非線性的對應公式.

根據 Barten Ramp (BT.2246) [2], 亮度極低時, 對比不重要. 亮度極高時, 人類對對比的感覺飽和. 粉紅色部分是人類看得到的, 淡綠色是人類看不出來的. 縱軸是每個灰階佔多少百分比. (我推了一下, 這百分比應該是非線性的量化, 日後再補充.) 這條 Barten Ramp 大概落在 10 bit 左右. 所以不到 10 bit 就不算是 HDR.

Barten-Ramp-768x462

接下來, 看一下 BT. 2020. 它是下圖黑色的三角形, 而我們一般的 HDTV 所用的 rec. 709, 則是黃色的小三角形. 而整個彩色的部分, 就是人類可以看到的色域 (color space). 那麼下圖的 x, y 又各是什麼呢?請參考 CIE 1931 color space [3], 其實它是三維的 XYZ. Y 代表亮度 (luminance), Z 是人類對藍色訊號的反應 – 也就是人眼 S cone 細胞的反應. X 代表 cone 細胞的非負反應的線性組合. 據說 XZ 就可以代表人類對顏色的反應.

bt709and2020

不過, 講了半天. XYZ 怎麼變成 xy 了?因為我們現在談色域, 所以亮度就不重要了. 重新定義 x = X / (X+Y+Z), y = Y / (X+Y+Z). 那麼 z = 1-x-y 可以忽略不談, 我們知道 xyz 和 XYZ 可以互轉. 最後我們就用 x, y 來表示整個色域, 靠近紅色的部分是 x 大 y 小. 靠近藍色是 x 小 y 小, 靠近綠色是 x 小, y 大. 上圖把波長 (單位 nm) 都標上去了.

總而言之, HDR BT2020 必須是大黑三角形這裡面涵蓋的顏色. 啊!為何有時叫做 BT 2020, 有時叫做 Rec 2020 呢?因為 BT 是 ITU-R 的分類, Rec 是 Recommendation ITU-R BT.xxx 的起始字, 所以兩者是同一個東西.

接下來解釋 meta data, 在更薄沒有更便宜 – 還是 50 USD, 只有 6 頁厚的 st 2086 裡面規範了, meta data 要包括一個 display primaries 描述色域圖 (color space) 上三個點頂的座標, 以及一個白點 (white point) – 上面的色域圖中間最白的那一點就是了. 這幾個數字都要精確到四位小數.

最後 metadata 需要描述 luminance 的最大值和最小值  (單位是 cd/cm2), 需要四位數字和兩位小數. 因為影片若不包括 luminace 的訊息, 光是看到 YUV 的 10 bit 也無法反推此數字. 因此在片源 (bit stream) 中 必須把這個值保留在 VUI/SEI, 才能傳給電視知道.

[REF]

  1. http://www.flatpanelshd.com/news.php?subaction=showfull&id=1441170458
  2. https://www.smpte.org/sites/default/files/2014-05-06-EOTF-Miller-1-2-handout.pdf
  3. CIE 1931 color space

Lot26 小註解

以前我只聽說過 Energy Star 這種功耗標準, 最近多聽到了 Lot 26.  

因為有些人又想省電, 又想要用 WIFI 喚醒網通設備, 使得網通設備在待機中也必須維持無線網路醒著. 元件一旦醒著就需要耗電和漏電, 0.5W 待機功耗當然就達不到了, 歐盟於是推出這個新規範. 適用 Lot 26 的產品包括: PC, NAS, …等等.

在 2015/1/1, Lot 26 的待機功耗規範, 在高網路可用狀態 High Network Availability (HiNA) 是 12W, 非高網路可用狀態是 6W. 2017/1/1 之後, 這兩個數字變成 8W 和 3W [1]. 

那麼什麼是 HiNA? 有中和低網路狀態嗎? 有的, 0.01 秒以內可以反應叫做 HiNA, 0.1 秒以上才能反應叫 LoNA, 介於兩者之間是 MeNA [2] (see page 5).

各位會想, 既然既然有 Lot 26, 有沒有 Lot 1,2,3…等等? 也有, 請參考產業整合永續發展整合資訊網站 [3]. 舉凡電腦、冰箱、洗衣機都各自有規範在.

[REF]

  1. http://www.eceee.org/ecodesign/products/Lot26_networked_standby_losses
  2. http://www.eceee.org/ecodesign/products/Lot26_networked_standby_losses/Comments_DIGITALEurope_final_report
  3. https://proj.ftis.org.tw/isdn/Norm/Detail/D40E6CFB18DCCEE4?parentId=2B8508DCA18D2159