Closed PichuChen closed 3 years ago
目前實作的進度在 Branch feature/cache
有初步的雛形,可以從 mmap 讀取到 money 了
不好意思想請問一下,讀取 mmap 的部分預期打算怎麼實現。
可能是我不熟語言 go 跟 c 的底層,但在我的印象中如果 mmap 中的資料沒有經過序列化純粹是 raw data 的話,不只是編譯參數,包含有關 space locality 之類的記憶體優化都會造成影響。 不知道大大打算怎麼處理?
不好意思想請問一下,讀取 mmap 的部分預期打算怎麼實現。
可能是我不熟語言 go 跟 c 的底層,但在我的印象中如果 mmap 中的資料沒有經過序列化純粹是 raw data 的話,不只是編譯參數,包含有關 space locality 之類的記憶體優化都會造成影響。 不知道大大打算怎麼處理?
你指的是 Alignment 的問題嗎?
嗯嗯對,然後我想問如果這個 Alignment 在 runtime 透過類似 memalign 的 function 來做管理,要如何在 golang (另一個 process)裡面解析。(因為這邊的影響因素不只是編譯參數,感覺還要把相關的 alignment 的數字傳出來才能解析?)
嗯嗯對,然後我想問如果這個 Alignment 在 runtime 透過類似 memalign 的 function 來做管理,要如何在 golang (另一個 process)裡面解析。(因為這邊的影響因素不只是編譯參數,感覺還要把相關的 alignment 的數字傳出來才能解析?)
目前是會傳入 MemoryMappingSetting
這個物件,這個物件中有個 AlignmentBytes
喔喔,原來如此。那請問這邊有用到 AlignmentBytes
的實作會在哪裡呢?
https://github.com/Ptt-official-app/go-bbs/tree/7da3dab88110b6a0d65d45a8dfb7b9094fb8e7fd/cache 雖然目前看過這裏的程式碼,但不好意思還是找不太到。
喔喔,原來如此。那請問這邊有用到
AlignmentBytes
的實作會在哪裡呢?https://github.com/Ptt-official-app/go-bbs/tree/7da3dab88110b6a0d65d45a8dfb7b9094fb8e7fd/cache 雖然目前看過這裏的程式碼,但不好意思還是找不太到。
在這邊
不好意思,拖了有點久。 我在這裡整理一下自己的理解。
- 所以根據這邊的程式碼來看,這裡是以
AlignmentBytes
已經確定的前提來計算各個欄位的 offset 的意思嗎?(所以開發者不需要擔心 AlignmentBytes 是怎麼計算出來的)
AlignmentBytes 會在執行其傳入,所以 go-bbs 的使用者要知道目前執行中的系統的 AlignmentBytes 是多少。
對
- 從這裡的程式碼來看目前還是自己弄一個 Mock 來測試,請問在開發時(或未來規劃)會實際讀取 mmap 檔案來做測試嗎? 如果有這樣的檔案在哪裡呢?
有,在這邊: http://pttapp.cc/data-archives/ dump.shm 相關的壓縮檔就是了
感謝
雖然套件名稱是 Cache 但實際上是用來讀取 SHM 的套件
初步想法是這樣,目前在測試環境的 SHM 已經被打包下來了,約 44MB, 因此在 Parsing 的時候透過 mmap 的 System call 就能夠讀入記憶體了。
但是根據每個BBS編譯設定不同,欄位所在的記憶體位置也會不同,因此這部分需要動態算出位置,算出位置後下一步就能取得該位置的資料或是將資料寫入該位址。
如果回傳的是
[]byte
byte slice 的話,那利用者就能自由的讀取和修改某段記憶體位置了(還不用copy) https://play.golang.org/p/vEUqcyc5g94第一階段因為方便測試,所以用 mmap 打開測試資料,然後上線前改成透過 cgo 開啟 system V SHM 的版本。
大概是這樣的計畫,看有沒有人有興趣或是其他意見。