Editing Performance

Jump to: navigation, search

Warning: You are not logged in.

Your IP address will be recorded in this page's edit history.
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 8: Line 8:
 
=== Memory Utilization ===
 
=== Memory Utilization ===
  
ZFS uses memory caching to improve performance. Filesystem meta-data, data, and the de-duplication Tables (DDT) are stored in the ARC, allowing frequently accessed data to be accessed many times faster than possible from hard disk media. The performance that you experience with ZFS can be directly linked to the amount of memory that is allocated to the ARC.
+
ZFS uses memory caching to improve performance. Filesystem meta-data, data, and the De-duplication Tables (DDT) are stored in the ARC, allowing frequently accessed data to be accessed many times faster than possible from hard disk media. The performance that you experience with ZFS can be directly linked to the amount of memory that is allocated to the ARC.
  
O3X uses Wired (non-pageable) memory for the ARC. Activity Monitor and top can display the total amount of Wired memory allocated. O3X is not the only user of wired memory, it is possible to examine the amount of memory (measured in bytes) in use by O3X by issuing the command:
+
O3X 1.3.0 sets the default maximum ARC size to just 25% of your computers main memory, as opposed to illumos, which sets it at 75%, and ZFS on Linux, which sets it at 50%. Due to space efficiency limitations in the O3X allocator, this will result in up to 40% of your computer's memory being occupied by ZFS.  
::$ sysctl kstat.spl.misc.spl_misc.os_mem_alloc
+
  
Note that this value is more than likely greater than the configured maximum ARC size due to overheads in the allocator itself. By way of example on a 32GB iMac with the ARC set for 8GB.
+
O3X uses Wired (non-pageable) memory for the ARC. Activity Monitor and Top can display the total amount of Wired memory allocated. The spl.kmem_bytes_total sysctl contains the amount of memory allocated by ZFS. The difference between these figures reflects memory use by the kernel and the efficiency factor of the allocator. A real word example, a 32GB iMac, has ARC set to 8GB. Approximately 7GB RAM allocated by ZFS, results in approximately 10.5GB of Wired RAM in use.
  
::$ sysctl kstat | grep arc.max
+
The size of the ARC is controllable by altering the value stored in the sysctl zfs.arc_max which can be set by:
::kstat.zfs.darwin.tunable.zfs_arc.max: 8589934592
+
::$ sysctl kstat.spl.misc.spl_misc.os_mem_alloc
+
::kstat.spl.misc.spl_misc.os_mem_alloc: 11866734592
+
  
Over the last several releases O3X has evolved the memory allocator technology in the SPL to closely match the Open Solaris allocator. This is has been driven by the OSX kernel allocator not being able to meet the demanding requirements of a full ZFS implementation. O3X 1.3.1 will by default allow the ARC to occupy most of your computers physical memory. In parallel with that it has a mechanism that detects when the computer is experiencing memory pressure and will release memory back to the OS for other purposes. This mechanism has been extensively tested, but may not be suitable for everyone.
+
::sudo sysctl -w zfs.arc_max=<arc size in bytes>
  
It is possible to temporarily limit the size of the ARC by issuing a command:
+
When configuring large amount of ARC storage, the total allocated memory should be carefully monitored as the machines performance may suffer if too much memory is allocated.
::$ sudo sysctl -w kstat.zfs.darwin.tunable.zfs_arc.max=<size of arc in bytes> (O3X 1.3.1 RC and beyond)
+
::$ sudo sysctl -w zfs.arc_max=<arc size in bytes> (O3X 1.3.0)
+
  
With the final release of O3X 1.3.1 (not 1.3.1-RC5) will come a persistent configuration mechanism. Adding the following line to /etc/zfs/zsysctl.conf will cause the change to be automatically applied whenever the O3X kexts are loaded.
+
Future improvements to the allocator will improve its space efficiency for small allocations, which will address some of the limitations present in current code.
::kstat.zfs.darwin.tunable.zfs_arc_max=<size in bytes of arc>
+
 
+
For those that wish to monitor the size and performance of the ARC, the arcstat.pl script has been provided.
+
::$ arcstat.pl 1
+
 
+
If you are trying to reduce the amount of memory used by O3X "right now", there are two steps. First reduce the maximum ARC size to a value of your choosing:
+
::$ sudo sysctl -w kstat.zfs.darwin.tunable.zfs_arc_max=<size of arc in bytes>
+
 
+
Then force the SPL memory allocator to release memory back to the OS:
+
::$ sudo sysctl -w kstat.spl.misc.spl_misc.simulate_pressure=<amount of ram to release in bytes>
+
 
+
The second operation forces the SPL memory allocator to be reaped, which will release memory from the internal caches to the OS. This is a fairly coarse mechanism and may have to be repeated several times to achieve the desired effect. You can monitor the Activity Monitor, top and/or arcstat.pl to determine whether you have released sufficient memory. Note that this will likely result in ARC being further pressured, and commensurate amounts of cached data being evicted from main memory.
+
 
+
We keep our ARC implementation in alignment with the Illumos code. There have recently been some performance tuning changes to Illumos ARC, these will flow through to O3X in a future release.
+
  
 
== Current Benchmarks ==
 
== Current Benchmarks ==

Please note that all contributions to OpenZFS on OS X may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see OpenZFS on OS X:Copyrights for details). Do not submit copyrighted work without permission!

Cancel | Editing help (opens in new window)