cat /proc/vmallocinfo의 출력 해석

cat /proc/vmallocinfo의 출력 해석

실행 후 이 출력은 무엇을 나타냅니까 cat /proc/vmallocinfo? 나는 이것이 커널의 가상 주소 공간 매핑을 제공한다는 것을 알고 있습니다. 그러나 나는 더 깊은 이해를 갖고 싶습니다.

질문

  • 실제 할당은 어떻게 이루어지나요 vmalloc()?
  • 여러 할당이 표시되는 이유는 무엇입니까 n_tty_open?
  • 다음과 같은 두 할당 사이에 간격이 있는 이유는 무엇입니까?

    • 0xffffc90004000000-0xffffc9000500100016781312 pci_iomap_range+0x66/0x80 phys=e0000000 ioremap

    • 0xffffe8ffffc00000-0xffffe8ffffe00000 2097152 pcpu_get_vm_areas+0x0/0x570 vmalloc

그리고 내 의심을 명확히 할 수 있는 다른 리소스는 다음과 같습니다.

0xffffc90000000000-0xffffc90000004000   16384 acpi_os_map_iomem+0xf6/0x154 phys=bfff0000 ioremap
0xffffc90000004000-0xffffc90000405000 4198400 alloc_large_system_hash+0x17a/0x238 pages=1024 vmalloc vpages N0=1024
0xffffc90000405000-0xffffc90000408000   12288 alloc_large_system_hash+0x17a/0x238 pages=2 vmalloc N0=2
0xffffc90000408000-0xffffc90000609000 2101248 alloc_large_system_hash+0x17a/0x238 pages=512 vmalloc N0=512
0xffffc90000609000-0xffffc9000061a000   69632 alloc_large_system_hash+0x17a/0x238 pages=16 vmalloc N0=16
0xffffc9000061a000-0xffffc9000062b000   69632 alloc_large_system_hash+0x17a/0x238 pages=16 vmalloc N0=16
0xffffc9000062b000-0xffffc9000062d000    8192 bpf_prog_alloc+0x36/0xa0 pages=1 vmalloc N0=1
0xffffc9000062d000-0xffffc9000066e000  266240 alloc_large_system_hash+0x17a/0x238 pages=64 vmalloc N0=64
0xffffc9000066e000-0xffffc900006ef000  528384 alloc_large_system_hash+0x17a/0x238 pages=128 vmalloc N0=128
0xffffc900006ef000-0xffffc90000700000   69632 alloc_large_system_hash+0x17a/0x238 pages=16 vmalloc N0=16
0xffffc90000700000-0xffffc90000711000   69632 alloc_large_system_hash+0x17a/0x238 pages=16 vmalloc N0=16
0xffffc90000711000-0xffffc90000716000   20480 alloc_large_system_hash+0x17a/0x238 pages=4 vmalloc N0=4
0xffffc90000716000-0xffffc90000718000    8192 bpf_prog_alloc+0x36/0xa0 pages=1 vmalloc N0=1
0xffffc90000718000-0xffffc9000071b000   12288 zs_cpu_notifier+0x49/0x90 ioremap
0xffffc9000071b000-0xffffc9000071d000    8192 bpf_prog_alloc+0x36/0xa0 pages=1 vmalloc N0=1
0xffffc9000071d000-0xffffc9000071f000    8192 bpf_prog_alloc+0x36/0xa0 pages=1 vmalloc N0=1
0xffffc9000071f000-0xffffc90000721000    8192 bpf_prog_alloc+0x36/0xa0 pages=1 vmalloc N0=1
0xffffc90000721000-0xffffc90000723000    8192 bpf_prog_alloc+0x36/0xa0 pages=1 vmalloc N0=1
0xffffc90000723000-0xffffc90000725000    8192 bpf_prog_alloc+0x36/0xa0 pages=1 vmalloc N0=1
0xffffc90000725000-0xffffc90000727000    8192 bpf_prog_alloc+0x36/0xa0 pages=1 vmalloc N0=1
0xffffc90000727000-0xffffc90000729000    8192 bpf_prog_alloc+0x36/0xa0 pages=1 vmalloc N0=1
0xffffc9000072b000-0xffffc9000072f000   16384 n_tty_open+0x19/0xe0 pages=3 vmalloc N0=3
0xffffc90000730000-0xffffc90000733000   12288 pci_iomap_range+0x66/0x80 phys=f0806000 ioremap
0xffffc90000733000-0xffffc90000737000   16384 n_tty_open+0x19/0xe0 pages=3 vmalloc N0=3
0xffffc90000737000-0xffffc9000073b000   16384 n_tty_open+0x19/0xe0 pages=3 vmalloc N0=3
0xffffc9000073b000-0xffffc9000073f000   16384 n_tty_open+0x19/0xe0 pages=3 vmalloc N0=3
0xffffc9000073f000-0xffffc90000741000    8192 bpf_prog_alloc+0x36/0xa0 pages=1 vmalloc N0=1
0xffffc90000741000-0xffffc90000745000   16384 e1000_setup_all_tx_resources+0x97/0x550 [e1000] pages=3 vmalloc N0=3
0xffffc90000745000-0xffffc90000747000    8192 e1000_setup_all_rx_resources+0xa6/0x560 [e1000] pages=1 vmalloc N0=1
0xffffc90000747000-0xffffc9000074b000   16384 n_tty_open+0x19/0xe0 pages=3 vmalloc N0=3

답변1

  • vmalloc()연속되지 않은 물리적 페이지는 연속된 가상 주소 영역에 할당되고 매핑됩니다. 이러한 vmalloc 가상 주소는 커널 공간의 vmalloc 영역으로 제한됩니다. (x86_64 플랫폼에서는 0xffffc90000000000UL정보가 표시되면 시작됩니다)
  • n_tty_open함수는 vmalloc을 사용하여 struct n_tty_data. 이는 커널 소스 코드에서 확인할 수 있습니다.
  • 각 vmalloc 영역은 오버플로를 방지하기 위해 페이지 간격을 사용합니다.

관련 정보