1*7a7741afSMartin Matuska /* 2*7a7741afSMartin Matuska * CDDL HEADER START 3*7a7741afSMartin Matuska * 4*7a7741afSMartin Matuska * The contents of this file are subject to the terms of the 5*7a7741afSMartin Matuska * Common Development and Distribution License (the "License"). 6*7a7741afSMartin Matuska * You may not use this file except in compliance with the License. 7*7a7741afSMartin Matuska * 8*7a7741afSMartin Matuska * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*7a7741afSMartin Matuska * or https://opensource.org/licenses/CDDL-1.0. 10*7a7741afSMartin Matuska * See the License for the specific language governing permissions 11*7a7741afSMartin Matuska * and limitations under the License. 12*7a7741afSMartin Matuska * 13*7a7741afSMartin Matuska * When distributing Covered Code, include this CDDL HEADER in each 14*7a7741afSMartin Matuska * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*7a7741afSMartin Matuska * If applicable, add the following below this CDDL HEADER, with the 16*7a7741afSMartin Matuska * fields enclosed by brackets "[]" replaced with your own identifying 17*7a7741afSMartin Matuska * information: Portions Copyright [yyyy] [name of copyright owner] 18*7a7741afSMartin Matuska * 19*7a7741afSMartin Matuska * CDDL HEADER END 20*7a7741afSMartin Matuska */ 21*7a7741afSMartin Matuska /* 22*7a7741afSMartin Matuska * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. 23*7a7741afSMartin Matuska * Copyright (c) 2018, Joyent, Inc. 24*7a7741afSMartin Matuska * Copyright (c) 2011, 2019 by Delphix. All rights reserved. 25*7a7741afSMartin Matuska * Copyright (c) 2014 by Saso Kiselkov. All rights reserved. 26*7a7741afSMartin Matuska * Copyright 2017 Nexenta Systems, Inc. All rights reserved. 27*7a7741afSMartin Matuska */ 28*7a7741afSMartin Matuska 29*7a7741afSMartin Matuska #include <sys/zfs_context.h> 30*7a7741afSMartin Matuska #include <sys/arc_impl.h> 31*7a7741afSMartin Matuska 32*7a7741afSMartin Matuska /* 33*7a7741afSMartin Matuska * Return a default max arc size based on the amount of physical memory. 34*7a7741afSMartin Matuska * This may be overridden by tuning the zfs_arc_max module parameter. 35*7a7741afSMartin Matuska */ 36*7a7741afSMartin Matuska uint64_t 37*7a7741afSMartin Matuska arc_default_max(uint64_t min, uint64_t allmem) 38*7a7741afSMartin Matuska { 39*7a7741afSMartin Matuska uint64_t size; 40*7a7741afSMartin Matuska 41*7a7741afSMartin Matuska if (allmem >= 1 << 30) 42*7a7741afSMartin Matuska size = allmem - (1 << 30); 43*7a7741afSMartin Matuska else 44*7a7741afSMartin Matuska size = min; 45*7a7741afSMartin Matuska return (MAX(allmem * 5 / 8, size)); 46*7a7741afSMartin Matuska } 47*7a7741afSMartin Matuska 48*7a7741afSMartin Matuska int64_t 49*7a7741afSMartin Matuska arc_available_memory(void) 50*7a7741afSMartin Matuska { 51*7a7741afSMartin Matuska int64_t lowest = INT64_MAX; 52*7a7741afSMartin Matuska 53*7a7741afSMartin Matuska /* Every 100 calls, free a small amount */ 54*7a7741afSMartin Matuska if (random_in_range(100) == 0) 55*7a7741afSMartin Matuska lowest = -1024; 56*7a7741afSMartin Matuska 57*7a7741afSMartin Matuska return (lowest); 58*7a7741afSMartin Matuska } 59*7a7741afSMartin Matuska 60*7a7741afSMartin Matuska int 61*7a7741afSMartin Matuska arc_memory_throttle(spa_t *spa, uint64_t reserve, uint64_t txg) 62*7a7741afSMartin Matuska { 63*7a7741afSMartin Matuska (void) spa, (void) reserve, (void) txg; 64*7a7741afSMartin Matuska return (0); 65*7a7741afSMartin Matuska } 66*7a7741afSMartin Matuska 67*7a7741afSMartin Matuska uint64_t 68*7a7741afSMartin Matuska arc_all_memory(void) 69*7a7741afSMartin Matuska { 70*7a7741afSMartin Matuska return (ptob(physmem) / 2); 71*7a7741afSMartin Matuska } 72*7a7741afSMartin Matuska 73*7a7741afSMartin Matuska uint64_t 74*7a7741afSMartin Matuska arc_free_memory(void) 75*7a7741afSMartin Matuska { 76*7a7741afSMartin Matuska return (random_in_range(arc_all_memory() * 20 / 100)); 77*7a7741afSMartin Matuska } 78*7a7741afSMartin Matuska 79*7a7741afSMartin Matuska void 80*7a7741afSMartin Matuska arc_register_hotplug(void) 81*7a7741afSMartin Matuska { 82*7a7741afSMartin Matuska } 83*7a7741afSMartin Matuska 84*7a7741afSMartin Matuska void 85*7a7741afSMartin Matuska arc_unregister_hotplug(void) 86*7a7741afSMartin Matuska { 87*7a7741afSMartin Matuska } 88