Cache Aliases 小註解

有一個有趣的問題: 假如 cache size 是 8KB, 而 virtual memory 的 page 是 4KB 會怎麼樣? 這個就是  cache alias的問題.

根據新版的 “See MIPS Run" 這本書的 10.3.4 Cache Aliases and Page Coloring, 名詞定義是這樣:

1. index range = the size of one “set" of cache. 舉例來說 4 KB 的 page 可以對應到 8KB 的 direct map, 或是 32KB 的 4-way set-associative cache.

2. page color = the value of those one or more virtual address bits that choose a page size chunk within the propriate page set.

3. cache aliases = two virtual pointers to the same physical data can produce an alias only if they have different page colors.

若是把 32KB 4-way associative cache memory 看作 4 塊 8KB 的 cache memory, 那麼每一塊都比 4KB page 大一倍, 一抓就有機會抓到和另外一個 way 重疊的內容. 

解法: 只要 virtual address 彼此距離夠遠, 比方說在 4KB page 下間隔 64KB, 那麼每個 page 的 color 都會一樣. 

另外有人說, 可以讓 virtual address 的 bit 12 (假設 page 是 4KB, 12 bis) 強制和 physical address 的 bit 12 一樣, 也就是說每 8KB 的第一個 4KB, 和第二個 4KB 在 physical address 上都沒有重疊. 由於每一個 way 不會抓到一樣的東西, 這就確保了兩個 way 之間的 cache 不會重複. 它聽起來等效於 page size 變成 8KB, 所以應該會沒問題.

先不管軟體實作上的困難, 這種 work around 的 hit rate 將會很低. 每次 hit 到奇數 page, 就要連前一個偶數 page 都抓進來. 那些資料通常已經是過去式了, 所以 cache 的效率應該挺差的.

 

——————————————————–

20090320 重新整理

cache alias 可能發生在 Linux user mode 之間, 也可能發生在 user mode kernel mode 之間.

單純在 user mode 的解法有很多種:

1.  只要 virtual address 彼此距離夠遠, 比方說在 4KB page 下間隔 64KB, 那麼每個 page color 都會一樣均勻, 如小魚的第一個回覆一樣

2.  根據小魚的說法: 奇數 8KB (i.e. 4(2n+1)KB) 和偶數 8KB (i.e. 4(2n)KB) physical address 都對應到不同組的 virtual address. memory cache 既然是根據 virtual address  所做的, 那麼就沒有機會 cache 到重複的  physical address.

有人說用這種說法: “可以讓 virtual address bit 12 (假設 page 4KB, 12 bis) 強制和 physical address bit 12 一樣, 也就是說每 8KB 的第一個 4KB, 和第二個 4KB physical address 上都沒有重疊. 由於每一個 way 不會抓到一樣的東西, 這就確保了兩個 way 之間的 cache 不會重複. 它聽起來等效於 page size 變成 8KB, 所以應該會沒問題.

為了 hit 8KB 裡的一個 Linux 4KB page, 現在必須抓 8 KB cache. 和原來的方式相比, 原來讀到 0x80001-000 的時候, 我們 cache 0x80001-000~0x80002-FFF, 是指望後面進到 cache 0x80002-000~0x80002-FFF 這個 page 等一下會用到. 根據新的方式, 就會變成 cache 0x80000-000~0x80001-FFF 8 KB. 所以還是會有一些差別, 如小魚第四篇回覆所說的: " 0×00410_000 0×00411_000 是無法同時對到 0×40400_000 “. 

本來我有個直覺, 覺得分了類之後, 對於大量連續資料, 又放在虛擬記憶體的連續位置時, 上面的做法可能會降低效率. 但想想也只是 cache 到不同 way cache memory 去了, 應該是還好.

[後記]

1. Kernel space user space 存取同一個 page 的話, 也會有 virtual alias 的問題.

2. 還是要感謝小魚啦!

    

[網路謠言] Dolby AC3 專利快到期了?

根據網路謠言的說法, Dolby AC3 的專利快到期了, 明年大家可以隨便用…

由於美國專利的年限規定, 大約是 17~20 年, 詳情請看 http://www.patent-tutorial.net/node/1114. 所以今年到期的美國專利, 應該是 1992 年獲准, 或是 1989 年申請的. 那麼, 謠言來源應該是針對這兩個專利吧!

“Low bit rate transform code, decoder, and encoder/decoder for high quality audio", USA Patent 5,109,417 and 5,142,656.

不過以網路上的合約範本 (Dolby Digital v.s. Sony) – http://contracts.onecle.com/sonic-foundry/dolby-license-1997-07-28.shtml (網路上真是甚麼都有), 他們簽約的時候, Dolby 授予對方的權利包含下面這些專利, 難道每一隻都過期了嗎?

好像沒有! 剛好只到 5,142,656 會在今年過期. 其中 5,235,671 竟然是 GTE 的專利, 而不是 Dolby 的.

回過頭來看, 爆料者似乎爆過頭了. 萬一大家都亂用 AC3 的專利, 然後被 Dolby 告得半死. 那麼散布此謠言的人, 也沒有好處啊?

其中, Dolby 也有申請台灣的專利. 在歐洲也有好多個同號碼的專利, 假如專利號碼不像電話號碼的可以選號的話, 應該只是互相承認的專利, 然後再不同國家之下都掛一次, 充充場面的吧!

PATENTS
                                    ——-
                   
          Country                              Patent Number
          ——-                              ————-
                                            
          Australia                                631,404      
          Australia                                644,170      
          Australia                                649,786      
          Australia                                653,582      
          Australia                                655,053      
          Australia                                655,535      
          Austria                                  0 524 264      
          Belgium                                0 208 712      
          Belgium                                0 481 374      
          Belgium                                0 524 264      
          Canada                                 1,239,701      
          Canada                                 1,301,337      
          Canada                                 2,026,213      
          Denmark                               0 208 712      
          Denmark                               0 481 374      
          Denmark                               0 524 264      
          France                                   0 208 712      
          France                                   0 455 738      
          France                                   0 481 374      
          France                                   0 524 264      
          Germany                                690 060 11.4    
          Germany                                691 078 41.6    
          Greece                                   0 524 264      
          Italy                                       0 208 712      
          Italy                                       0 524 264      
          Netherlands                            0 455 738      
          Netherlands                            0 524 264      
          Spain                                     0 524 264      
          Sweden                                  0 524 264      
          Switzerland                             0 524 264      
          Taiwan                                    52,047      
          Taiwan                                    53,726      
          Taiwan                                    56,006      
          Taiwan                                    60,430      
          United Kingdom                         0 208 712      
          United Kingdom                         0 455 738      
          United Kingdom                         0 524 264      
          United States of America               4,790,016      
          United States of America               4,914,701      
          United States of America               5,109,417      
          United States of America               5,235,671      
          United States of America               5,274,740      
          United States of America               5,291,557      
          United States of America               5,297,236      
          United States of America               5,357,594      
          United States of America               5,394,473      
          United States of America               5,463,424      
          United States of America               5,479,562  

關於 ETSI (歐洲電信標準協會)

ETSI 全名 European Telecommunications Standards Institute, 功能是制定歐洲電信業的標準, 網址是 www.etsi.org/.

我們可以用它的搜尋功能, 找到對應的規格. http://pda.etsi.org/pda/queryform.asp

只要註冊 e-mail, 就可以搜尋、下載所需要的文件. 每次 download 一個文件, 它就會寄一封到你的註冊信箱. 只要你回信, 他就不會再寄信了. 但是若你 download 了 3 個文件, 都還不回信, 下載的功能就會被封鎖住. 大概是防止機器人吧??

下載的文件有 PDF 和 word 兩種格式, 而且它的頻寬似乎相當大, 速度挺快的.

我比較有機會接觸到的是電視相關的規格, 而 ETSI 的涵蓋範圍包括以下這些:

Technologies

歐洲的下一代數位電視廣播音訊標準 (Next DVB – Audio Standard)

由於歐洲國家的地面廣播向來各行其是, 因此在規格上比較混亂. 到了數位廣播的時代, 大家的看法也沒有太收斂. 因此幾個不同聯盟都出來制定規範.

根據 EBU (歐洲廣播聯盟) 的文件, 他們把 broadcast chain 分得很細, 包括 production, contribution, distribution 和 emission 等階段. 每個階段又分成 radio, television 和 internet 等不同的應用.

Production: 節目製作.

Contibution: 從 OB van (outside broadcast van, 戶外轉播車) 傳到 broadcast house.

Distribution: 從 broadcast house 到 playout.

Emission: 從 transmitter 到 receiver. 指無線廣播.

經過 phase 1 的篩選, phase 2 只剩下這幾個標準被留下來:

Dolby Digital

Dolby Digital Plus

MPEG Surround Layer 2

AAC/HE-AAC

DTS/DTS-HD

由於 EBU 所制定的規範管不到 home theater, 所以在規範中增加了 transcoding 的條件. 亦即非典型的 AAC, DD+ 之類的 decoder, 不能直接用 raw data 輸出, 要先轉成 DTS 的 1.5 Mbit/s 或 Dolby Digital 的 448 kbit/s. 這樣可以使得舊式的 AV receiver 延續生命, 而不會被民眾痛罵到昏頭.

在評比項目當中, 除了聽覺品質的之外, 實際的壓縮 bit rate 也很重要. 比方說系統給 256 kbps, encoder 老是會多壓出 0.1 kbps, 這樣的系統也會掛掉. 相對地, 無法達到所要求的 bit rate 也不行 (the quality performance cannot be achieved if the bitrates used are not sufficient. ).

最後的評比結果, HE-AAC 可說是大獲全勝. 在 128 kbps 的 extra low bit rate, 還是能夠得到 good~excellent 的評價. HE-AAC 壓在 160 Kbps 的品質, 和其他 decoder 在 320 kbps 表現得一樣好 (除了在一個名叫 “applause" 的 file, HE-AAC 怎麼壓都是 fair 之外, 其他都是  excellent).

相對的, MPEG Surround 雖然用到了一些先進技術, 但是被評價為不合  TV broadcast 的水準, 只能用在 DAB 之類的場合.

根據 Dolby 所提供的資料, 他們自稱 Dolby Digital 和 Dolby Pluse 是在這個測試中表現最好的 decoeder. 其實呢? DTS 的分數在 phase 1 是最高的. 不過這是一場不公平的比較, DTS 用的 bit rate 是 Dolby 的 3、4 倍之多, 因此 phase 2 根本就沒有人和 DTS 一起比較, 算是無視它的存在!

EICTA (Eroupe Information and Communication Technology Industry Association), HD Forum (法國), Nordig (瑞典、挪威、冰島、丹麥、芬蘭), Spanish HD Forum (西班牙), Italian HD Forum (義大利) 這些國家都選了 Dolby Digital PLus HE-AAC + tanscoding 作為他們下一代的 audio 廣播標準.

在某些場合, HE-AAC 的名字可能會被 Dolby Pulse 所取代. 因為打不過 HE-AAC 的 Dolby, 已經把它收錄旗下, 換個名字. 加一點料 (metadata) 後, 重新包裝成自家的產品. 這招著實利害!