task creation: clone
clone(function, stack_ptr, sharing_flags, args)
sharing_flags
CLINE_VM, create a new thread
CLONE_FS, share unmask, root, and working dirs
CLoE_FILES, share the file descriptiors
CLONE_SIGHAND, share the signal handler table
CLONE_PID, new thread gets old PID
CLINE_PARENT, new thread has same parent as caller
Native POSIX Thread Library(NPTL)
– kernel see each UTL info
– kernel traps are cheaper
– more resources: memory, large range of IDs…
Older LinuxTreads “H-H model”
– similar issues to thoese described in Solaris papers
Thread Performance Considerations
– performance comparisons
– multi-process vs. multi-threaded vs. event-driven
– Event-driven architectures
– “Flash: An Efficient and Portable Web server” vs Apache
Boss-worker “Ooms per toy order”
Pipeline “20ms per pipeline stage”
execution time avg time to complete order
Are threads useful?
threads are useful because of..
parallelization => speed up
specialization => hot cache!
efficiency => lower memory requirement and cheaper
For a matrix multiply application
=> execution time
-> depend on metrics
For a web service application …
=> number of client requests / time
=> response time
-> average, max, min, 95%
For hardware …
=> higher utilization (e.g. CPU)
Performance Metrics
metrics == a measurement standard
-measurable and/or quantifiable property