Open datacore-rm opened 1 year ago
2: kd> !vm
Paging File Name paged out
Current: 18874368 Kb Free Space: 17733468 Kb
Minimum: 18874368 Kb Maximum: 52851256 Kb
Physical Memory: 4718349 ( 18873396 Kb)
Available Pages: 279 ( 1116 Kb)
ResAvail Pages: -3 ( -12 Kb)
********** Running out of physical memory **********
zfs:0:tunable:zfs_total_memory_limit 3,865,470,566 zfs:0:tunable:zfs_arc_max 3,478,923,509
kd> dt zfsin!segkmem_total_mem_allocated 0xb83f7000=3,091,165,184
arc_write_ready() => arc_hdr_alloc_abd() => arc_get_data_abd()=>abd_alloc()=> abd_alloc_chunks() { ABD_SCATTER(abd).abd_chunks[i][=lookasidelist_cache_alloc(abd_chunk_cache) }
lookasidelist cache returned null. It does not have option like 'KM_SLEEP' to wait till new allocation success. lookasidelist_cache_free() returns the chunk back to the OS using ZFS callback osif_free()
Reverting the ABD chunk cache to kmem_cache(KM_SLEEP) should help to avoid bugcheck in such scenario, correct?
OK great, thanks for letter me know. We can probably just rollback for breathing room and land it again if other options are considered..
When the VM is in low memory condition, the new ABD chunk allocation failed and it then bug checked while writing to the null pointer in memcpy().