The short answer is that there is no way that is currently implemented to do this. Normally checkpoints are created with an atomic CPU without caches and restored into a system with caches for execution. The only way to flush dirty data from the cache would be to iterate through each cache block flushing it if it's dirty.
Ali On Jan 5, 2009, at 2:35 PM, David A. Ramos wrote: > Hi Everyone, > > I understand that the caches cannot be checkpointed within a > reasonable amount of space, but what is the proper procedure for > flushing the caches prior to taking a checkpoint? My m5 config is a > single-core Alpha TimingSimpleCPU with a split L1 cache. If I drop a > checkpoint, restart m5, and restore the checkpoint, the kernel panics: > > Bad page state at prep_new_page (in process 'm5', page > fffffc0000978c80) > flags:0x0000000000000064 mapping:fffffc00006f2841 mapcount:1 count:1 > Backtrace: > fffffc0007be7bf0 0000000000000000 fffffc000036eb64 fffffc000071aec0 > fffffc000036f3c0 fffffc000071e600 fffffc000071ae80 > 0000000000000000 > 0000000000000000 0000000000000020 0000000000000000 > fffffc0007abf4c0 > fffffc000036f3c0 fffffc000071e640 fffffc000071ae80 > 0000000000000020 > 0000000000000000 00000000000000d2 fffffc00003742f0 > 0000000000000000 > 0000000000000020 fffffc0000c0dcc0 fffffc0000c0dec8 > fffffc0000c0f000 > Trace: > [<fffffc000036eb64>] buffered_rmqueue+0x164/0x3d0 > [<fffffc000036f3c0>] __alloc_pages+0x540/0x5e0 > [<fffffc000036f3c0>] __alloc_pages+0x540/0x5e0 > [<fffffc00003742f0>] cache_alloc_refill+0x400/0x760 > [<fffffc0000373c70>] kmem_cache_alloc+0x80/0x90 > [<fffffc000034c144>] __sigqueue_alloc+0x64/0xe0 > [<fffffc000034d070>] send_signal+0x120/0x1f0 > [<fffffc000034d208>] specific_send_sig_info+0xc8/0x130 > [<fffffc000034d334>] force_sig_info+0xc4/0x110 > [<fffffc000032f638>] do_page_fault+0x3b8/0x570 > [<fffffc000031151c>] entMM+0x9c/0xc0 > [<fffffc00003118c4>] entSys+0xa4/0xc0 > > Trying to fix it up, but a reboot is needed > ------------------------------------------------------------------------------------------------------------------------ > > Under the same setup but no caches, the checkpoint restores correctly. > So, I'm assuming it's a few dirty cache blocks holding the OS's page > table that are causing the problem. > > Is there an easier way to flush the caches prior to checkpointing than > iterating through each block and writing it back if it's dirty? > Looking through the code, I don't think draining forces a cache-wide > writeback. > > Thanks, > -David > > _______________________________________________ > m5-users mailing list > [email protected] > http://m5sim.org/cgi-bin/mailman/listinfo/m5-users > _______________________________________________ m5-users mailing list [email protected] http://m5sim.org/cgi-bin/mailman/listinfo/m5-users
