Sida 1 av 2
Valgrind, Debian 7.8, Xlib --- tusentals allocs, varför?
Postat: 9 april 2015, 11:50:03
av SvenW
Jag kör ett enkelt program skrivet mha Xlib som öppnar ett fönster. Alltså en enkel X-client
Valgrind skriver:
==4199== total heap usage: 2,014 allocs, 2,014 frees, 125,140 bytes allocated
Siffran för antal allocs ökar med flera hundra per sekund bara man drar musen över
en yta. Mitt program gör inga allocs, och det blir likadant om jag kommenterar bort
alla callbacks, dvs funktioner som reagerar på motion-events.
Någon som vet varför det blir så många allocs?
Är det något som sker i X-servern, och i så fall varför reagerar valgrind på det?
Re: Valgrind, Debian 7.8, Xlib --- tusentals allocs, varför?
Postat: 9 april 2015, 13:40:08
av adent
Måste väl vara lib:et då? Grafikhanteringen som gör det?
MVH: Mikael
Re: Valgrind, Debian 7.8, Xlib --- tusentals allocs, varför?
Postat: 9 april 2015, 15:08:53
av SvenW
Ja, antagligen. Man länkar ju till -L/usr/X11R6/lib -lX11
Servern och fönsterhanteraren borde väl ligga utom räckhåll för Valgrind ??
Men dessa libbar tillhör nog mitt program ur Valgrinds horisont.
Men är det normalt att det blir så många allocs? Och gör det något?
Innan jag bygger programmet vidare vill jag gärna veta om beror på något eget misstag!
Kollade att testa Schackprogrammet glchess.
Det blir :
==3852== total heap usage: 258,900 allocs, 241,773 frees, 63,387,797 bytes allocated
bara efter ett par drag! Känns som att det slösas en hel del med resurser!
Re: Valgrind, Debian 7.8, Xlib --- tusentals allocs, varför?
Postat: 9 april 2015, 17:45:27
av lillahuset
Det där låter ju helt vansinnigt...
Re: Valgrind, Debian 7.8, Xlib --- tusentals allocs, varför?
Postat: 9 april 2015, 19:19:37
av SvenW
Ja, men vad gäller mjukvara så är det väl normen.
Vore bra om någon Guru kunde förklara dock.
Re: Valgrind, Debian 7.8, Xlib --- tusentals allocs, varför?
Postat: 9 april 2015, 22:48:14
av lillahuset
Ställ frågan här: Debian SE <
debian-user-swedish@lists.debian.org>
De brukar vara både duktiga och hjälpsamma.
Re: Valgrind, Debian 7.8, Xlib --- tusentals allocs, varför?
Postat: 13 augusti 2015, 09:37:49
av cadahl
Är själv mjukvaruutvecklare, och det ser tyvärr ut så här i mångt och mycket.
En faktor är att utvecklare är slarviga och använder heapallokeringar i för stor utsträckning, men vad som ökar problemet är att man numera förlitar sig på massor av libraries från tredje part. Man har sällan kontroll över hela sin applikation själv då man får in X antal shared libs (.so, .dll) i sin egen process oavsett om det är Hello World eller något mer omfattande.
Det finns dock en ökande medvetenhet om sådant här, åtminstone hos de som utvecklar OS och OS-nära lager. Första halvan av 2000-talet var nog värst vad gäller slarv, därefter har ju CPU-prestanda planat ut. Man ökar prestanda genom att köra på flera CPU-kärnor, men det gör också att man tjänar på att sänka antalet bortslösade klockcykler per kärna.
I allt från mobila enheter till stora datacenter är numera prestanda/Watt en viktig faktor, som man också optimerar hårt. Så var det inte alls för 10 år sedan.
T.ex. Windows har sedan Vista och 7 genomgått en hel del optimering i hela OSet, så Windows 8+ är betydligt mer effektivt än t.ex. XP.
Får ju hoppas att även opensourcevärlden lägger energi på det här. Däremot har jag ingen direkt kärlek för Xorg. Hela X11 är väl ett härke.

Re: Valgrind, Debian 7.8, Xlib --- tusentals allocs, varför?
Postat: 18 augusti 2015, 15:08:16
av SvenW
Tack för svar. Tidigare rekommendationer var väl att förlita sig på biblioteken, som i Henry Spencers The Ten Commandments :
"7 Thou shalt study thy libraries and strive not to reinvent them without cause, that thy code may be short and readable and thy days pleasant and productive."
Kanske är denna rekommendation föråldrad, liksom t.ex. "9 Thy external identifiers shall be unique in the first six characters, ..."
Jag funderar på att revidera mitt elcadprogram Xhec, och börjar med att försöka reda ut sånt här.
Men tiden går, utvecklingen går i spretande riktning och det är svårt att hänga med.
Så det kommer väl att rinna ut i sanden
X11 är nog ett härke, men enligt min erfarenhet var det ännu värre att bygga på Gtk+.
Jag har nu även tittat i källkoden till libX11 och där ser man att det alloceras vid varje event.
_XStoreEventCookie(). "Add an event to the display's event list."
Jag utgår t.v. från att det måste vara så här, och att det är normalt.
Re: Valgrind, Debian 7.8, Xlib --- tusentals allocs, varför?
Postat: 22 september 2015, 08:50:58
av Larsson90
Vi får hoppas att detta löser sig med Wayland eller Mir om du kör Ubuntu

Re: Valgrind, Debian 7.8, Xlib --- tusentals allocs, varför?
Postat: 22 september 2015, 11:50:45
av mri
Men är det här ett problem?
Som jag tolkar din beskrivning allokeras några tiotal bytes för varje nytt event, t.ex. från musen. Eventen sätts i en kö i väntan på behadling av fönsterhanteraren eller nåt annat. När så eventen betats av i kön frigörs minnet som associerats med eventen. Detta sker kontinuerligt när något "händer" i applikationen. Minne allokeras och frigörs en halv sekund senare.
Alternativet är att på förhand allokera tillräckligt minne för kön, worst case. Men det skulle betyda att när det händer väldigt lite i applikationen, sitter applikationen och pantar på minne som inte anänds till något.
Re: Valgrind, Debian 7.8, Xlib --- tusentals allocs, varför?
Postat: 22 september 2015, 11:54:40
av Nerre
"Problemet" är väl att det äter prestanda? Men frågan är ju hur mycket resurser en malloc kräver, skulle man tjäna prestanda på att allokera för 10 event i taget och själv hålla reda på när det behöver allokeras mer? (Det ökar väl dock risken för minnesläckor.)
Re: Valgrind, Debian 7.8, Xlib --- tusentals allocs, varför?
Postat: 22 september 2015, 12:05:33
av mri
Det beror ju helt på hur man utnyttjar events. Jag kan inte föreställa mig att malloc/free skulle ha nån betydelse för att hantera eventen från t.ex. musrörelse. Men om man använder events som generell metod för att göra allt möjligt när ett fönster updateras kan det säkert ha betydelse.
Re: Valgrind, Debian 7.8, Xlib --- tusentals allocs, varför?
Postat: 22 september 2015, 13:20:03
av Nerre
Om en snutt kod tar dubbelt så långt tid att exekvera jämfört med en annan kod så är det ju klart den slösar på prestanda. Även om just den kodbiten kanske bara gör att en sak tar 2 mikrosekunder istället för 1 mikrosekund så kommer flera tusen såna kodbitar att till slut ge en märkbar prestandaförsämring.
Re: Valgrind, Debian 7.8, Xlib --- tusentals allocs, varför?
Postat: 22 september 2015, 13:59:57
av SvenW
Ja, nyckelfrågan är om det gör något med många alloc/free. Om det tar onödiga resurser.
Det kommer ett motionevent kanske 50-100 ggr per sekund. En mikrosekund extra har väl ingen stor betydelse, men om man själv t.ex skulle allokera extra eget minne pga eventet så inbillar jag mig att man kanske får oreda i heapen. Ny alloc innan det gamla friggjorts. Vad händer då?
Kan inte påstå att jag märker någon prestandasänkning, men det vore ju bra om man vet lite mer om hur det fungerar i grunden så man vet vad man ska undvika i sin egen programmering.
mri, du har mycket kunskap att dela med dig. Uppskattas!
Gäller även övriga, naturligtvis

Re: Valgrind, Debian 7.8, Xlib --- tusentals allocs, varför?
Postat: 22 september 2015, 14:10:40
av Nerre
Men att DU inte märker nån prestandaförsämring betyder ju inte att nån på en klenare maskin inte märker det.
Fast Linux är väl resurssnålare än Windows i alla fall. När jag petade in Xubuntu på sambons netbook (som körde XP) så blev hon chockad. Hon var van vid att det tog 1 minut att starta Internet Explorer, när Chrome startade på några sekunder blev hon nästan förvirrad! :)
Problemet där är ju just att utvecklare ofta sitter på kraftiga maskiner och det är då man behöver såna där verktyg som Valgrind för att "mäta" om programmen är tillräckligt optimerade, eftersom man märker inte själv.