This project requires a fair amount of time in designing, writing, and running user-level experiments, and very little time writing and testing your system call. I'd recommend leaving yourself at lease 1.5 weeks for designing, writing, and running experiments and for writing your final report.
int sys_pgfltstats(pid_t pid, int flag, pf_info_struct *info)
The pf_info_struct
should contain fields for:
If pid
is:
You can use fields in task_struct for obtaining these, or
you could use (or add) values to the fault handling part of the kernel
for obtaining them. Make sure to check for error conditions and return
appropriate error values as in the previous assignments. Remember
that header file contents (prototypes and definitions) that
should only be visible inside the kernel (not at user level) should be inside
#ifdef __KERNEL
, and #endif
preprocessor directives.
You can grab my starting point code for lab2 to use as a starting point for your system call implementation (~newhall/public/cs45/lab2/).
You can use vmstat, and /proc/pid/ files to help you determine if your system call is implemented correctly (look at vmstat and proc (man 5 proc) man pages for more info).
Kernel code you may want to read:
do_page_fault()
in arch/i386/mm/fault.c and mm/memory.c
For this part, you will use your system call (and other utilities) to collect information about page faults and other performance data for different programming loads. I want you to (through experiments) determine what page replacement algorithm Linux likely implements. I'm sure you can figure out what Linux's page replacement policy is just by reading Linux documentation and/or reading Linux source code. However, the point of this assignment is to see if you can verify experimentally what you know (or suspect) about Linux's page replacement policy.
Think about running experiments to answer the questions about how the policy works for different types of workloads, and what that tells you about the policy. In designing your experiments, you should write user-level test programs that access memory in different patterns, and run different experiments using them to collect performance data to help you answer questions like:
To get started, you will likely want to read kernel code and other Linux documentation to help you develop some initial hypotheses. You can test negative hypotheses as well as positive ones (i.e. "I don't think Linix implements the X policy, and I'm going to test this by ..."), but you should have some positive hypotheses as well; there is a difference between negative hypotheses that can help support your positive ones, and bad hypotheses (and bad experiments) that don't really show anything.
Next,think about how to design experiments to test your hypotheses:
Look at the details in the Report section below to help guide your hypothesis and experiments design and testing.
To write test programs that use enough memory to trigger paging, look at the /proc/meminfo file. This give the total amount of free memory (MemFree, in Kbytes). If you are running an experiments, make sure the the process(es) allocate enough memory to trigger page replacement (they need to allocate enough virtual memory space so that it won't all fit into free physical memory). However, be careful that you do not allocate too much memory, otherwise, you can run out of swap space and the kernel will start killing process. The amount of free swap space can be found in /proc/meminfo (SwapFree, in Kbytes).
In particular, your report should have the following:
watch -n 1 cat /proc/22832/stat
/home/newhall/public/latex_examples
For this assignment, the example in the paper subdirectory is likely a good starting point. In the paper subdirectory is an README file with information on how to create a .dvi .ps and .pdf file from the latex source file (example.tex). In addition, there is a makefile that contains rules for building all of these. The example.tex file, contains examples of importing postscript figure files, creating sections and subsections, using different fonts, creating lists, and referencing figures within a document. Probably the easiest thing to do is to grab the contents of this directory as a starting point for your report, then edit example.tex with your report.
Also, off my Unix and C help pages, I have much more documentation about creating documents, and figures, graphs: Tools for Documents and Figures