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 --- |