Graybox NFS Caching Proxy By: Paul Cychosz and Garrett Kolpin

advertisement
Graybox NFS Caching Proxy
By:
Paul Cychosz and
Garrett Kolpin
What are Graybox Techniques?
• First we need to know a little about how
the “graybox” works.
• Inference by observation
• No server or client-side modifications
necessary
Our Problem
• Figure out what the client is caching
• Maintain low overlap between client and
proxy caches
Our Solution
• Treat the client as a graybox
• Monitor NFS traffic
• Infer from NFS traffic the contents of client
cache
Conclusions
Cache overlap decreased by 5% to 50%
when using graybox techniques
Outline
• Approach
• Results
• Conclusions
Approach
NFS specifics:
 Implemented in kernel as another FS type
 Replaces “file_operations” with its own functions
for read, write, open, etc.
 Uses VFS abstraction
VFS
RPC / XDR
NFS kernel code
retrans., data
wrapping
TCP / UDP
Approach
Client cache / Replacement
• Caches on page level
• Not much NFS specific code – Uses global
Linux page cache
• Not a static size, no upper-bound
• Timestamps: “jiffies”, per page.
Approach
Reads typically > ~85% of traffic
NFS / RPC “read” structure
• RPC Packets sent out: access to dir, getattr to
file, access to file, then read, read, read, …
• Client use of getattr to revalidate cached
copies
 Exploit this, proxy explicitly look for
these to determine client cache contents
Approach
Proxy
Sees:
 File handle
 Offset
 size
--becomes our “cache element”
 Store in hash table
 Cache on reads, run our cache element replacement
policy on getattr (proof of cached client copy)
Approach
NFS Client
Proxy
Replacement
Read system call
(possible force-out)
Revalidate data
Cache lookup
OR
Read setup
read
Lookup
OR
Return data
Typical read()
Forward req.
to server
Add
Viewing Client Cache Contents
Test Environment:
• Disable swap space
• Use mincore() to view pages that client
has cached
• Use “balloon” program to keep client
cache contents manageable
Approach
Difficulties
 Logistics: Initial setup, client/server/proxy all on
same PC – doesn’t work
 Client cache size changes
-solved: compare percentages, normalize
 Repeated RPC calls not idempotent
 Not a significant problem, proxy efficiency
degrades linearly with NFS performance if
network traffic is bad
Approach
Difficulties
 Ambiguities:
 Different FS activities DON’T generate unique
RPC patterns
 getattr used for a few things besides reads
-- Null RPC packets
Cannot tell exact blocks client caching,
only which files
Need second, local replacement policy on proxy!
Approach
Cache Replacement
Global Policies
• LRU
Local Policies
• Forcing entire file
• MRU
• MRU
Outline
• Approach
• Results
• Conclusions
What We Tested
• Control Experiments
– Global LRU, no local force-out
– Global MRU, no local force-out
• Combinations
– Global LRU, whole file force-out
– Global LRU, block-level local MRU
– Global MRU, whole file force-out
– Global MRU, block-level local MRU
How We Tested
• Used Postmark benchmark
• 12 files with sizes randomly selected
between 4 and 50 kilobytes
• Gives us more of a “real-world” workload
Results
LRU Global Replacement
120
100
Percent
80
Proxy Cache Fill
60
Overlap
40
20
0
NF
WF
Force-out Method
MRU
Results
MRU Global Replacement
120
100
Percent
80
Proxy Cache Fill
60
Overlap
40
20
0
NF
WF
Force-out Method
MRU
Results
All Combinations
120
100
Percent
80
Proxy Cache Fill
Overlap
60
40
20
0
LRU NF
MRU NF
LRU WF
LRU MRU
MRU WF MRU MRU
Replacement Combination
Outline
• Approach
• Results
• Conclusions
Conclusions
• Decrease in overlap by between 5 and 50
percent as compared to control tests
• MRU global file replacement is good by
itself
• MRU global policy with whole-file local
policy gives highest cache fill and lowest
overlap
Questions? Feedback?
?
?
?
Download