Deleted Added
full compact
arc.c (321613) arc.c (323667)
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE

--- 344 unchanged lines hidden (view full) ---

353 * These tunables are for performance analysis.
354 */
355uint64_t zfs_arc_max;
356uint64_t zfs_arc_min;
357uint64_t zfs_arc_meta_limit = 0;
358uint64_t zfs_arc_meta_min = 0;
359int zfs_arc_grow_retry = 0;
360int zfs_arc_shrink_shift = 0;
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE

--- 344 unchanged lines hidden (view full) ---

353 * These tunables are for performance analysis.
354 */
355uint64_t zfs_arc_max;
356uint64_t zfs_arc_min;
357uint64_t zfs_arc_meta_limit = 0;
358uint64_t zfs_arc_meta_min = 0;
359int zfs_arc_grow_retry = 0;
360int zfs_arc_shrink_shift = 0;
361int zfs_arc_no_grow_shift = 0;
361int zfs_arc_p_min_shift = 0;
362uint64_t zfs_arc_average_blocksize = 8 * 1024; /* 8KB */
363u_int zfs_arc_free_target = 0;
364
365/* Absolute min for arc min / max is 16MB. */
366static uint64_t arc_abs_min = 16 << 20;
367
368boolean_t zfs_compressed_arc_enabled = B_TRUE;
369
370static int sysctl_vfs_zfs_arc_free_target(SYSCTL_HANDLER_ARGS);
371static int sysctl_vfs_zfs_arc_meta_limit(SYSCTL_HANDLER_ARGS);
372static int sysctl_vfs_zfs_arc_max(SYSCTL_HANDLER_ARGS);
373static int sysctl_vfs_zfs_arc_min(SYSCTL_HANDLER_ARGS);
362int zfs_arc_p_min_shift = 0;
363uint64_t zfs_arc_average_blocksize = 8 * 1024; /* 8KB */
364u_int zfs_arc_free_target = 0;
365
366/* Absolute min for arc min / max is 16MB. */
367static uint64_t arc_abs_min = 16 << 20;
368
369boolean_t zfs_compressed_arc_enabled = B_TRUE;
370
371static int sysctl_vfs_zfs_arc_free_target(SYSCTL_HANDLER_ARGS);
372static int sysctl_vfs_zfs_arc_meta_limit(SYSCTL_HANDLER_ARGS);
373static int sysctl_vfs_zfs_arc_max(SYSCTL_HANDLER_ARGS);
374static int sysctl_vfs_zfs_arc_min(SYSCTL_HANDLER_ARGS);
375static int sysctl_vfs_zfs_arc_no_grow_shift(SYSCTL_HANDLER_ARGS);
374
375#if defined(__FreeBSD__) && defined(_KERNEL)
376static void
377arc_free_target_init(void *unused __unused)
378{
379
380 zfs_arc_free_target = vm_pageout_wakeup_thresh;
381}
382SYSINIT(arc_free_target_init, SI_SUB_KTHREAD_PAGE, SI_ORDER_ANY,
383 arc_free_target_init, NULL);
384
385TUNABLE_QUAD("vfs.zfs.arc_meta_limit", &zfs_arc_meta_limit);
386TUNABLE_QUAD("vfs.zfs.arc_meta_min", &zfs_arc_meta_min);
387TUNABLE_INT("vfs.zfs.arc_shrink_shift", &zfs_arc_shrink_shift);
376
377#if defined(__FreeBSD__) && defined(_KERNEL)
378static void
379arc_free_target_init(void *unused __unused)
380{
381
382 zfs_arc_free_target = vm_pageout_wakeup_thresh;
383}
384SYSINIT(arc_free_target_init, SI_SUB_KTHREAD_PAGE, SI_ORDER_ANY,
385 arc_free_target_init, NULL);
386
387TUNABLE_QUAD("vfs.zfs.arc_meta_limit", &zfs_arc_meta_limit);
388TUNABLE_QUAD("vfs.zfs.arc_meta_min", &zfs_arc_meta_min);
389TUNABLE_INT("vfs.zfs.arc_shrink_shift", &zfs_arc_shrink_shift);
390TUNABLE_INT("vfs.zfs.arc_grow_retry", &zfs_arc_grow_retry);
391TUNABLE_INT("vfs.zfs.arc_no_grow_shift", &zfs_arc_no_grow_shift);
388SYSCTL_DECL(_vfs_zfs);
389SYSCTL_PROC(_vfs_zfs, OID_AUTO, arc_max, CTLTYPE_U64 | CTLFLAG_RWTUN,
390 0, sizeof(uint64_t), sysctl_vfs_zfs_arc_max, "QU", "Maximum ARC size");
391SYSCTL_PROC(_vfs_zfs, OID_AUTO, arc_min, CTLTYPE_U64 | CTLFLAG_RWTUN,
392 0, sizeof(uint64_t), sysctl_vfs_zfs_arc_min, "QU", "Minimum ARC size");
392SYSCTL_DECL(_vfs_zfs);
393SYSCTL_PROC(_vfs_zfs, OID_AUTO, arc_max, CTLTYPE_U64 | CTLFLAG_RWTUN,
394 0, sizeof(uint64_t), sysctl_vfs_zfs_arc_max, "QU", "Maximum ARC size");
395SYSCTL_PROC(_vfs_zfs, OID_AUTO, arc_min, CTLTYPE_U64 | CTLFLAG_RWTUN,
396 0, sizeof(uint64_t), sysctl_vfs_zfs_arc_min, "QU", "Minimum ARC size");
397SYSCTL_PROC(_vfs_zfs, OID_AUTO, arc_no_grow_shift, CTLTYPE_U32 | CTLFLAG_RWTUN,
398 0, sizeof(uint32_t), sysctl_vfs_zfs_arc_no_grow_shift, "U",
399 "log2(fraction of ARC which must be free to allow growing)");
393SYSCTL_UQUAD(_vfs_zfs, OID_AUTO, arc_average_blocksize, CTLFLAG_RDTUN,
394 &zfs_arc_average_blocksize, 0,
395 "ARC average blocksize");
396SYSCTL_INT(_vfs_zfs, OID_AUTO, arc_shrink_shift, CTLFLAG_RW,
397 &arc_shrink_shift, 0,
398 "log2(fraction of arc to reclaim)");
400SYSCTL_UQUAD(_vfs_zfs, OID_AUTO, arc_average_blocksize, CTLFLAG_RDTUN,
401 &zfs_arc_average_blocksize, 0,
402 "ARC average blocksize");
403SYSCTL_INT(_vfs_zfs, OID_AUTO, arc_shrink_shift, CTLFLAG_RW,
404 &arc_shrink_shift, 0,
405 "log2(fraction of arc to reclaim)");
406SYSCTL_INT(_vfs_zfs, OID_AUTO, arc_grow_retry, CTLFLAG_RW,
407 &arc_grow_retry, 0,
408 "Wait in seconds before considering growing ARC");
399SYSCTL_INT(_vfs_zfs, OID_AUTO, compressed_arc_enabled, CTLFLAG_RDTUN,
400 &zfs_compressed_arc_enabled, 0, "Enable compressed ARC");
401
402/*
403 * We don't have a tunable for arc_free_target due to the dependency on
404 * pagedaemon initialisation.
405 */
406SYSCTL_PROC(_vfs_zfs, OID_AUTO, arc_free_target,

--- 653 unchanged lines hidden (view full) ---

1060 if (val <= 0 || val > arc_c_max)
1061 return (EINVAL);
1062
1063 arc_meta_limit = val;
1064 return (0);
1065}
1066
1067static int
409SYSCTL_INT(_vfs_zfs, OID_AUTO, compressed_arc_enabled, CTLFLAG_RDTUN,
410 &zfs_compressed_arc_enabled, 0, "Enable compressed ARC");
411
412/*
413 * We don't have a tunable for arc_free_target due to the dependency on
414 * pagedaemon initialisation.
415 */
416SYSCTL_PROC(_vfs_zfs, OID_AUTO, arc_free_target,

--- 653 unchanged lines hidden (view full) ---

1070 if (val <= 0 || val > arc_c_max)
1071 return (EINVAL);
1072
1073 arc_meta_limit = val;
1074 return (0);
1075}
1076
1077static int
1078sysctl_vfs_zfs_arc_no_grow_shift(SYSCTL_HANDLER_ARGS)
1079{
1080 uint32_t val;
1081 int err;
1082
1083 val = arc_no_grow_shift;
1084 err = sysctl_handle_32(oidp, &val, 0, req);
1085 if (err != 0 || req->newptr == NULL)
1086 return (err);
1087
1088 if (val >= arc_shrink_shift)
1089 return (EINVAL);
1090
1091 arc_no_grow_shift = val;
1092 return (0);
1093}
1094
1095static int
1068sysctl_vfs_zfs_arc_max(SYSCTL_HANDLER_ARGS)
1069{
1070 uint64_t val;
1071 int err;
1072
1073 val = zfs_arc_max;
1074 err = sysctl_handle_64(oidp, &val, 0, req);
1075 if (err != 0 || req->newptr == NULL)

--- 5424 unchanged lines hidden (view full) ---

6500 }
6501
6502 if (zfs_arc_grow_retry > 0)
6503 arc_grow_retry = zfs_arc_grow_retry;
6504
6505 if (zfs_arc_shrink_shift > 0)
6506 arc_shrink_shift = zfs_arc_shrink_shift;
6507
1096sysctl_vfs_zfs_arc_max(SYSCTL_HANDLER_ARGS)
1097{
1098 uint64_t val;
1099 int err;
1100
1101 val = zfs_arc_max;
1102 err = sysctl_handle_64(oidp, &val, 0, req);
1103 if (err != 0 || req->newptr == NULL)

--- 5424 unchanged lines hidden (view full) ---

6528 }
6529
6530 if (zfs_arc_grow_retry > 0)
6531 arc_grow_retry = zfs_arc_grow_retry;
6532
6533 if (zfs_arc_shrink_shift > 0)
6534 arc_shrink_shift = zfs_arc_shrink_shift;
6535
6536 if (zfs_arc_no_grow_shift > 0)
6537 arc_no_grow_shift = zfs_arc_no_grow_shift;
6508 /*
6509 * Ensure that arc_no_grow_shift is less than arc_shrink_shift.
6510 */
6511 if (arc_no_grow_shift >= arc_shrink_shift)
6512 arc_no_grow_shift = arc_shrink_shift - 1;
6513
6514 if (zfs_arc_p_min_shift > 0)
6515 arc_p_min_shift = zfs_arc_p_min_shift;

--- 1313 unchanged lines hidden ---
6538 /*
6539 * Ensure that arc_no_grow_shift is less than arc_shrink_shift.
6540 */
6541 if (arc_no_grow_shift >= arc_shrink_shift)
6542 arc_no_grow_shift = arc_shrink_shift - 1;
6543
6544 if (zfs_arc_p_min_shift > 0)
6545 arc_p_min_shift = zfs_arc_p_min_shift;

--- 1313 unchanged lines hidden ---