htop output & threads

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Ik begrijp de volgende htop output niet. 1650 is het process ID en de main thread, de andere regels zijn threads binnen dat process, tot dusver geen probleem.
Bij de main thread zie ik echter een CPU usage van 217%, dat kan natuurlijk niet een thread zijn.
Is dit het totaal van alle threads? Zo nee, wat is het dan?
Zo ja, het totaal van de andere threads lijkt geen 217% te zijn en hoe zie ik dan CPU% van alleen de main thread?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 1650 mysql      20   0 6998M  332M 18140 S 217.  0.5 21:19.63 ├─ /usr/sbin/mysqld
20212 mysql      20   0 6998M  332M 18140 R  2.6  0.5  0:00.05 │  ├─ /usr/sbin/mysqld 
20204 mysql      20   0 6998M  332M 18140 S  2.6  0.5  0:00.04 │  ├─ /usr/sbin/mysqld 
20194 mysql      20   0 6998M  332M 18140 S  3.3  0.5  0:00.05 │  ├─ /usr/sbin/mysqld 
20193 mysql      20   0 6998M  332M 18140 S  3.3  0.5  0:00.06 │  ├─ /usr/sbin/mysqld 
20162 mysql      20   0 6998M  332M 18140 S  2.6  0.5  0:00.06 │  ├─ /usr/sbin/mysqld 
20147 mysql      20   0 6998M  332M 18140 S  2.6  0.5  0:00.06 │  ├─ /usr/sbin/mysqld 
20115 mysql      20   0 6998M  332M 18140 S  2.6  0.5  0:00.07 │  ├─ /usr/sbin/mysqld 
 2050 mysql      20   0 6998M  332M 18140 S  0.0  0.5  0:03.87 │  ├─ /usr/sbin/mysqld 
 2045 mysql      20   0 6998M  332M 18140 S  0.0  0.5  0:00.49 │  ├─ /usr/sbin/mysqld 
 2021 mysql      20   0 6998M  332M 18140 S  0.0  0.5  1:29.37 │  ├─ /usr/sbin/mysqld 
 1983 mysql      20   0 6998M  332M 18140 S  1.3  0.5  0:39.00 │  ├─ /usr/sbin/mysqld 
 1937 mysql      20   0 6998M  332M 18140 S  0.0  0.5  0:00.00 │  ├─ /usr/sbin/mysqld 
 1936 mysql      20   0 6998M  332M 18140 S  0.0  0.5  0:00.00 │  ├─ /usr/sbin/mysqld 
 1930 mysql      20   0 6998M  332M 18140 S  0.0  0.5  0:00.00 │  ├─ /usr/sbin/mysqld 
 1929 mysql      20   0 6998M  332M 18140 S  0.0  0.5  0:00.03 │  ├─ /usr/sbin/mysqld 
 1928 mysql      20   0 6998M  332M 18140 S  0.0  0.5  0:00.01 │  ├─ /usr/sbin/mysqld 
 1927 mysql      20   0 6998M  332M 18140 S  0.0  0.5  0:00.08 │  ├─ /usr/sbin/mysqld 
 1919 mysql      20   0 6998M  332M 18140 S  0.0  0.5  0:00.00 │  ├─ /usr/sbin/mysqld 
 1918 mysql      20   0 6998M  332M 18140 S  0.0  0.5  0:00.00 │  ├─ /usr/sbin/mysqld 
 1917 mysql      20   0 6998M  332M 18140 S  0.0  0.5  0:00.00 │  ├─ /usr/sbin/mysqld 
 1916 mysql      20   0 6998M  332M 18140 S  0.0  0.5  0:00.03 │  ├─ /usr/sbin/mysqld 
 1915 mysql      20   0 6998M  332M 18140 S  0.0  0.5  0:00.30 │  ├─ /usr/sbin/mysqld 
 1914 mysql      20   0 6998M  332M 18140 S  0.0  0.5  0:00.03 │  ├─ /usr/sbin/mysqld 
 1913 mysql      20   0 6998M  332M 18140 S  0.0  0.5  0:00.56 │  ├─ /usr/sbin/mysqld 
 1912 mysql      20   0 6998M  332M 18140 S  0.0  0.5  0:00.55 │  ├─ /usr/sbin/mysqld 
 1835 mysql      20   0 6998M  332M 18140 S  0.0  0.5  0:00.23 │  ├─ /usr/sbin/mysqld 
 1834 mysql      20   0 6998M  332M 18140 S  0.0  0.5  0:00.23 │  ├─ /usr/sbin/mysqld 
 1833 mysql      20   0 6998M  332M 18140 S  0.0  0.5  0:00.27 │  ├─ /usr/sbin/mysqld 
 1832 mysql      20   0 6998M  332M 18140 S  0.0  0.5  0:00.25 │  ├─ /usr/sbin/mysqld 
 1831 mysql      20   0 6998M  332M 18140 S  0.0  0.5  0:00.26 │  ├─ /usr/sbin/mysqld 
 1830 mysql      20   0 6998M  332M 18140 S  0.0  0.5  0:00.29 │  ├─ /usr/sbin/mysqld 
 1829 mysql      20   0 6998M  332M 18140 S  0.0  0.5  0:00.26 │  ├─ /usr/sbin/mysqld 
 1828 mysql      20   0 6998M  332M 18140 S  0.0  0.5  0:00.30 │  ├─ /usr/sbin/mysqld 
 1827 mysql      20   0 6998M  332M 18140 S  0.0  0.5  0:00.29 │  ├─ /usr/sbin/mysqld 
 1826 mysql      20   0 6998M  332M 18140 S  0.0  0.5  0:00.29 │  ├─ /usr/sbin/mysqld 
 1825 mysql      20   0 6998M  332M 18140 S  0.0  0.5  0:00.26 │  ├─ /usr/sbin/mysqld 
 1805 mysql      20   0 6998M  332M 18140 S  0.0  0.5  0:00.00 │  └─ /usr/sbin/mysqld

Acties:
  • 0 Henk 'm!

  • BlazeMuis
  • Registratie: Juni 2013
  • Laatst online: 27-09 08:18
Onder Linux is elke Core/Thread 100%, dus stel je hebt 4 cores/threads dan kan je 400% CPU usage hebben.

Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
BlazeMuis schreef op maandag 26 juni 2017 @ 09:50:
Onder Linux is elke Core/Thread 100%, dus stel je hebt 4 cores/threads dan kan je 400% CPU usage hebben.
Olaf van der Spek schreef op maandag 26 juni 2017 @ 09:49:
Zo ja, het totaal van de andere threads lijkt geen 217% te zijn en hoe zie ik dan CPU% van alleen de main thread?

Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 30-09 22:30

Hero of Time

Moderator LNX

There is only one Legend

Een thread hoeft niet alles te doen wat het main process doet. Andersom ook. Als een thread 50% gebruikt, zie je dat niet terug bij het parent proces, tenzij je threads verbergt.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Hero of Time schreef op maandag 26 juni 2017 @ 10:46:
Als een thread 50% gebruikt, zie je dat niet terug bij het parent proces, tenzij je threads verbergt.
Dan kan het parent proces niet > 100% gebruiken toch?

Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 30-09 22:30

Hero of Time

Moderator LNX

There is only one Legend

Olaf van der Spek schreef op maandag 26 juni 2017 @ 11:00:
[...]

Dan kan het parent proces niet > 100% gebruiken toch?
Waarom niet? Kan toch multi-cpu aware zijn? Het is niet vereist dat het met meerdere threads werkt om zo de load te verdelen. Het kan ook intern multi-threaded zijn. ;)

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
@Hero of Time Wat is intern multi-threaded? Dat klinkt toch ook erg als meerdere threads.

[ Voor 10% gewijzigd door Olaf van der Spek op 26-06-2017 13:33 ]


Acties:
  • 0 Henk 'm!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 29-09 19:12
CPU van de mainthread is weergegeven cpu usage minus alles van de subthreads :)
Vind het zelf ook niet echt een intuitieve weergave maar het komt vaker terug in tools.
Je moet nu voor de interpretatie altijd zelf bedenken door hoeveel available cores je moet delen om het in je hoofd te gaan schalen.

[ Voor 58% gewijzigd door gekkie op 26-06-2017 13:16 ]


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 30-09 22:30

Hero of Time

Moderator LNX

There is only one Legend

Olaf van der Spek schreef op maandag 26 juni 2017 @ 13:07:
@Hero of Time Wat is intern multi-threaded? Dat klinkt toch ook erg als meerdere threads.
Ja, maar dat betekend niet dat er een aparte procesthread wordt gestart. Je kan twee functies tegelijk laten uitvoeren, dan ben je intern multi-threaded bezig maar spawn je geen twee threads. ;)

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Hero of Time schreef op maandag 26 juni 2017 @ 14:03:
[...]

Ja, maar dat betekend niet dat er een aparte procesthread wordt gestart. Je kan twee functies tegelijk laten uitvoeren, dan ben je intern multi-threaded bezig maar spawn je geen twee threads. ;)
Ik dacht er wel het een en ander van af te weten maar ik heb geen idee waar je het over hebt.. heb je misschien een linkje?

Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 30-09 22:30

Hero of Time

Moderator LNX

There is only one Legend

Olaf van der Spek schreef op maandag 26 juni 2017 @ 14:05:
[...]

Ik dacht er wel het een en ander van af te weten maar ik heb geen idee waar je het over hebt.. heb je misschien een linkje?
Ben je bekend met programmeren? Schrijven en aanroepen van functies e.d.? Zo niet, dan verklaart dat het gat in je kennis. ;) Heb er verder geen link van. Ik weet alleen dat 't kan. Hoe het precies zit, geen idee.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

Heb je het niet over green threads? Die zou je ook gewoon zien als %CPU.

Ben je zeker dat de bovenstaande lijst volledig is?

ASSUME makes an ASS out of U and ME


Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
H!GHGuY schreef op zondag 2 juli 2017 @ 15:16:
Heb je het niet over green threads? Die zou je ook gewoon zien als %CPU.
Nee. Sowieso: "Foremost, green threads cannot take advantage of a multiprocessor system"
Ook niet van meerdere cores dus.
Ben je zeker dat de bovenstaande lijst volledig is?
Ja en nee. Ik heb het de htop developer ook maar even gevraagd:

CPU% van het proces is het totale CPU gebruik van alle threads samen.
CPU% van de main thread is niet te achterhalen.
Threads die stoppen staan niet meer in het overzicht, waardoor je bij heel veel kortlopende threads CPU% mist in het overzicht.

https://github.com/hishamhm/htop/issues/642

[ Voor 3% gewijzigd door Olaf van der Spek op 03-07-2017 10:18 ]


Acties:
  • 0 Henk 'm!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 29-09 19:12
Olaf van der Spek schreef op maandag 3 juli 2017 @ 10:16:
Threads die stoppen staan niet meer in het overzicht, waardoor je bij heel veel kortlopende threads CPU% mist in het overzicht.

https://github.com/hishamhm/htop/issues/642
Wat (h)top representeert is sowieso een moment opname dan wel "samenvatting".
Voor de meeste mensen is dit meer dan genoeg detail.

Als je info over kortlopende threads wilt zul je zelf iets met cpu-cycles moeten gaan doen.
Onder linux zou het perf framework je daar bij kunnen helpen.

Acties:
  • 0 Henk 'm!

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

Olaf van der Spek schreef op maandag 3 juli 2017 @ 10:16:
[...]

Nee. Sowieso: "Foremost, green threads cannot take advantage of a multiprocessor system"
Ook niet van meerdere cores dus.
Ik had het op Hero of time met het vreemde verhaal over intern multi-theading.
Er zijn maar enkele opties die in de praktijk bijna op hetzelfde neerkomen:
- green threads
- eventloop met coroutines
Hoe anders kun je de illusie van threads combineren binnen 1 thread?
[...]

Ja en nee. Ik heb het de htop developer ook maar even gevraagd:

CPU% van het proces is het totale CPU gebruik van alle threads samen.
CPU% van de main thread is niet te achterhalen.
Threads die stoppen staan niet meer in het overzicht, waardoor je bij heel veel kortlopende threads CPU% mist in het overzicht.

https://github.com/hishamhm/htop/issues/642
Dan is het probleem opgelost toch?

ASSUME makes an ASS out of U and ME


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 30-09 22:30

Hero of Time

Moderator LNX

There is only one Legend

H!GHGuY schreef op maandag 3 juli 2017 @ 22:34:
[...]

Ik had het op Hero of time met het vreemde verhaal over intern multi-theading.
Er zijn maar enkele opties die in de praktijk bijna op hetzelfde neerkomen:
- green threads
- eventloop met coroutines
Hoe anders kun je de illusie van threads combineren binnen 1 thread?
Ik heb niet beweert dat het waarheid is. Het is hoe ik dacht dat het zou kunnen werken om het verschil te verklaren. Heb 't wel eens vaker fout en dan vind ik het erg fijn als er uitleg bij komt waarom. :)

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • Thralas
  • Registratie: December 2002
  • Laatst online: 30-09 08:10
Je haalt volgens mij concurrency en parallelisme door elkaar. Je kunt (onder Linux) geen parallele executie realiseren zonder threads (of processes). Fact.

Een 'illusie' creeren kan wel ('intern' if you wish), maar feitelijk is dat concurrency, geen parallelisme.

Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
H!GHGuY schreef op maandag 3 juli 2017 @ 22:34:
Dan is het probleem opgelost toch?
Yep

Acties:
  • 0 Henk 'm!

  • igmar
  • Registratie: April 2000
  • Laatst online: 29-09 20:15

igmar

ISO20022

Hero of Time schreef op maandag 26 juni 2017 @ 14:03:
[...]

Ja, maar dat betekend niet dat er een aparte procesthread wordt gestart. Je kan twee functies tegelijk laten uitvoeren, dan ben je intern multi-threaded bezig maar spawn je geen twee threads. ;)
Dat kan dus niet : Je thread kan maar 1 operatie tegelijk uitvoeren. Als een process meerdere operaties tegelijk wil uitvoeren moet je meerdere threads hebben.

Acties:
  • 0 Henk 'm!

  • Compizfox
  • Registratie: Januari 2009
  • Laatst online: 30-09 00:11

Compizfox

Bait for wenchmarks

igmar schreef op donderdag 6 juli 2017 @ 09:10:
[...]


Dat kan dus niet : Je thread kan maar 1 operatie tegelijk uitvoeren. Als een process meerdere operaties tegelijk wil uitvoeren moet je meerdere threads hebben.
Maar wat htop hier laat zien zijn (sub)processes, geen threads, toch?

Gewoon een heel grote verzameling snoertjes


Acties:
  • 0 Henk 'm!

  • igmar
  • Registratie: April 2000
  • Laatst online: 29-09 20:15

igmar

ISO20022

Compizfox schreef op donderdag 6 juli 2017 @ 09:16:
[...]

Maar wat htop hier laat zien zijn (sub)processes, geen threads, toch?
Het zijn threads :

code:
1
2
3
4
[root@s1 ~]# ps aux | grep mysql
root     16949  0.0  0.0 112648   968 pts/0    S+   09:27   0:00 grep --color=auto mysql
mysql    21098  0.0  0.0 113256     8 ?        Ss    2016   0:00 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
mysql    21257  0.0  0.5 1646460 10624 ?       Sl    2016 201:52 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib/mysql/mysql.sock


21257 is het process, en dat is multi-threaded :

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@s1 ~]# ps -T -p 21257
  PID  SPID TTY          TIME CMD
21257 21257 ?        00:00:08 mysqld
21257 21261 ?        00:11:20 mysqld
21257 21262 ?        00:13:09 mysqld
21257 21263 ?        00:11:32 mysqld
21257 21264 ?        00:11:37 mysqld
21257 21265 ?        00:11:34 mysqld
21257 21266 ?        00:11:42 mysqld
21257 21267 ?        00:13:29 mysqld
21257 21268 ?        00:13:12 mysqld
21257 21269 ?        00:13:55 mysqld
21257 21270 ?        00:13:07 mysqld
21257 21279 ?        00:25:21 mysqld
21257 21280 ?        00:42:11 mysqld
21257 21281 ?        00:02:44 mysqld
21257 21282 ?        00:02:36 mysqld
21257 21283 ?        00:00:26 mysqld
21257 21284 ?        00:00:37 mysqld
21257 21293 ?        00:00:28 mysqld
21257 21294 ?        00:00:00 mysqld


Het "probleem" is dat die threads een eigen entry hebben onder /proc. Ook de /proc uitvoer is wat raar op het gebied van threads, vooral omdat het er later "ingehacked" is. Vooral de data is wat karig, en niet alles kun je uit /proc halen.

Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Compizfox schreef op donderdag 6 juli 2017 @ 09:16:
[...]

Maar wat htop hier laat zien zijn (sub)processes, geen threads, toch?
Wat is een sub process? Bedoel je een child proces?

Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 30-09 22:30

Hero of Time

Moderator LNX

There is only one Legend

igmar schreef op donderdag 6 juli 2017 @ 09:10:
[...]

Dat kan dus niet : Je thread kan maar 1 operatie tegelijk uitvoeren. Als een process meerdere operaties tegelijk wil uitvoeren moet je meerdere threads hebben.
Mijn fout is al eerder aangetoond in dit topic. ;)

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Olaf van der Spek schreef op donderdag 6 juli 2017 @ 10:30:
[...]

Wat is een sub process? Bedoel je een child proces?
Yes, ik denk dat daar ook de verwarring uit ontstaat in dit topic.

Een proces kan prima meerdere interne threads hebben en daarmee meerdere cpu's tegelijk gebruiken maar die zie je niet apart in htop. Wat je wel ziet in htop zijn de child processes gestart door het forken van het hoofdproces.

Blog [Stackoverflow] [LinkedIn]


Acties:
  • 0 Henk 'm!

  • Thralas
  • Registratie: December 2002
  • Laatst online: 30-09 08:10
Wolfboy schreef op donderdag 6 juli 2017 @ 17:31:
Een proces kan prima meerdere interne threads hebben en daarmee meerdere cpu's tegelijk gebruiken maar die zie je niet apart in htop. Wat je wel ziet in htop zijn de child processes gestart door het forken van het hoofdproces.
De default setup van htop laat óók threads zien. :+

Zie ook de TS, mysql forked echt niet zo vaak..

En bovenal, in de kenel zijn zowel threads als processes een task. Net als een 'gewoon' proces heeft een thread een eigen pid, je ziet ze alleen vaak niet terug in tools die iets met processen doen.

Een thread deelt memory space en file descriptors met z'n parent, maar voor de scheduler is het verschil tussen een thread en proces natuurlijk minder relevant.

Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Thralas schreef op donderdag 6 juli 2017 @ 19:33:
Een thread deelt memory space en file descriptors met z'n parent, maar voor de scheduler is het verschil tussen een thread en proces natuurlijk minder relevant.
Ligt eraan, ik kan me voorstellen dat een proces met 100 threads niet 10x zoveel CPU tijd zou moeten krijgen als een proces met 10 threads (afhankelijk van het aantal cores).

Acties:
  • 0 Henk 'm!

  • Thralas
  • Registratie: December 2002
  • Laatst online: 30-09 08:10
Ik geloof dat dat onderscheid er standaard dus juist niet is.

Misschien heeft dat programma wel een goede reden om zoveel threads (dus tasks) te spawnen. Aannames daarover doet de kernel (terecht) niet.

Die use case is natuurlijk wel goed voorstelbaar, dus zijn er ulimit/cgroups om het gebruik van resources fijnmaziger te regelen.

Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Thralas schreef op donderdag 6 juli 2017 @ 22:24:
Misschien heeft dat programma wel een goede reden om zoveel threads (dus tasks) te spawnen. Aannames daarover doet de kernel (terecht) niet.
Terecht? Het is geen aanname, het is gewoon een keuze.

Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Thralas schreef op donderdag 6 juli 2017 @ 19:33:
[...]


De default setup van htop laat óók threads zien. :+

Zie ook de TS, mysql forked echt niet zo vaak..
I stand corrected :+

Blog [Stackoverflow] [LinkedIn]

Pagina: 1