----- Original Message ----- > > Hi Oliver, >> >> A few more comments and suggestions regarding your patch. >> >> A couple things I noted when testing on a 32-bit x86. >> First, the columns don't line up correctly: >> >> crash> files -M 3804 >> PID: 3804 TASK: f466a5e0 CPU: 0 COMMAND: "crash" >> ROOT: / CWD: /root/crash-5.1.8 >> FD ADDR-SPACE PAGE-COUNT INODE TYPE PATH >> 0 e6d6f63c 0 e6d6f570 CHR /dev/pts/0 >> 1 e6d6f63c 0 e6d6f570 CHR /dev/pts/0 >> 2 e6d6f63c 0 e6d6f570 CHR /dev/pts/0 >> 3 f53ec874 0 f53ec7a8 CHR /dev/null >> 4 f02944d4 0 f0294408 CHR /dev/crash >> 5 e6c6a294 0 e6c6a1c8 REG /tmp/tmpfvd9PjN >> 6 e6ca9e54 0 e6ca9d88 FIFO >> 7 e6ca9e54 0 e6ca9d88 FIFO >> 8 e6c6a754 147034 e6c6a688 REG /root/crash-5.1.8/snapshot-2.6.40.4-5.fc15.i686.PAE >> 9 e6caa3f4 0 e6caa328 FIFO >> crash> > > I fixed line up problem in v3 patch, please check v3 patch in my another mail. > The major problem here is ADDR-SPACE and PAGE-COUNT width is greater than long size on 32 bit kernel. OK, thanks. But as far as the output display goes, I don't particularly like the naming of the "PAGE-CNT" column header. I'd prefer that it be changed to reflect the "address_space.nrpages" member that it comes from. I also think that the page count should be right-justified. So with this additional patch: --- filesys.c_oliver 2015-06-25 15:30:44.549942532 -0400 +++ filesys.c 2015-06-25 15:28:17.157947564 -0400 @@ -2370,13 +2370,12 @@ fill_task_struct(task); if (flags & PRINT_PAGES) { - sprintf(files_header, " FD%s%s%s%s%s%s%sTYPE%sPATH\n", + sprintf(files_header, " FD%s%s%s%s%sNRPAGES%sTYPE%sPATH\n", space(MINSPACE), mkstring(buf1, VADDR_PRLEN, CENTER|LJUST, "INODE"), space(MINSPACE), mkstring(buf2, VADDR_PRLEN, CENTER|LJUST, "MAPPING"), space(MINSPACE), - mkstring(buf3, LONG_PRLEN, CENTER|LJUST, "PAGE-CNT"), space(MINSPACE), space(MINSPACE)); } else { @@ -2935,8 +2934,8 @@ CENTER|RJUST|LONG_HEX, MKSTR(i_mapping)), space(MINSPACE), - mkstring(buf3, LONG_PRLEN, - CENTER|RJUST|LONG_DEC, + mkstring(buf3, strlen("NRPAGES"), + RJUST|LONG_DEC, MKSTR(count)), space(MINSPACE), type, The 32-bit display looks like this: crash> files -m PID: 5613 TASK: f56fa030 CPU: 4 COMMAND: "beah-beaker-bac" ROOT: / CWD: / FD INODE MAPPING NRPAGES TYPE PATH 0 f713f7a0 f713f850 0 CHR /dev/null 1 f5ab1b1c f5ab1bcc 1 REG /tmp/beah-beaker-backend.out 2 f5ab1b1c f5ab1bcc 1 REG /tmp/beah-beaker-backend.out 3 f5a08768 f5a08818 0 SOCK 4 f2c07854 f2c07904 0 REG /var/log/beah_beaker_backend.log 5 f2c0fd64 f2c0fe14 17 REG /var/beah/beah_beaker_backend.runtime 6 f2c0f344 f2c0f3f4 3543 REG /var/beah/journals/beakerlc.journal 7 f2c660fc f2c661ac 1 REG /tmp/ffiu1qDpS 8 f5b264a8 f5b26558 0 FIFO ... And the 64-bit display looks like this: PID: 5329 TASK: ffff88011b1b3c80 CPU: 3 COMMAND: "WorkerPool/5329" ROOT: / CWD: /home/anderson FD INODE MAPPING NRPAGES TYPE PATH 0 ffff880212be0558 ffff880212be0698 0 CHR /dev/null 1 ffff8802157eb5e8 ffff8802157eb728 0 FIFO 2 ffff8802157eab20 ffff8802157eac60 0 FIFO 3 ffff8800061b1320 ffff8800061b1460 222 REG /opt/google/chrome/icudtl.dat 4 ffff880089d2ce20 ffff880089d2cf60 70 REG /opt/google/chrome/natives_blob.bin 5 ffff880089d32cf0 ffff880089d32e30 140 REG /opt/google/chrome/snapshot_blob.bin ... [ cut ] ... 107 ffff8801013991b0 ffff8801013992f0 0 SOCK UNIX 108 ffff8800aee30460 ffff8800aee305a0 91 REG /home/anderson/.config/google-chrome/Default/Current Session 109 ffff88011f4c76b0 ffff88011f4c77f0 129 REG /home/anderson/.cache/google-chrome/Default/Cache/index 110 ffff88011f4c7a60 ffff88011f4c7ba0 326 REG /home/anderson/.cache/google-chrome/Default/Cache/data_0 114 ffff88020fc2eba0 ffff88020fc2ece0 0 REG /home/anderson/.config/google-chrome/Default/GCM Store/LOG 115 ffff88004f2b2d30 ffff88004f2b2e70 0 SOCK UNIX 116 ffff88004f2b0030 ffff88004f2b0170 0 SOCK UNIX 117 ffff88020a17dce0 ffff88020a17de20 4 REG /home/anderson/.config/google-chrome/Default/Web Data-journal 118 ffff88000ff22358 ffff88000ff22498 1 REG /dev/shm/.com.google.Chrome.n6ezvQ 119 ffff8800c762afd8 ffff8800c762b118 256 REG /dev/shm/.com.google.Chrome.NdcC9M 120 ffff8800c7629458 ffff8800c7629598 142 REG /dev/shm/.com.google.Chrome.EmeSNJ 122 ffff8801ed1a8460 ffff8801ed1a85a0 4043 REG /home/anderson/.cache/google-chrome/Default/Cache/data_1 123 ffff8801ed1a9a80 ffff8801ed1a9bc0 1821 REG /home/anderson/.cache/google-chrome/Default/Cache/data_4 124 ffff8801ed1a9e30 ffff8801ed1a9f70 4898 REG /home/anderson/.cache/google-chrome/Default/Cache/data_2 125 ffff8801ed1aa1e0 ffff8801ed1aa320 11718 REG /home/anderson/.cache/google-chrome/Default/Cache/data_3 ... >> And secondly, taking the address_space e6c6a754 from the task above, >> again, shouldn't the page count above be reflected in the number of >> shown by the address_space tree dump, where the page dump seems to >> be missing about 20000 pages?: >> >> crash> files -m e6c6a754 | wc -l >> 128825 >> crash> > > I can't reproduce this issue on my 32bit kernel. > > Could you verify whether you can get the same number of pages by tree command? > > First step, get the page_tree address, > > address_space.page_tree e6c6a754 > > Second step, using tree command dump pages, > > tree -t radix -N <page_tree address> As it turns out, that dumpfile was created with the "snap.so" extension module, which creates a vmcore while running on a live system. And since the kernel is running while the dumpfile is being created, you may see any number of odd outputs. Running the "tree" command above fails with a duplicate list entry failure, so the "files -a" command should also fail prematurely. So it's not a problem. >> >> For the address_space page tree dump, I don't see any point in displaying the >> page_tree member address: >> >> crash> files -m ffff810218e31220 >> Address Space ffff810218e31220, page tree ffff810218e31228, 12 pages > > I removed page_tree address in patch v3. > >> >> PAGE PHYSICAL MAPPING INDEX CNT FLAGS >> ffff81010774d1f8 221609000 ffff810218e31220 0 1 22010000001006c >> ffff81010485b378 14ac59000 ffff810218e31220 1 1 14810000001006c >> ffff810107993a78 22bc79000 ffff810218e31220 2 1 228100000010028 >> ffff8101049d3660 1517d4000 ffff810218e31220 3 1 150100000010028 >> ffff810103b29670 10e742000 ffff810218e31220 4 1 108100000010028 >> ffff810106d51ba0 1f3bec000 ffff810218e31220 5 1 1f0100000010028 >> ffff810103ac95f0 10cbd2000 ffff810218e31220 6 1 108100000010028 >> ffff810106c8cc18 1f03a5000 ffff810218e31220 7 1 1f0100000010028 >> ffff8101077b1028 223293000 ffff810218e31220 8 1 220100000010028 >> ffff810106cc03b0 1f125a000 ffff810218e31220 9 1 1f0100000010028 >> ffff810107a04cd8 22dccd000 ffff810218e31220 a 1 228100000010028 >> ffff8101078741b8 226a51000 ffff810218e31220 b 1 220100000010028 >> crash> >> >> For that matter, displaying the address_space address is redundant >> since (1) it has to be entered as the command argument, and (2) it gets >> shown in every page line "MAPPING". On the other hand, perhaps the inode >> that contains the address_space structure would be helpful, say, like >> this: > > In my v3 patch, I files -a accept inode as parameter, instead of address space address. OK, although I suggested "-a" because it was taking an "address_space" address as an argument. So perhaps it should be "-i <inode-address>"? > > The benefit of this change is, files -a is more separate with files -m. > We decoupled two commands here. The first line of the page dump is kind of unusual: crash> files -a ffff8801085680b0 Address space ffff8801085681f0, 35002 pages PAGE PHYSICAL MAPPING INDEX CNT FLAGS ffffea00072ca3c0 1cb28f000 ffff8801085681f0 0 1 5ff0000002006c referenced,uptodate,lru,active,mappedtodisk ffffea0000c1f340 307cd000 ffff8801085681f0 200 1 3ff0000002006c referenced,uptodate,lru,active,mappedtodisk ffffea00030dea40 c37a9000 ffff8801085681f0 201 1 3ff0000002006c referenced,uptodate,lru,active,mappedtodisk ... Can you make it show INODE, ADDRESS_SPACE, and NRPAGES values (in that order), similar to how I suggested before? > But how about using -p instead of -a for page dump? Yes, sure -- either -i or -p makes sense. > >> And a couple other things I forgot to mention... >> >> The vast majority of the "files -M" output consists of either the file >> descriptors for CHR, FIFO, SOCK, etc., files, or REG file descriptors >> that don't have any pages mapped into the task's address space. >> >> (1) Wouldn't it make more sense to show *only* the file descriptors >> that have mapped pages? And if the task has no mapped pages, >> just display "(no mapped pages)". > > Confirmed some files mapped zero pages is also useful for debugging. > In theory, all of files/inodes have the mapping(address_space), per its inode data structure. > The command just reflects the inode data structure. > In current kernel implementation, only REG and BLK types used the mapping. > > Most important reason is, we can reuse most existing code in filesys.c. > >> (2) Is there any good reason to show the ROOT and CWD directories? > > Same with above. Because code reuse. > All these behaviors are inherited from original files cmd code. > > For example, when -R is specified, the ROOT and CWD is required by original code. > Because we want -R keep working with -m, I don't want to change the behavior. > > You can see -R could work with -m option very well, because we share the common code. > > Below command can filter all files with REG type, > > crash> foreach files -m -R REG > PID: 1 TASK: ffff880139b20000 CPU: 2 COMMAND: "systemd" > ROOT: / CWD: / > FD INODE MAPPING PAGE-CNT TYPE PATH > 11 ffff88013ac2d678 ffff88013ac2d7c0 0 REG /proc/1/mountinfo > 12 ffff880138e6ea38 ffff880138e6eb80 0 REG /proc/swaps > > PID: 422 TASK: ffff880135f74c40 CPU: 2 COMMAND: "systemd-journal" > ROOT: / CWD: / > FD INODE MAPPING PAGE-CNT TYPE PATH > 13 ffff880135267050 ffff880135267198 17813 REG /var/log/journal/2d6f0d3073ff4a60b1e52a8e38e48feb/system.journal > 34 ffff8801352e80b0 ffff8801352e81f8 652 REG /var/log/journal/2d6f0d3073ff4a60b1e52a8e38e48feb/user-42.journal > 36 ffff8801352e9090 ffff8801352e91d8 905 REG /var/log/journal/2d6f0d3073ff4a60b1e52a8e38e48feb/user-530.journal > 38 ffff8801352e8c98 ffff8801352e8de0 1 REG /var/log/journal/2d6f0d3073ff4a60b1e52a8e38e48feb/user-995.journa > > Below command can filter all files with journal pattern in the filename, > > foreach files -m -R journal > PID: 422 TASK: ffff880135f74c40 CPU: 2 COMMAND: "systemd-journal" > ROOT: / CWD: / > FD INODE MAPPING PAGE-CNT TYPE PATH > 13 ffff880135267050 ffff880135267198 17813 REG /var/log/journal/2d6f0d3073ff4a60b1e52a8e38e48feb/system.journal > 34 ffff8801352e80b0 ffff8801352e81f8 652 REG /var/log/journal/2d6f0d3073ff4a60b1e52a8e38e48feb/user-42.journal > 36 ffff8801352e9090 ffff8801352e91d8 905 REG /var/log/journal/2d6f0d3073ff4a60b1e52a8e38e48feb/user-530.journal > 38 ffff8801352e8c98 ffff8801352e8de0 1 REG /var/log/journal/2d6f0d3073ff4a60b1e52a8e38e48feb/user-995.journal OK, you've convinced me... ;-) So, aside from the patch I added above, the addition of the INODE, ADDRESS_SPACE and NRPAGES display to the top of the "files -i|p" command, and the help page additions, this is looking pretty good. Thanks, Dave -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility