Linux 相关的重要基础知识

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

附录

Linux udev 设备管理器

udev 是Linux kernel 2.6系列的设备管理器。它主要的功能是管理/dev目录底下的设备节点。它同时也是用来接替devfs及hotplug的功能,这意味着它要在添加/删除硬件时处理/dev目录以及所有用户空间的行为,包括加载firmware时。udev系统由三个部分组成:

  1. libudev函数库,可以用来获取设备的信息,/usr/include/libudev.h。
  2. udevd守护进程,处于用户空间,用于管理虚拟/dev
  3. 管理命令udevadm,用来诊断出错情况,/usr/bin/udevadm。

基于/proc/sys的内核调优方法

针对RedHatEnterprise Linux进行性能优化。1) Linux Proc文件系统,通过对Proc文件系统进行调整,达到性能优化的目的。2) Linux性能诊断工具,介绍如何使用Linux自带的诊断工具进行性能诊断。

使用/proc/sys的TCP/IP调优

所有的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 — 发送窗口的最大大小

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值