Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve parallel processing (並列処理の高速化) #479

Closed
kazuminn opened this issue Apr 3, 2022 · 6 comments · Fixed by #622
Closed

Improve parallel processing (並列処理の高速化) #479

kazuminn opened this issue Apr 3, 2022 · 6 comments · Fixed by #622
Assignees
Labels
enhancement New feature or request
Milestone

Comments

@kazuminn
Copy link
Collaborator

kazuminn commented Apr 3, 2022

並列HashMapを導入してみようかと思っています。

tokioで並列化されていますが、ただのロックだと、書き込み時にシリアライズ化されてしまうので、遅くなるようです。

並列HashMapの中身が巧妙になっており、2スレッドから同時アクセスが可能で、理論的に性能が2倍になったりするそうです。

仕組みは、hashmap全体をロックしてしまうと一度しか書き込めないので、セグメントごとにロックをして、複数スレッドから書き込めるようにするらしいです。

https://docs.rs/chashmap/latest/chashmap/

やってみて、あんまり変わらなかったら、取り込まない感じで、ちょっとやってみます。

@kazuminn kazuminn self-assigned this Apr 3, 2022
@kazuminn
Copy link
Collaborator Author

kazuminn commented Apr 3, 2022

MESSAGEはbtreemapからhashmapに変更すると、timelineの処理のパフォーマンスに影響するかもしれないので、よくない。

Btreeの並列はskiplistアルゴリズムらしいけど、
mapなので、以下のskipmapが良いかもしれない。

https://docs.rs/skiplist/0.2.10/skiplist/skipmap/struct.SkipMap.html

タイムラインの実装など私がわかってないので、コード読んだり、調査が必要。

@kazuminn
Copy link
Collaborator Author

kazuminn commented Apr 4, 2022

jamesさんからの意見をメモしておく。

ロックを使わないで、
各々のスレッドで独立変数用意しちゃって、終わったらマージしちゃえ、という意見も出た。

ロックを取得しているのはスレッド間で共通した変数にアクセス使用しているのが原因なので、スレッドで共通した変数は使いません。
代わりに、スレッド毎別々に用意した配列に検知結果を格納して、スレッド終了時にその配列を戻り値で受け取るようにすれば、ロックを取る必要が無いと思います。

@hach1yon
Copy link
Collaborator

hach1yon commented Apr 5, 2022

なんか、ここのissueを見ると、並列HashMapでも良いような気がしてきました。
並列hashmapだと、コードの修正量が少ないので、それでも良いかも

@hitenkoku hitenkoku added this to the v2.0 milestone Apr 6, 2022
@hitenkoku hitenkoku added the enhancement New feature or request label Apr 6, 2022
@kazuminn
Copy link
Collaborator Author

skipmapは、ちゃんと使えるライブラリが断念。(no_stdだったり、ライセンスが無かったり、開発途中だったろ)

並列hashmapはお試し実装中ですが、skipmapより比較的コードの修正量が少ないだけであって、結構修正しなくてはいけない(Rust難しい。何もわからない)

@YamatoSecurity YamatoSecurity changed the title 並列処理の高速化 Improve parallel processing (並列処理の高速化) Jun 30, 2022
@kazuminn
Copy link
Collaborator Author

kazuminn commented Jul 3, 2022

DashMapという並列HashMapを実装してみると、最新ルールを使って、ザックさんから前にもらった2GBのevtxが

00:17:28.143 -> 00:15:38.189
00:21:58.924 -> 00:15:24.626

になりました。

パソコンのスペックとして、memory:8GB, 8コア です。

コードが汚いので、きれいにしてから、プルリクします。
そのとき、ザックさん高スペックのマシンでもテストしてほしい、と思っています。

@YamatoSecurity
Copy link
Collaborator

ありがとうございます!
了解です。楽しみにしています。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants