- 论坛徽章:
- 16
|
回复 77# firkraag
从set_swap_extents的代码来看,如果发现得到的磁盘扇区号不是PAGE_SIZE aligned的话,
那个会找下一个文件数据块,那么根据下边代码中的probe_block++来看,应该是找到下一个
PAGE_SIZE aligned对齐的数据块,那么这个swap file是不是有些数据块就被跳过了,由于
这种情况的产生,那么我建一个1GB的swap file,把它mkswap然后swapon成真正的分区后是不是
这个分区会小于1GB,但是事实貌似与我的猜想相反,看下边的操作和dmesg,求指点!- while ((probe_block + blocks_per_page) <= last_block &&
- page_no < sis->max) {
- unsigned block_in_page;
- sector_t first_block;
- first_block = bmap(inode, probe_block);
- if (first_block == 0)
- goto bad_bmap;
- /*
- * It must be PAGE_SIZE aligned on-disk
- */
- if (first_block & (blocks_per_page - 1)) {
- probe_block++;
- goto reprobe;
- }
- for (block_in_page = 1; block_in_page < blocks_per_page;
- block_in_page++) {
- sector_t block;
- block = bmap(inode, probe_block + block_in_page);
- if (block == 0)
- goto bad_bmap;
- if (block != first_block + block_in_page) {
- /* Discontiguity */
- probe_block++;
- goto reprobe;
- }
- }
- first_block >>= (PAGE_SHIFT - blkbits);
- if (page_no) { /* exclude the header page */
- if (first_block < lowest_block)
- lowest_block = first_block;
- if (first_block > highest_block)
- highest_block = first_block;
- }
- /*
- * We found a PAGE_SIZE-length, PAGE_SIZE-aligned run of blocks
- */
- ret = add_swap_extent(sis, page_no, 1, first_block);
- if (ret < 0)
- goto out;
- nr_extents += ret;
- page_no++;
- probe_block += blocks_per_page;
- reprobe:
- continue;
- }
复制代码 root@kernel:~# dd if=/dev/zero of=/swapfile bs=1024 count=1048576
记录了1048576+0 的读入
记录了1048576+0 的写出
1073741824字节(1.1 GB)已复制,27.4414 秒,39.1 MB/秒
root@kernel:~# mkswap /swapfile
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=351ed635-295e-4478-855b-623fc003cc76
root@kernel:~# swapon /swapfile
dmesg
[ 2388.055366] Adding 1048572k swap on /swapfile. Priority:-2 extents:10 across:2105340k
|
|