sysfs is a pseudo FileSystem that the LinuxKernel uses to export runtime configuration and statistics from drivers into userspace. By LSB convention it's mounted on /sys.

Note that some kernel options are still configured through /proc/sys (or equivalently using sysctl, which is also called at boot time to read /etc/sysctl.conf). A general rule of thumb is that if the kernel option is related directly to some piece of hardware, it's probably configured via sysfs (eg. NIC settings such as MTU), and if it has to do with other kernel behaviour (eg. network Protocol settings), it'll be accessable via /proc/sys. Other examples for things you tweak via sysfs include RAID, SCSI and other BlockDevice configuration such as IO schedulers.

The sysfsutils contain a library and a CommandLine tool called systool to explore /sys and display and alter current settings. The corresponding Debian Package also uses this tool to provide boot time configuration of SysFs values through the /etc/sysfs.conf file.

Parts of SysFs are being deprecated. For example see - this is one of several messages I've seen around different areas of SysFs and to me it seems like SysFs is losing favour -- opinion of IanMcDonald

The above message clearly refers to parts of sysfs that it is now considered should not have been included. The rationale for the existence of sysfs--as the preferred userspace-visible representation of information the kernel has about hardware--still remains, with no signs of any plans to make this information available in any other form. This information was moved out of ProcFs? because the latter was simply turning into a dumping ground for information that had nothing to do with processes.

See also this LKML discussion about current sysfs maintenance issues.

-- LawrenceDoliveiro