Spustil jsem tedy následující příkaz a náhodou jsem viděl monitor a zajímalo mě, co se přesně děje. může mi někdo vysvětlit, co se tady přesně děje?
echo "`seq 100000000 -1 1`" > file
Protože se mi mnohokrát stává, že se mi obrázky nenačítají, snažím se popsat, co na nich vidím. Využití paměti roste lineárně a využití CPU1 je pevně nastaveno na 100 %, pak v časech t1 (sotva znatelné) t2 t3 t4 t5 využití paměti najednou roste mnohem rychleji asi na půl sekundy a využití CPU1 klesá a využití CPU2 se zvyšuje. ve stejnou dobu se rychlost růstu paměti vrátí do své lineární podoby s přesně stejným sklonem a využití CPU1 opět naroste ke 100 % a využití CPU2 klesne na svůj předchozí stav za další půl sekundy. Zajímavé jsou, že:
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.
Pokládám tedy několik otázek v jedné otázce, ale myslím si, že toto je nejlepší způsob, jak to udělat. Raději než 5krát zveřejňovat stejný obrázek s téměř stejnými vysvětleními.
Může mi prosím někdo vysvětlit, proč přesně k těmto pozorováním dochází?
Informace o paměti:
$ 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
Informace o 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: [email protected]
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
Informace o jádře a operačním systému
$ uname -a
Linux <Machine name> 4.10.0-42-generic #46~16.04.1-Ubuntu SMP x86_64 x86_64 x86_64 GNU/Linux
Informace o shellu:
$ $SHELL --version
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
Vyměnit informace:
$ lsblk | grep SWAP
├─sda2 8:2 0 935M 0 part [SWAP]
Přijatá odpověď:
Spouštíte příkaz, který generuje ~848 MB výstupu, a pokoušíte se to interpolovat do argumentu příkazového řádku shellu pro echo
a poté přesměrování do souboru. (BTW, moderní shelly na moderních systémech umožňují příkazové řádky dlouhé až několik megabajtů, ale žádný neumožní téměř gigabajt).
Existuje nějaký důvod k překvapení, že to využívá enormní množství paměti RAM a výkonu CPU?
Dokonce i spuštění seq 100000000 -1 1 > file
zabere to dost času, ale ani zdaleka ne tak velké využití paměti, protože bez substituce příkazů nemusí být výstup uchováván v paměti.
např. na mém AMD Phenom II 1090T trvá spuštění seq
1 minutu a 2 sekundy a přesměrujte jeho výstup do souboru:
$ 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