# 祥瑋程式 * 安裝過程遇上的問題: * Q1: 使用requirements.txt安裝會跳出**python 3.7.0版本過低**的錯誤。 * A: python 3.7.0 => python 3.7.6 * Q2: 安裝過程出現 **ERROR:Failed building wheel for mpi4py**。 * A: 程式碼並沒有用到mpi4py,所以**將requirements.txt裡的mpi4py==3.0.3移除**。 完成上列兩件事後可照[Github](https://github.com/ice1757/dqn-cache-replacement)開始測試。 # 實驗1:DQN與LeCaR比較 (註:[DQN](#DQN概述)為本篇方法,[LeCaR](#LeCaR概述)為DEAP提供) 本章使用本篇方法**DQN_trace**和**DEAP_trace**做比較 ## 實驗1結果(命中率): * DQN_trace * snm_50_l9666.txt (cache_size=10) * DQN: 62.09% * LeCaR: 64.18% **(win)** * zipf_50_9000_cps.txt(cache_size=10) * DQN: 55.73% * LeCaR: 58.62% **(win)** * zipfc2_50_9000_cps.txt(cache_size=10) * DQN: 43.04% * LeCaR: 45.19% **(win)** * DEAP_trace * grep.csv(cache_size=10) * DQN:由於object數太多無法執行(2^32^個相異object) ![image](https://hackmd.io/_uploads/Bydl4PJAp.png) * LeCaR:35.36% ## 實驗1記錄: 方法:把同一筆trace格式做轉換後分別丟入DQN、LeCaR並記錄結果。(例如:將[DQN_trace格式](#DQN_trace格式)轉成DEAP_trace格式) ## 實驗2 調整zipf_para , content type , cachesize 測試 兩者經過實驗看起來LeCaR略勝一籌原因有下面幾點: - 雖然實驗兩者勝利次數都是12次,但就執行時間來看 LeCaR只需要不到一分鐘,而DQN最久的一次測試需要2.5小時,且如果參數(content_type, cache_size)調大,會使記憶體使用量和執行時間大幅提升以致無法測試。 - zipf_trace ![image](https://hackmd.io/_uploads/Sks99x-10.png) - SNM_trace ![image](https://hackmd.io/_uploads/HkfJU4XM0.png) ## 實驗2紀錄: 實驗問題: - 只要cache size大 或是content type大,DQN方法就會需要佔用非常大量的記憶體,所以很多實驗沒辦法跑。比如:z2_10000_1000(參數_內容數量_快取大小)需要3.64TB記憶體空間 - 如果要重現實驗要記得把虛擬記憶體空間條大,目前測試調成64G - 有些trace會出bug,目前還不知道原因,但可以透過從新製作相同參數的trace搞定。 ![image](https://hackmd.io/_uploads/r1GX8u00T.png) 實驗3: 有問題的Trace: --------- # 附錄(以下都是補充 不用看) ## DQN概述 * State:(頻率排名,親近度,長期頻率,中期頻率,短期頻率,請求內容,請求內容大小,快取中內容,快取剩餘空間) * 頻率排名:從請求開始到目前為止的request次數排名,次數越多排名越高。 * 親近度:自從上次request以來經過的time step * (短,中,長)期頻率:觀測區間使用頻率,從目前時刻往前看1N~C~ , 2N~C~ , 3N~C~步的使用頻率。 * 請求內容: * Action * Reward ## DQN_trace格式 分為兩個資料**req_trace**和**req_data**,前者儲存**請求序列**、後者儲存**object的大小資訊(object,Size)**。 ## LeCaR_trace格式 req1(換行) req2(換行) req3(換行) .... ## 學長request解釋 - Dyna-Zipf-1 - 可調參數:zipf參數、流行度排名。 - 固定**zipf參數**,但**流行度排名**會在三個時間點發生變化 - Dyna-Zipf-2 - 可調參數:zipf參數、流行度排名。 - **Zipf參數**和**流行度排名**會在三個時間點變化。 - SNM(Shot Noise Model) - 可調參數:req_kind - Zipf補充 - zipf參數: - k=排名、z=zipf參數 - 不同排名k的object使用頻率為(1/k)^z^ - z越大,不同排名object的使用頻率差距越大。 例如:**排名1的object**的使用頻率占比越高。 ![image](https://hackmd.io/_uploads/SkDFmgDCT.png) - 流行度排名: - [1,2,...,n]用np.random.permutation將順序打亂。 ## 代辦 * ~~看懂DQN_trace格式~~ * ~~把LeCaR跑起來~~ * ~~看懂LeCaR_Trace~~ * ~~轉換的程式~~ * 蒐集CDNs trace * 看懂CDNs trace格式 * 觀察大部分CDNs 有什麼特性(看看有沒有什麼可以利用的 比如zipf,object_size) * 看懂LeCaR程式碼 * 做簡易admission LeCaR * 搞清楚目標是什麼 比如說訂好一個QoS評分.因為在CDNs也不確定是不是命中率最重要,因為只要塞小object命中率自然會高 那大object好像就被忽略了,會不會有缺點。 * 思考重用距離套在LeCaR * 思考對size分部建模 * 思考能不能利用zipf特性改善LFU效果,因為LFU就是在把頻率高的囤積起來。 * https://github.com/sylab/LeCaR * 生測試資料 * "相異object數=(50,100,500,1000,5000,10000,50000,100000)" 8種 * zipf-1:(object數 8種)*request數 * zipf-2: * snm: * content_size:([1:0:0],[8:1:1],[1:1:1])*"相異object數=(50,100,500,1000,5000,10000,50000,100000)"