Runtime: GC serentak gagal berjalan secara bersamaan

Dibuat pada 9 Agu 2019  ·  3Komentar  ·  Sumber: dotnet/runtime

Saya melihat masalah sesekali pada netcore 2.2 di mana GC Gen2 bersamaan tampaknya tidak berjalan di utas GC latar belakang, alih-alih berjalan di utas yang memicu pengumpulan.

Ini diamati pada pengembangan Windows 10 saya yang menjalankan aplikasi dalam konfigurasi Rilis pada runtime .NET Core 2.2 64-bit dengan profil GC default (workstation, GC bersamaan diaktifkan, mode latensi interaktif), dan saya dapat mengambil sampel perfview dari kejadian:

blockingConcurrentGC

Melihat melalui sumber GC, saya pikir mungkin ada masalah yang diperkenalkan di commit ini . Sebelum perubahan, bgc_thread akan disetel pada saat pembuatan utas, dan dijamin akan disetel pada saat diperiksa di void gc_heap::garbage_collect (int n) . Setelah perubahan, bgc_thread sekarang disetel dalam utas baru pada awal eksekusinya, yang sepertinya akan memperkenalkan kondisi balapan di mana bidang itu mungkin tidak disetel pada waktunya untuk melanjutkan GC bersamaan.

area-GC-coreclr question

Komentar yang paling membantu

hanya ingin menunjukkan bahwa GC sebenarnya yang dilakukan di sini bukan lagi BGC - itu hanya memperlakukannya karena kami gagal membuat utas BGC jadi kami hanya melakukan GC pemblokiran penuh; acara tersebut menyesatkan (masih mengatakan Latar Belakang) sehingga harus juga diperbaiki jika kita gagal benar-benar melakukan BGC (gagal membuat utas BGC atau karena alasan lain).

Semua 3 komentar

ahh, penemuan yang bagus!
@PeterSolMS , @VSadov maukah salah satu dari Anda melihat dan memperbaikinya?

hanya ingin menunjukkan bahwa GC sebenarnya yang dilakukan di sini bukan lagi BGC - itu hanya memperlakukannya karena kami gagal membuat utas BGC jadi kami hanya melakukan GC pemblokiran penuh; acara tersebut menyesatkan (masih mengatakan Latar Belakang) sehingga harus juga diperbaiki jika kita gagal benar-benar melakukan BGC (gagal membuat utas BGC atau karena alasan lain).

untuk lomba setting bgc_thread, sebenarnya kita tidak perlu melakukan setting di bgc_thread_stub , di CreateSuspendableThread setelah baris ini

args.Thread = SetupUnstartedThread(FALSE);

objek Thread sudah tersedia - semua logika selanjutnya dalam fungsi ini tidak mengubah Thread yang dibuat.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

chunseoklee picture chunseoklee  ·  3Komentar

v0l picture v0l  ·  3Komentar

jzabroski picture jzabroski  ·  3Komentar

omajid picture omajid  ·  3Komentar

EgorBo picture EgorBo  ·  3Komentar