On Thu, Oct 03, 2013 at 04:23:45AM +0000, Yaodong Yang wrote: > In block-migration.c file, line 435, if (bdrv_get_dirty(bmds->bs, sector)) { > > It looks like this "if statement" is used to check whether a chunk is dirty > or not. If it is dirty, system will migrate a whole chunk, 1MB data, to the > destination. Otherwise, the cur_dirty will increase by 1MB/512B sectors. > > However, in my understanding, this function, bdrv_get_dirty(bmds->bs, > sector), only check this sector (512B) is dirty or not, rather than a whole > chunk (1MB). Could someone tell me the reason?
See block-migration.c:set_dirty_tracking(): bdrv_set_dirty_tracking(bmds->bs, enable ? BLOCK_SIZE : 0); The dirty bitmap granularity is set to BLOCK_SIZE. Any write in the open range [sector, sector + BLOCK_SIZE / BDRV_SECTOR_SIZE) will mark the bit dirty. Stefan