一、linux内核文件系统:proc、tmpfs、devfs、sysfs
[root@dewan01 ~]# lsblk ## 环境只有一块40G硬盘,其上包含一个分区vda1
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 40G 0 disk
└─vda1 253:1 0 40G 0 part /
[root@dewan01 ~]# df -h ## tmpfs是一种基于内存的文件系统
Filesystem Size Used Avail Use% Mounted on
devtmpfs 422M 0 422M 0% /dev
tmpfs 432M 0 432M 0% /dev/shm
tmpfs 432M 12M 420M 3% /run
tmpfs 432M 0 432M 0% /sys/fs/cgroup
/dev/vda1 40G 5.8G 32G 16% /
tmpfs 87M 0 87M 0% /run/user/0
[root@dewan01 bus]# du -sh /proc/ /sys/
0 /proc/
0 /sys/
/sys
在 Linux 2.5 内核的开发过程中,人们设计了一套新的设备模型,目的是为了对计算机上的所有设备进行统一地表示和操作,包括设备本身和设备之间的连接关系。这个模型是在分析了 PCI 和 USB 的总线驱动过程中得到的,这两个总线类型能代表当前系统中的大多数设备类型。为了将这些有层次结构的设备以用户程序可见的方式表达出来,人们很自然想到了利用文件系统的目录树结构(这是以 UNIX 方式思考问题的基础,一切都是文件!)
引用链接:使用/sys文件系统访问系统内核
sysfs 虚拟文件系统提供了一种比 proc 更为理想的访问内核数据的途径.
sysfs 文件系统总是被挂载在/sys
挂载点上。
sysfs 与 proc 相比有很多优点,最重要的莫过于设计上的清晰。
其设计原则是一个属性文件只做一件事情, sysfs 属性文件一般只有一个值,直接读取或写入。
新设计的内核机制应该尽量使用 sysfs 机制,而将 proc 保留给纯净的“进程文件系统”。
sysfs 给应用程序提供了统一访问设备的接口,但可以看到, sysfs 仅仅是提供了一个可以统一访问设备的框架,但究竟是否支持 sysfs 还需要各设备驱动程序的编程支持;在 2.6 内核诞生 5年以来的发展中,很多子系统、设备驱动程序逐渐转向了 sysfs 作为与用户空间友好的接口,但仍然也存在大量的代码还在使用旧的 proc 或虚拟字符设备的 ioctl 方式;如果仅从最终用户的角度来说, sysfs 与 proc 都是在提供相同或类似的功能,对于旧的 proc 代码,没有绝对的必要去做 proc 至 sysfs 的升级;因此在可预见的将来, sysfs 会与 proc, debugfs, configfs 等共存很长一段时间。
[root@dewan01 sys]# ls -F
block/ bus/ class/ dev/ devices/ firmware/ fs/ hypervisor/ kernel/ module/ power/
[root@dewan01 sys]# ls |xargs ls
**block**: ## 查看系统块设备,其内容已经包含在/sys/class/block目录下,因为历史原因这个目录一直保留。
vda
**bus**: ## 按总线类型分层放置的目录结构
acpi clocksource cpu event_source i2c ishtp mdio_bus mipi-dsi nvmem pci_express pnp serio thunderbolt usb virtio xen
clockevents container edac hid iio machinecheck memory node pci platform scsi spi typec usb-serial workqueue
**class**: ## 按功能进行分类组织的设备层次树
ata_device backlight bsg dma drm_dp_aux_dev hidraw i2c-adapter leds misc pci_bus power_supply raw scsi_host tpm typec virtio-ports
ata_link bdi cpuid dmi gpio hmm_device input mdio_bus msr pcmcia_socket ppdev rtc spi_master tpmrm usbmon vtconsole
ata_port **block** devcoredump drm graphics hwmon iommu mem net powercap pwm scsi_device thermal tty vc watchdog
dev:
block char
devices: ## 统一设备模型中最基本的类型,以设备本身的连接按层次组织的目录结构
breakpoint cpu kprobe LNXSYSTM:00 msr pci0000:00 platform pnp0 power software system tracepoint uprobe virtual
firmware:
acpi dmi memmap qemu_fw_cfg
fs:
bpf cgroup ext4 pstore
hypervisor:
kernel:
boot_params debug iommu_groups kexec_crash_size livepatch notes rcu_expedited slab uevent_seqnum
config fscaps kexec_crash_loaded kexec_loaded mm profiling security uevent_helper vmcoreinfo
module:
8250 cirrus drm fb_sys_fops hid_ntrig joydev md_mod pci_hotplug rcupdate spurious tpm_tis virtio_blk xhci_hcd
ablk_helper configfs drm_kms_helper firmware_class i2c_piix4 kdb_main module pci_slot rcutree suspend tpm_tis_core virtio_console xz_dec
acpi cpuidle drm_panel_orientation_quirks floppy i8042 kernel mousedev pcmcia_core rng_core syscopyarea ttm virtio_net zswap
acpiphp crc32c_intel dynamic_debug gf128mul intel_idle keyboard netpoll pcspkr sb_edac sysfillrect uhci_hcd virtio_pci
aesni_intel crc32_pclmul edac_core ghash_clmulni_intel intel_ishtp kgdboc parport ppdev scsi_dh_alua sysimgblt usbcore virtio_ring
ata_generic crct10dif_common efi_pstore glue_helper iosf_mbi kgdbts parport_pc printk scsi_dh_rdac sysrq usbhid vmd
ata_piix crct10dif_pclmul efivars hid ip_tables libata pata_acpi processor scsi_mod tcp_cubic uv_nmi vt
battery cryptd ehci_hcd hid_apple ipv6 lrw pcie_aspm psmouse serio_raw thermal virtio watchdog
block debug_core ext4 hid_magicmouse jbd2 mbcache pciehp pstore shpchp tpm virtio_balloon workqueue
power:
disk image_size pm_async pm_freeze_timeout pm_print_times pm_test pm_trace pm_trace_dev_match reserved_size resume state wakeup_count
/proc
附录
udev 是Linux kernel 2.6系列的设备管理器。它主要的功能是管理
/dev
目录底下的设备节点。它同时也是用来接替devfs及hotplug的功能,这意味着它要在添加/删除硬件时处理/dev目录以及所有用户空间的行为,包括加载firmware时。udev系统由三个部分组成:
- libudev函数库,可以用来获取设备的信息,/usr/include/libudev.h。
- udevd守护进程,处于用户空间,用于管理虚拟/dev
- 管理命令udevadm,用来诊断出错情况,/usr/bin/udevadm。
针对RedHatEnterprise Linux进行性能优化。1) Linux Proc文件系统,通过对Proc文件系统进行调整,达到性能优化的目的。2) Linux性能诊断工具,介绍如何使用Linux自带的诊断工具进行性能诊断。
所有的TCP/IP调优参数都位于/proc/sys/net/目录。例如, 下面是最重要的一些调优参数,后面是它们的含义:
1./proc/sys/net/core/rmem_max — 最大的TCP数据接收缓冲
2./proc/sys/net/core/wmem_max — 最大的TCP数据发送缓冲
3./proc/sys/net/ipv4/tcp_timestamps — 时间戳在(请参考RFC 1323)TCP的包头增加12个字节
4./proc/sys/net/ipv4/tcp_sack — 有选择的应答
5./proc/sys/net/ipv4/tcp_window_scaling — 支持更大的TCP窗口. 如果TCP窗口最大超过65535(64K), 必须设置该数值为1
6./proc/sys/net/core/rmem_default — 默认的接收窗口大小
7./proc/sys/net/core/rmem_max — 接收窗口的最大大小
8./proc/sys/net/core/wmem_default — 默认的发送窗口大小
9./proc/sys/net/core/wmem_max — 发送窗口的最大大小