123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- $Id: README,v 1.2 2001/08/10 19:23:11 vipin Exp $
- This is the README file for the JitterTest (and friends)
- program.
- This program is used to measure what the jitter of a
- real time task would be under "standard" Linux.
- More particularly, what is the effect of running
- a real time task under Linux with background
- JFFS file system activity.
- The jitter is measured in milli seconds (ms) from
- the expected time of arrival of a signal from a
- periodic timer (set by the task) to when the
- task actually gets the signal.
- This jitter is then stored in a file specified
- (or the default output file "jitter.dat").
- The data may also be sent out to the console by
- writing to /dev/console (See help options. This is
- highly desirable specially if you have redirected
- your console to the serial port and are storing it
- as a minicom log on another computer for later analysis
- using some tools provided here).
- This is particularly useful if you have a serial
- console and are outputting "interesting" info
- from inside some kernel task or driver.
- (or something as simple as a "df" program running
- periodically and redirecting o/p to the console).
- One "interesting" thing that I have measured
- is the effect of FLASH chip erases on the jitter
- of a real time task.
- One can do that by putting a printk at the
- beginning of the flash erase routine in the MTD
- flash chip driver.
- Now you will get jitter data interspersed with
- flash sector erase events. Other printk's can also
- be placed at suspected jitter causing locations in
- the system.
- EXECUTING THE PROGRAM "JitterTest"
- You may specify a file to be read by the
- program every time it wakes up (every cycle).
- This file is created and filled with some junk
- data. The purpose of this is to test the jitter
- of the program if it were reading from- say
- a JFFS (Journaling Flash File System) file system.
- By specifying the complete paths of the read and write
- (o/p) files you can test the jitter a POSIX type
- real time task will experience under Linux, under
- various conditions.
- These can be as follows:
- 1. O/P file on ram file system, no i/p file.
- In this case you would presumably generate other
- "typical" background activity for your system and
- examine the worst case jitter experienced by
- a task that is neither reading nor writing to
- a file system.
- Other cases could be:
- 2. O/P to ram fs, I/P from JFFS (type) fs:
- This is specially useful to test the proper
- operation of erase suspend type of operation
- in JFFS file systems (with an MTD layer that
- supports it).
- In this test you would generate some background
- write/erase type activity that would generate
- chip erases. Since this program is reading from
- the same file system, you contrast the latencies
- with those obtained with writes going to the same
- fs.
- 3. Both read and writes to (or just write to) JFFS
- file system:
- Here you would test for latencies experienced by
- a program if it were writing (and optionally also
- reading) from a JFFS fs.
- Grabing a kernel profile:
- This program can also conditionally grab a kernel profile.
- Specify --grab_kprofile on the cmd line as well as
- a "threshold" parameter (see help options by -?).
- Any jitter greater than this "threshold" will cause the
- program to read the /proc/profile file and dump it in
- a local file with increasing file numbers. It will also
- output the filename at that time to the console file specified.
- This will allow you to corelate later in time the various profiles
- with data in your console file and what was going on at that time.
- These profile files may then be later examined by running them through
- ksymoops.
- Make sure you specify "profile=2" on the kernel command line
- when you boot the kernel if you want to use this functionality.
- Signalling the JFFS[2] GC task:
- You can also force this program to send a SIGSTOP/SIGCONT to the
- JFFS (or JFFS2) gc task by specifing --siggc <pid> on the cmd line.
- This will let you investigate the effect of forcing the gc task to
- wake up and do its thing when you are not writing to the fs and to
- force it to sleep when you want to write to the fs.
- These are just various tools to investigate the possibility of
- achieving minimal read/write latency when using JFFS[2].
- You need to manually do a "ps aux" and look up the PID of the gc
- thread and provide it to the program.
- EXECUTING THE PROGRAM "plotJittervsFill"
- This program is a post processing tool that will extract the jitter
- times as printed by the JitterTest program in its console log file
- as well as the data printed by the "df" command.
- This "df" data happens to be in the console log because you will
- run the shell file fillJffs2.sh on a console when you are doing
- your jitter test.
- This shell script copies a specified file to another specified file
- every programmable seconds. It also does a "df" and redirects output
- to /dev/console where it is mixed with the output from JitterTest.
- All this console data is stored on another computer, as all this data
- is being outputted to the serial port as you have redirected the console
- to the serial port (that is the only guaranteed way to not loose any
- console log or printk data).
- You can then run this saved console log through this program and it
- will output a very nice text file with the %fill in one col and
- corrosponding jitter values in the second. gnuplot then does a
- beautifull plot of this resulting file showing you graphically the
- jitters encountered at different fill % of your JFFS[2] fs.
- OTHER COMMENTS:
- Use the "-w BYTES" cmd line parameter to simulate your test case.
- Not everyone has the same requirements. Someone may want to measure
- the jitter of JFFS2 with 500 bytes being written every 500ms. Others
- may want to measure the system performance writing 2048 bytes every
- 5 seconds.
- RUNNING MULTIPLE INSTANCES:
- Things get real interesting when you run multiple instances of this
- program *at the same time*.
- You could have one version running as a real time task (by specifing
- the priority with the -p cmd line parameter), not interacting with
- any fs or at the very least not reading and writing to JFFS[2].
- At the same time you could have another version running as a regular
- task (by not specifing any priority) but reading and writing to JFFS[2].
- This way you can easily measure the blocking performance of the real time
- task while another non-real time task interacts with JFFS[2] in the back ground.
- You get the idea.
- WATCH OUT!
- Be particularly careful of running this program as a real time task AND
- writing to JFFS[2]. Any blocks will cause your whole system to block till
- any garbage collect initiated by writes by this task complete. I have measured
- these blocks to be of the order of 40-50 seconds on a reasonably powerful
- 32 bit embedded system.
|