svn commit: r321790 - head/sbin/sysctl
Andrew Gallatin
gallatin at netflix.com
Tue Aug 1 12:53:50 UTC 2017
On 07/31/17 13:20, John Baldwin wrote:
> On Monday, July 31, 2017 02:56:35 PM Andrew Gallatin wrote:
>> Author: gallatin
>> Date: Mon Jul 31 14:56:35 2017
>> New Revision: 321790
>> URL: https://urldefense.proofpoint.com/v2/url?u=https-3A__svnweb.freebsd.org_changeset_base_321790&d=DwICAg&c=imBPVzF25OnBgGmVOlcsiEgHoG1i6YHLR0Sj_gZ4adc&r=Ed-falealxPeqc22ehgAUCLh8zlZbibZLSMWJeZro4A&m=6pTZhALOHVMuNxvC0RsuEoG4j_dKwjmuXgxC_aZLwj4&s=iX60l0OLjrKSEAZM1J0IrtmCEX_ZvHr2sMgDd4SdHxg&e=
>>
>> Log:
>> Don't request CTLTYPE_OPAQUE if we can't print them.
>>
>> The intent is to skip expensive opaque sysctls like tcp_pcblist unless
>> they are explicitly requested. Sysctl nodes like this don't show up in
>> sysctl -a, but they do generate output that winds up being dropped,
>> unless the user specifically requested binary/hex output or opaques.
>>
>> This reduces the runtime of sysctl in many circumstances on a loaded
>> system. It also reduces the likelihood that simply gathering
>> diagnostics on a sick machine (stuck lock, etc) via sysctl -a might
>> push it over the edge into a total lockup.
>>
>> Reviewed by: jtl
>> Sponsored by: Netflix
>> Differential Revision: https://urldefense.proofpoint.com/v2/url?u=https-3A__reviews.freebsd.org_D11461&d=DwICAg&c=imBPVzF25OnBgGmVOlcsiEgHoG1i6YHLR0Sj_gZ4adc&r=Ed-falealxPeqc22ehgAUCLh8zlZbibZLSMWJeZro4A&m=6pTZhALOHVMuNxvC0RsuEoG4j_dKwjmuXgxC_aZLwj4&s=b-hXEv1EHJwVhKxSsmgugUz3RBcGHN7oxcMcI3Dbp_c&e=
>>
>> Modified:
>> head/sbin/sysctl/sysctl.c
>>
>> Modified: head/sbin/sysctl/sysctl.c
>> ==============================================================================
>> --- head/sbin/sysctl/sysctl.c Mon Jul 31 14:53:03 2017 (r321789)
>> +++ head/sbin/sysctl/sysctl.c Mon Jul 31 14:56:35 2017 (r321790)
>> @@ -925,6 +925,32 @@ show_var(int *oid, int nlen)
>> printf("%s", buf);
>> return (0);
>> }
>> +
>> + /* don't fetch opaques that we don't know how to print */
>> + if (ctltype == CTLTYPE_OPAQUE) {
>> + if (strcmp(fmt, "S,clockinfo") == 0)
>> + func = S_clockinfo;
>> + else if (strcmp(fmt, "S,timeval") == 0)
>> + func = S_timeval;
>> + else if (strcmp(fmt, "S,loadavg") == 0)
>> + func = S_loadavg;
>> + else if (strcmp(fmt, "S,vmtotal") == 0)
>> + func = S_vmtotal;
>> +#ifdef __amd64__
>> + else if (strcmp(fmt, "S,efi_map_header") == 0)
>> + func = S_efi_map;
>> +#endif
>> +#if defined(__amd64__) || defined(__i386__)
>> + else if (strcmp(fmt, "S,bios_smap_xattr") == 0)
>> + func = S_bios_smap_xattr;
>> +#endif
>> + else {
>> + func = NULL;
>> + if (!bflag && !oflag && !xflag)
>> + return (1);
>> + }
>> + }
>> +
>> /* find an estimate of how much we need for this var */
>> if (Bflag)
>> j = Bflag;
>> @@ -1045,24 +1071,6 @@ show_var(int *oid, int nlen)
>>
>> case CTLTYPE_OPAQUE:
>> i = 0;
>> - if (strcmp(fmt, "S,clockinfo") == 0)
>> - func = S_clockinfo;
>> - else if (strcmp(fmt, "S,timeval") == 0)
>> - func = S_timeval;
>> - else if (strcmp(fmt, "S,loadavg") == 0)
>> - func = S_loadavg;
>> - else if (strcmp(fmt, "S,vmtotal") == 0)
>> - func = S_vmtotal;
>> -#ifdef __amd64__
>> - else if (strcmp(fmt, "S,efi_map_header") == 0)
>> - func = S_efi_map;
>> -#endif
>> -#if defined(__amd64__) || defined(__i386__)
>> - else if (strcmp(fmt, "S,bios_smap_xattr") == 0)
>> - func = S_bios_smap_xattr;
>> -#endif
>> - else
>> - func = NULL;
>> if (func) {
>
> func should always be true now?
>
Not if you've set one of the flags to dump raw data. Eg, try
sysctl -o net.inet.tcp.pcblist
Drew
More information about the svn-src-all
mailing list