Hi Jayashree,
CrashMonkey sounds great. For PMDK, there are three libraries that maintain a consistent on-media layout: libpmemblk, libpmemlog, and libpmemobj. The last one, libpmemobj, is the general-purpose library, supporting allocations, transactions, and a huge API for persistent memory. We have some rudimentary consistency checking for pmemblk and pmemlog (via the "pmempool check" command) but I think full consistency checking for pmemobj would definitely be interesting.
To answer your second question, I think looking for missing flushes or stores is interesting, but something that we have fair coverage on using tools like our valgrind plugin, the new "persistence inspector" tool done at Intel, and some other PMDK tools we have. I personally would be more interested in a full fsck-like examination of the libpmemobj layout, looking for inconsistencies not just due to library bugs, but due to application bugs scribbling where they shouldn't.
And checking for libpmemobj consistency is great, but of course it only checks the internal data structures of libpmemobj. In the general case, the point of the persistent memory programming model is to give applications direct access. So it would be interesting if there were a way for an application writer to describe their own data structures to your program, and have that program use the description to perform consistency checks. Sort of a data-driven fsck tool... Just an idea.
-andy