Project Name

GNU/Linux compatible procfs pseudo-filesystem


Project Description

I wish to provide a sophisticated procfs pseudo-filesystem to “the Hurd”. An implementation of /proc pseudo-filesystem already exists in hurdextras repository. After skimming through the code it is clear that it needs a lot of rework and tuning. Experiences from GNU/Linux have proven procfs to be a very useful facility in implementing many of the process management tools. So the goal of this project is to rework on the existing procfs on “the Hurd” so that its not only reliable and robust but also more importantly it is fully compatible with the GNU/Linux procfs. The project thus aims at making the GNU/Linux process management tools like top, sysctl, kill, skill, nice, snice, pgrep, free, tload, uptime, fuser, killall, pidof, pstree, etc., to run out of the box.


Mentor

Olaf Buddenhagen


Project Schedule

     1. Initial preparation and migration (Community Bonding Period: has already started – May 25th)
  This phase involves improving my translator programming skills by gaining
  hands-on experience in it and becoming well versed in it. I will also go
  through the Hurd code to understand its architecture in depth and will read
  documentations related to obtaining process related information in Hurd.
  This phase also involves the migration of existing procfs to use libnetfs.
     2. Analysis and Design (May 26th – June 11th )
  This phase involves the analysis of previous migration. Also involves 
  interacting with the mentor, the Hurd community and other people involved
  in development of ps. tools to draw the exact design of the proposed procfs
  including the algorithms required for coding.
     3.  Coding Stage I (June 12th – June 22nd )
  Finishing up the migration to libnetfs based on the finalized design and
  making necessary changes to the  existing procfs. Coding up to
  /proc/<pid>/exe in the features list.
     4. Coding Stage II (June 23rd – July 13th)
  Involves coding of the features from /proc/<pid>/environ, up to 
  /proc/<pid>/maps. These contain most of the information required for ps.
  tools and hence form the heart of the project. Will be completed by
  mid-term evaluation deadline.
     5.  Coding Stage III (July 14th – July 26th )
  Coding the rest of the features in the list including any necessary
  features that may be added in the analysis phase.
     6.  Final Testing and evaluation (July 27th – August 8th )
  Closely interacting with the community and requesting them to help me
  in overall testing and reviewing and making changes as per their 
  suggestions. Also involves testing with the ps. tools and consolidating 
  the documentation.
     7.  Packaging and Wrap-up (August 9th - August 18th )
  Final phase of testing and fixing remaining bugs. Working with the
  community to merge the project with the CVS HEAD of Hurd. Documentation
  reviews, making necessary changes as per the suggestions and wrapping 
  up the documentation.

Deliverables

  1. /proc filesystem that uses libnetfs. Using this library makes it easier for implementing a large set of functionalities and hence makes the implementation robust.
  2. The core GNU/Linux compatible /proc filesystem with functionalities to support and provide information for ps. tools like procps, psmisc etc.

Non-code deliverables include an exhaustive Documentation. This documents the code of the Hurd's procfs which explains in detail the implementation of each of the functionalities of procfs implemented during the course of this project.


Code Repository

http://github.com/madhusudancs/procfs/tree/master

Clone URL: git://github.com/madhusudancs/procfs.git


Progress

  1. Packages Ported: [http://www.madhusudancs.info/parted-hurdi386 parted-1.7.1]
  2. Packages Porting in progress: autogen_1:5.9.4-1. Error installing texlive-bin. Error tracked to some post installation scripts of texlive-bin. Problem seems to be in fmutil. Trying to debug.
  3. Have to start coding libnetfs skeleton for procfs translator.

Target for next week

  Task                                                                      To be completed by         Status Now
  1. Finish Defining the necessary netfs call backs                                 25-05-2008            Completed
  2. Create Directories for each process with pid directory name         27-05-2008            Completed
  3. Create stat file for each process within this directory and
    put atleast 1 information into it                                                          31-05-2008            In Progress

Documentations Read/Reading

  1. Hurd Hacking Guide (Have Concentrated mainly on Translator part)
  2. Linux Kernel Implementation of procfs

Code Being Read

  1. libps
  2. libnetfs
  3. procfs implementation in Linux kernel
  4. ftpfs (In Hurd main)
  5. cvsfs (In Hurd extras)
  6. xmlfs (In Hurd extras)
  7. httpfs (In Hurd extras)
  8. gopherfs (In Hurd extras)
  9. libfuse (In Hurd extras)
  10. procfs (libtrivfs based, In Hurd extras)

Post Mid-Term Road Map

Already Implemented

File - /proc/<PID>/stat
  • pid

  • comm

  • state

  • ppid

  • pgrp

  • session

  • tty_nr

  • tpgid

  • minflt

    The number of minor faults the process has made which have not required loading a memory page from disk.

  • majflt

    The number of major faults the process has made which have required loading a memory page from disk.

  • utime

    The number of jiffies that this process has been scheduled in user mode.

  • stime

    The number of jiffies that this process has been scheduled in kernel mode.

  • priority

    The standard nice value, plus fifteen. The value is never negative in the kernel.

  • num_threads

    Number of threads in this process.

  • starttime

    The time in jiffies the process started after system boot.

  • vsize

    Virtual memory size in bytes.

  • rss

    Resident Set Size: number of pages the process has in real memory, minus 3 for administrative purposes. This is just the pages which count towards text, data, or stack space. This does not include pages which have not been demand-loaded in, or which are swapped out.

  • itrealvalue

    The time in jiffies before the next SIGALRM is sent to the process due to an interval timer.

  • nswap

    Number of pages swapped (not maintained).

  • cnswap

    Cumulative nswap for child processes (not maintained).

  • flags

    PF_* fields defined in (Not Linux compatible, but nearly says the something Linux says)

  • nice

    The nice value ranges from 19 to -19.

  • cutime

    The number of jiffies that this process’s waited-for children have been scheduled in user mode.

  • cstime

    The number of jiffies that this process’s waited-for children have been scheduled in kernel mode.

File - /proc/<PID>/statm
  • size

    total program size

  • resident

    resident set size

  • lib

    library

  • dt

    dirty pages

I already know the where the information is exactly available.

Other Per-PID Files
* /proc/<PID>/exe
* /proc/<PID>/environ
Non Per-PID Files
* /proc/version

I know where the information is available roughly, but need to look in detail to extract the exact information.

  • cminflt

    The number of minor faults that the process’s waited-for children have made.

  • cmajflt

    The number of major faults that the process’s waited-for children have made.

  • signal

    The bitmap of pending signals.

  • blocked

    The bitmap of blocked signals.

  • sigignore

    The bitmap of ignored signals.

  • sigcatch

    The bitmap of caught signals.

  • policy

    Scheduling policy.

File - /proc/<PID>/statm

  • text

    text (code)

Other Per-PID Files
* /proc/<PID>/cwd

The information may be available, but needs to be searched to know where it will be.

File - /proc/<PID>/stat
  • rlim

    Current limit in bytes on the rss of the process (usually 4294967295 on i386).

  • startcode

    The address above which program text can run.

  • endcode

    The address below which program text can run.

  • startstack

    The address of the start of the stack.

  • kstkesp

    The current value of esp (stack pointer), as found in the kernel stack page for the process.

  • kstkeip

    The current EIP (instruction pointer).

  • exit_signal

    Signal to be sent to parent when we die.

File - /proc/<PID>/statm
  • share

    shared pages

  • data

    data/stack

Other Per-PID File
* /proc/<PID>/root
Non Per-PID Files
* /proc/stat
* /proc/meminfo

I fear information may not be available.

File - /proc/<PID>/stat
  • wchan

    This is the "channel" in which the process is waiting. It is the address of a system call, and can be looked up in a namelist if you need a textual name. (If you have an up-to-date /etc/psdatabase,

  • processor

    CPU number last executed on.

  • rt_priority

    Real-time scheduling priority

  • delayacct_blkio_ticks

    Aggregated block I/O delays, measured in clock ticks (centiseconds).

Newly added to Roadmap(but these were the original goals of the project)

procps tools need to be ported so that they run on top of the procfs

pgrep                 -  Done
pkill                 -  Done
killall               -  Done
pstree                -  Done
top                   -  Mostly Done (except per-PID shared memory field, and non per-PID caches and buffers field)
free                  -  Mostly Done (Ditto from above)
htop                  -  Mostly Done (Ditto again)
watch                 -  Done
tload                 -  I think it is done. (Need someone to test it)
libgtop               -  In progress
gnome-system-moitor   -  In progress

Code Updates

  1. May, 14, 2008
  2. May, 18, 2008
  3. May, 28, 2008
  4. June, 1, 2008
  5. June, 2, 2008
  6. June, 4, 2008
  7. June, 5, 2008 (3 commits, 00:30 HRS, 02:30 HRS, 11:15HRS, all in IST)
  8. June, 9, 2008
  9. June, 19, 2008 (Targets 1 and 2 successfully accomplished. Duration between the commits became inevitably longer because of the large amount of time spent on debugging the code.)

Contact Details

Name : Madhusudan.C.S

Email : madhusudancs@gmail.com

Blog : http://www.madhusudancs.info

Detailed proposal: http://www.madhusudancs.info/gnu-hurd-procfs-proposal

Google Summer of Code Site Link: Abstract