我目前正在研究我的論文項目,設計一個與最短路徑圖算法一起使用的緩存實現。圖算法與運行時相當不一致,因此對整個算法進行基準測試太麻煩。我必須專注於僅對緩存進行基準測試。使用大數據進行微博標記
我需要基準的緩存是關於Map
接口的十幾實現。這些緩存被設計爲與給定的訪問模式(從上面的算法查詢密鑰的順序)一起工作良好。但是,在一個「小」問題的運行中,有幾千億個查詢。我需要運行幾乎所有人對基準測試結果充滿信心。
我有關於將數據加載到內存的概念性問題。可以創建一個查詢日誌,該日誌只是在算法的一次運行中查詢的所有密鑰(它們是10個字符的字符串標識符)的磁盤有序列表。這個文件是巨大的。其他的想法我會打破記錄成1-5萬次查詢塊,並在基準以下方式:
- 裝載1-5萬人鍵
- 設置起始時間到當前時間
- 查詢他們爲了
- 記錄經過的時間(當前時間 - 開始時間)
我不確定什麼效果,這將與緩存有。我怎麼能進行一個熱身期?加載文件可能會清除L1或L2高速緩存中最後一個塊的所有數據。另外,維護一個1-5百萬個元素的字符串數組有什麼作用(甚至可以迭代它的結果偏斜)?
請記住,訪問模式很重要!例如,有一些哈希表,其中包含move-to-front啓發式,它重新排序表的內部結構。這將是不正確的多次運行單個塊,或運行塊不按順序。這使得CPU緩存和HotSpot升溫變得更加困難(我還可以保留用於升溫但不是定時的輔助虛擬緩存)。
什麼是具有巨大數據集的microbenchmarks的良好做法?
這不是一個「微基準」。這是一個「macrobenchmark」。 –
但它是單一操作的基準測試 - 散列表查找。 – efritz
如果你測量的是毫秒,不要使用'System.currentTimeMillis',使用'System.nanoTime()':[System.currentTimeMillis vs System.nanoTime](http://stackoverflow.com/q/351565/1065197 ) –