이 과정에서 정확히 무슨 일이 일어났나요?

이 과정에서 정확히 무슨 일이 일어났나요?

그래서 다음 명령을 실행했는데 우연히 모니터를 발견하고 도대체 무슨 일이 일어나고 있는지 궁금해졌습니다. 누군가 여기서 정확히 무슨 일이 일어나고 있는지 나에게 설명해 줄 수 있습니까?

echo "`seq 100000000 -1 1`" > file

명령 실행 시 시스템 모니터 스크린샷

이미지가 로드되지 않는 현상이 여러 번 발생했기 때문에 이미지에서 본 내용을 설명하려고 합니다. 메모리 사용량은 선형적으로 증가하고, CPU1 사용량은 100%로 고정된 다음, 시간 t1(거의 눈에 띄지 않음) t2 t3 t4 t5 메모리 사용량이 약 0.5초 동안 갑자기 더 빠르게 증가하고, CPU1 사용량이 감소하고, CPU2 사용량이 증가하며, 모든 시점이 동시에 메모리 증가율은 정확히 동일한 기울기에서 선형 형태로 돌아가고, CPU1 사용량은 다시 100%로 증가하며, CPU2 사용량은 0.5초 내에 이전 상태로 돌아갑니다. 흥미로운 점은 다음과 같습니다.

t(i)-t(i-1) = 2*(t(i+1)-t(i))     for every i
The amount of decrease in CPU1 usage doubles for each i
The time interval in which these things take seems to be the same for all i
The amount of sudden growth in memory usage also doubles for all i
The sum of the loads of CPU1 and CPU2 seem to be constant in time.

그래서 하나의 질문에 여러 가지 질문을 하게 되는데, 이 방법이 가장 좋은 방법인 것 같습니다. 같은 사진을 5번이나 거의 같은 설명으로 올리는 대신.

이러한 관찰이 발생하는 이유를 누군가 나에게 설명해 줄 수 있습니까?

메모리 정보:

$ sudo lshw -class memory
  *-firmware              
       description: BIOS
       vendor: LENOVO
       physical id: 0
       version: 9ECN31WW(V1.14)
       date: 08/18/2014
       size: 128KiB
       capacity: 6592KiB
       capabilities: pci upgrade shadowing cdboot bootselect edd int13floppynec int13floppytoshiba int13floppy360 int13floppy1200 int13floppy720 int13floppy2880 int9keyboard int10video acpi usb biosbootspecification uefi
  *-cache:0
       description: L1 cache
       physical id: b
       slot: L1 Cache
       size: 32KiB
       capacity: 32KiB
       capabilities: synchronous internal write-back instruction
       configuration: level=1
  *-cache:1
       description: L2 cache
       physical id: c
       slot: L2 Cache
       size: 256KiB
       capacity: 256KiB
       capabilities: synchronous internal write-back unified
       configuration: level=2
  *-cache:2
       description: L3 cache
       physical id: d
       slot: L3 Cache
       size: 6MiB
       capacity: 6MiB
       capabilities: synchronous internal write-back unified
       configuration: level=3
  *-cache
       description: L1 cache
       physical id: a
       slot: L1 Cache
       size: 32KiB
       capacity: 32KiB
       capabilities: synchronous internal write-back data
       configuration: level=1
  *-memory
       description: System Memory
       physical id: 2a
       slot: System board or motherboard
       size: 8GiB
     *-bank:0
          description: SODIMM DDR3 Synchronous 1600 MHz (0.6 ns)
          product: HMT451S6BFR8A-PB
          vendor: Unknown
          physical id: 0
          serial: 1E52E0EA
          slot: DIMM0
          size: 4GiB
          width: 64 bits
          clock: 1600MHz (0.6ns)
     *-bank:1
          description: DIMM [empty]
          product: Empty
          vendor: Empty
          physical id: 1
          serial: Empty
          slot: DIMM1
     *-bank:2
          description: SODIMM DDR3 Synchronous 1600 MHz (0.6 ns)
          product: HMT451S6BFR8A-PB
          vendor: Unknown
          physical id: 2
          serial: 1E82E0B8
          slot: DIMM2
          size: 4GiB
          width: 64 bits
          clock: 1600MHz (0.6ns)
     *-bank:3
          description: DIMM [empty]
          product: Empty
          vendor: Empty
          physical id: 3
          serial: Empty
          slot: DIMM3

CPU 정보:

$ sudo lshw -class processor
  *-cpu                   
       description: CPU
       product: Intel(R) Core(TM) i7-4700HQ CPU @ 2.40GHz
       vendor: Intel Corp.
       physical id: 4
       bus info: cpu@0
       version: Intel(R) Core(TM) i7-4700HQ CPU @ 2.40GHz
       serial: To Be Filled By O.E.M.
       slot: U3E1
       size: 3285MHz
       capacity: 3400MHz
       width: 64 bits
       clock: 100MHz
       capabilities: x86-64 fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm epb tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt dtherm ida arat pln pts cpufreq
       configuration: cores=4 enabledcores=4 threads=8

커널 및 운영 체제 정보

$ uname -a
Linux <Machine name> 4.10.0-42-generic #46~16.04.1-Ubuntu SMP x86_64 x86_64 x86_64 GNU/Linux

쉘 정보:

$ $SHELL --version
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)

교환 정보:

$ lsblk | grep SWAP
├─sda2   8:2    0   935M  0 part [SWAP]

답변1

약 848MB의 출력을 생성하는 명령을 실행하고 있으며 이를 쉘 명령줄 인수에 삽입한 다음 echo파일로 리디렉션하려고 합니다. (그런데 현대 시스템의 최신 쉘에서는 명령줄 길이가 수 메가바이트에 이를 수 있지만 거의 기가바이트에 가까운 명령줄은 허용되지 않습니다.)

이것이 RAM과 CPU 전력을 많이 사용한다는 사실에 놀랄 이유가 있습니까?

이를 실행하는 데에도 seq 100000000 -1 1 > file상당한 시간이 걸리지만, 명령 대체 없이는 출력을 메모리에 보관할 필요가 없기 때문에 메모리 사용량은 그다지 많지 않습니다.

예를 들어, 내 AMD Phenom II 1090T에서 명령을 실행 seq하고 해당 출력을 파일로 리디렉션하는 데 1분 2초가 걸립니다.

$ time seq 100000000 -1 1 > /tmp/seq.test

real 1m2.136s   user 1m0.215s   sys 0m1.405s
$ ls -lh /tmp/seq.test 
-rw-r--r-- 1 cas cas 848M Jan  8 12:06 /tmp/seq.test

관련 정보