Operating Systems 2015F Lecture 11
Video
The video for the lecture given on October 14, 2015 is now available.
Notes
Lecture 11
----------
- ftrace
- virtual memory
Ftrace
------
- as root, go into /sys/kernel/debug
- enable events that you want by doing an echo "1" to the "enable" file for the event you want, e.g. events/syscalls/sys_enter_chdir/enable
- look at the events in trace or, to just get the most recent ones, attach to trace_pipe
- be sure to do an echo "0" to the enable file when you are done!
For a tutorial on ftrace, see lwn.net:
https://lwn.net/Articles/365835/ (Part 1)
https://lwn.net/Articles/366796/ (Part 2)
Virtual memory
--------------
- remember the kernel is LAZY
- defers I/O for as long as possible, in general
- "mapped" files are only loaded into memory logically at the time of the mmap
- file I/O only happens when assocatied memory is accessed (read or write)
- loads in blocks of course
- data is loaded "on demand"
- kernel is also lazy about memory allocation
- consider fork
- logically, copies a process's entire address space
- often, though, that address space is quickly discarded
(when you do an execve)
- solution: only copy data *as needed*
- called "copy on write", or COW
- kernel memory management is about using RAM to maximum effect
- for files that are being currently accessed
- only the part of those files that are being accessed
- only code and data of processes that is actually being used
- why is this hard
- what does "current" actually mean?
- when is stuff used recently not going to be used again?
- past predicts the future, but not always
- computer memory is designed assuming locality of various kinds
- temporal locality
- access in the past means likely access in the future
- spatial locality (closer together data is more likely to be
accessed at the same time)
- code and data exhibit different locality patterns
e.g. video streaming
- run the same code over and over again
- data is accessed once then discarded
- to take advantage of locality patterns, we have a memory hierarchy
- different types of memory, with different characteristics:
- volatility
- size
- latency of access
- bandwidth
- most obvious: disk and RAM
- disk is slow, but durable
- RAM is fast but ephemeral
- latency versus bandwidth
- in general, you want low latency and high bandwidth
- latency: time to get first byte of data
- bandwidth: rate of data transfer over time
- you can easily increase bandwidth by increasing parallelism
- you have to design for latency
- but real hierarchy is deeper
- CPU registers
- TLB, translation lookaside buffer
- cache of virtual to physical memory mappings
- it is an associative array implemented in hardware
- L1 cache (smallest, lowest latency)
- L2 cache (larger, moderate latency)
- L3 cache (even larger, higher latency, but still faster than DRAM)
- DRAM (pretty big, high latency, high bandwidth)
- Solid state disks (flash memory)
- Hard disks (spinning)
- Tape
- virtual versus physical addresses
- programs access memory in terms of virtual addresses
- storage happens with physical addresses
- virtual to physical address translation happens
ON EVERY MEMORY ACCESS