-
Notifications
You must be signed in to change notification settings - Fork 162
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
(JP) shmem_alloc/shmem_freeを並列実行すると、shmem_alloc時にダブルブッキングすることがある #3
Comments
pgstrom_shmem_zone_block_free()が未使用ブロック同士を併合するロジックの中で、 現在修正中。 |
250c8db に修正を入れました。 上記バグが原因だと並列実行は関係ありませんが、再現をトライしてみてください。 テストに使ったクエリは以下の通りです。 select count(*) from (select pgstrom_shmem_free(p) from (select pgstrom_shmem_alloc((random() * 1000000)::int) p from generate_series(1,100000) order by random()) as foo where p > 0) as var; |
250c8db で再現するかを確認しました。 10並列まで試して再現しませんでしたので、修正できたと判断します。 |
ありがとうございます。 後で発現すると厄介なバグになりかねない場所なので、早期発見できてよかったです。 |
8KB固定サイズでshmem_allocを約8万回行った後、shmem_freeで1つずつ開放する処理を3並列で行ったところ、すでに割り当てられ、かつ未開放の領域が割り当たることがある。(ダブルブッキングする)
この後、shmem_freeが行われた時点でAssertionFailedによるSIGABRTが発生する。
テスト方法は、以下のshmem_test.cを使用し、pgbenchでshmem_test.cの関数を呼び出すSQL文(shmem_test.sql)を実行3並列(クライアント数3、スレッド数3、トランザクション数2)した。
The text was updated successfully, but these errors were encountered: