Bug #2233

Support #7559: Memory check issues for Sirius A

SimpleMemoryChecker needs to be able to cope with different procfs formats on different SLF versions.

Added by Christopher Green almost 9 years ago. Updated almost 6 years ago.

Target version:
Start date:
Due date:
% Done:


Estimated time:
20.00 h
Spent time:
Occurs In:
SSI Package:
Duration: 672


Chris Jones reported thusly:

Hi guys,

Are you providing the SimpleMemoryCheck service to your clients? If so, check the definition of linux_proc you are using. I just discovered that the types and even some of the fields do not match the present description of the linux proc file system. I'm guessing there was a change from SL4 to SL5 and we never caught the difference since VSize and RSS remained at their same location in the format.

Thought you should know,


We need to find out what changed between SLF4 and SLF5 (and potentially between SLF5 and SLF6), how to detect the changes and then act accordingly.

Related issues

Related to art - Bug #5831: SimpleMemoryCheck affected by overflow errorsClosed04/04/2014


#1 Updated by Walter E Brown almost 9 years ago

  • Status changed from New to Accepted

SLF4 is not a concern for us. We ought verify the functionality under both SLF5 and SLF6.

#2 Updated by Christopher Green over 7 years ago

  • Due date set to 09/30/2013
  • Target version set to 1.09.00
  • Estimated time set to 20.00 h
  • Scope set to Internal
  • SSI Package art added

#3 Updated by Christopher Green almost 7 years ago

  • Target version changed from 1.09.00 to 521

#4 Updated by Christopher Green about 6 years ago

  • Target version changed from 521 to 1.13.00

#5 Updated by Kyle Knoepfel almost 6 years ago

  • Assignee set to Kyle Knoepfel
  • Parent task set to #7559

#6 Updated by Kyle Knoepfel almost 6 years ago

  • % Done changed from 0 to 70

The procfs types and fields for SLF5 and SLF6 are shown below. Entries prefaced with '*' indicate either a difference in type or field.

     Property              SLF5   SLF6
  1. pid                    %d    %d    
  2. comm                   %s    %s    
  3. state                  %c    %c    
  4. ppid                   %d    %d    
  5. pgrp                   %d    %d    
  6. session                %d    %d    
  7. tty_nr                 %d    %d    
  8. tpgid                  %d    %d    
* 9. flags                  %lu   %u    
 10. minflt                 %lu   %lu   
 11. cminflt                %lu   %lu   
 12. majflt                 %lu   %lu   
 13. cmajflt                %lu   %lu   
 14. utime                  %lu   %lu   
 15. stime                  %lu   %lu   
 16. cutime                 %ld   %ld   
 17. cstime                 %ld   %ld   
 18. priority               %ld   %ld   
 19. nice                   %ld   %ld   
 20. num_threads            %ld   %ld   
 21. itrealvalue            %ld   %ld   
*22. starttime              %lu   %llu
 23. vsize                  %lu   %lu   
 24. rss                    %ld   %ld   
*25. rlim                   %lu   ---
*25. rsslim                 ---   %lu   
 26. startcode              %lu   %lu   
 27. endcode                %lu   %lu   
 28. startstack             %lu   %lu   
 29. kstkesp                %lu   %lu   
 30. kstkeip                %lu   %lu   
 31. signal                 %lu   %lu   
 32. blocked                %lu   %lu   
 33. sigignore              %lu   %lu   
 34. sigcatch               %lu   %lu   
 35. wchan                  %lu   %lu   
 36. nswap                  %lu   %lu   
 37. cnswap                 %lu   %lu   
 38. exit_signal            %d    %d    
 39. processor              %d    %d    
*40. rt_priority            %lu   %u    
*41. policy                 %lu   %u    
 42. delayacct_blkio_ticks  %llu  %llu  
*43. guest_time             ---   %lu   
*44. cguest_time            ---   %ld   

For the current memory service, only items 23 and 24 are of interest. The code is being restructured so that only the values of fields 23 and 24 are stored. This is done by a new function that looks like:

vsize_t vsize;
rss_t rss;
std::istringstream iss ( buffer_from_proc_stat );
iss >> token_ignore(22) >> vsize >> rss;

Should a user decide they want the values associated with any other fields, we will need to come up with an SL-release-dependent way of handling this. For now, this is not a concern.

The types of vsize and rss in the current version of are being corrected to be in accord with those provided by SL5/6 procfs.

#7 Updated by Kyle Knoepfel almost 6 years ago

  • Status changed from Accepted to Assigned

#8 Updated by Kyle Knoepfel almost 6 years ago

  • Status changed from Assigned to Resolved
  • % Done changed from 70 to 100

This has been implemented with fbc282dd.

#9 Updated by Christopher Green almost 6 years ago

  • Status changed from Resolved to Closed

Also available in: Atom PDF