-
Notifications
You must be signed in to change notification settings - Fork 4.9k
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
ARM32/ARM64 gcstress-extra failures #69657
Comments
I couldn't figure out the best area label to add to this issue. If you have write-permissions please help me learn by adding exactly one area label. |
Tagging subscribers to this area: @JulieLeeMSFT Issue DetailsThere are many arm32/arm64 failures in recent gcstress-extra runs: There are a few x86/x64 failures too, but they look more consistent and probably not like GC holes.
|
This may also be the cause of multiple failures documented in #68986. I looked at a very simple & nice Linux ARM64 dump from here. In the test, we have a few block copies between on-stack structs: Added IP mapping: 0x0028 STACK_EMPTY (G_M8673_IG04,ins#15,ofs#60)
Generating: N058 (???,???) [000205] ----------- IL_OFFSET void INLRT @ 0x028[E-] REG NA
Generating: N060 ( 3, 2) [000025] -c--------- t25 = LCL_VAR struct<BigCopy, 32>(AX) V01 loc0 NA REG NA
Generating: N062 (???,???) [000235] Dc-----N--- t235 = LCL_VAR_ADDR byref V02 loc1 NA REG NA
/--* t235 byref
+--* t25 struct
Generating: N064 ( 7, 5) [000028] sA--------- * STORE_BLK struct<BigCopy, 32> (copy) (Unroll) REG NA
IN0016: ldp x0, x1, [fp,#248]
IN0017: stp x0, x1, [fp,#216]
IN0018: ldp x0, x1, [fp,#264]
IN0019: stp x0, x1, [fp,#232]
Added IP mapping: 0x002A STACK_EMPTY (G_M8673_IG04,ins#19,ofs#76)
Generating: N066 (???,???) [000206] ----------- IL_OFFSET void INLRT @ 0x02A[E-] REG NA
Generating: N068 ( 3, 2) [000029] -c-----N--- t29 = LCL_VAR struct<BigCopy, 32>(AX) V02 loc1 NA REG NA
Generating: N070 (???,???) [000236] Dc-----N--- t236 = LCL_VAR_ADDR byref V10 tmp4 NA REG NA
/--* t236 byref
+--* t29 struct
Generating: N072 ( 7, 5) [000176] sA--------- * STORE_BLK struct<BigCopy, 32> (copy) (Unroll) REG NA
IN001a: ldp x0, x1, [fp,#216]
IN001b: stp x0, x1, [fp,#72]
IN001c: ldp x0, x1, [fp,#232]
IN001d: stp x0, x1, [fp,#88]
Where struct BigCopy
{
public long l1, l2, l3;
public object gc;
} We crash just after these copies have been completed: IN0016: 000090 A94F87A0 ldp x0, x1, [fp,#248] // Copy #1
IN0017: 000094 A90D87A0 stp x0, x1, [fp,#216]
IN0018: 000098 A95087A0 ldp x0, x1, [fp,#264]
IN0019: 00009C A90E87A0 stp x0, x1, [fp,#232]
IN001a: 0000A0 A94D87A0 ldp x0, x1, [fp,#216] // Copy #2
IN001b: 0000A4 A90487A0 stp x0, x1, [fp,#72]
IN001c: 0000A8 A94E87A0 ldp x0, x1, [fp,#232]
IN001d: 0000AC A90587A0 stp x0, x1, [fp,#88]
IN001e: 0000B0 910123A0 add x0, fp, #72
; byrRegs +[x0]
IN001f: 0000B4 910243A8 add x8, fp, #144
; byrRegs +[x8]
IN0020: 0000B8 52800061 mov w1, #3
IN0021: 0000BC 93407C21 sxtw x1, w1
<-------------------- Point of the crash -------------------->
IN0022: 0000C0 D2971102 movz x2, #0xb888
IN0023: 0000C4 F2A5A4A2 movk x2, #0x2d25 LSL #16
IN0024: 0000C8 F2CFFF02 movk x2, #0x7ff8 LSL #32
IN0025: 0000CC F9400042 ldr x2, [x2]
IN0026: 0000D0 D63F0040 blr x2 With an assert that tells us the object reference at I think what's happening here is that we fail to report the registers used for copying ( In the "baseline" (actually, my fork), we mark these copies as non-interruptible: ;; size=60 bbWeight=1 PerfScore 12.00
G_M8673_IG05: ; func=00, offs=000090H, size=0010H, BB05 [0001], nogc, extend
IN0016: 000090 A94F87A0 ldp x0, x1, [fp,#248]
IN0017: 000094 A90D87A0 stp x0, x1, [fp,#216]
IN0018: 000098 A95087A0 ldp x0, x1, [fp,#264]
IN0019: 00009C A90E87A0 stp x0, x1, [fp,#232]
;; size=16 bbWeight=1 PerfScore 8.00
G_M8673_IG06: ; func=00, offs=0000A0H, size=0010H, BB05 [0001], nogc, extend
IN001a: 0000A0 A94D87A0 ldp x0, x1, [fp,#216]
IN001b: 0000A4 A90487A0 stp x0, x1, [fp,#72]
IN001c: 0000A8 A94E87A0 ldp x0, x1, [fp,#232]
IN001d: 0000AC A90587A0 stp x0, x1, [fp,#88] So this implicates #69202. |
In #69202, we mark the IG as |
There was a scenario where I was not marking a region as non-interruptible in the copy block having gc refs. Fixed in #70053. |
There are many arm32/arm64 failures in recent gcstress-extra runs:
https://dev.azure.com/dnceng/public/_build/results?buildId=1783259&view=results
There are a few x86/x64 failures too, but they look more consistent and probably not like GC holes.
The text was updated successfully, but these errors were encountered: