Desktop gép 32 GB -> 64 GB RAM upgrade

Az utóbbi időben többször láttam, hogy 10-20 GB swap is használatban van (sok párhuzamosan futó Dockerizált projekt főleg), így rendeltem egy azonos KIT-et, ami a gépben már volt.

Ma reggel beépítettem, így már sokkal jobb:

 aaron >  ~ > free -m
               total        used        free      shared  buff/cache   available
Mem:            62Gi        10Gi        46Gi       3.6Gi       9.8Gi        52Gi
Swap:           23Gi          0B        23Gi

Hozzászólások

Szerkesztve: 2024. 10. 18., p – 08:19

Azt tudom, hogy a lapozás előtt már divat a tömörített köztes tár, de nincs tervben valami memória deduplikáció akár Linux akár más OS-ek esetén? Vagy ezt is csak úgy lenne érdemes, ha lenne hw támogatás, ahogy magához a lapozáshoz is?

Színes vászon, színes vászon, fúj!

Kérem a Fiátot..

Érdekes a téma, amit felvetsz.

Ezt találtam: https://download.vusec.net/papers/dedup-est-machina_sp16.pdf

Memory deduplication, a well-known technique to reduce the memory footprint across virtual machines, is now also a default-on feature inside the Windows 8.1 and Windows 10 operating systems. Deduplication maps multiple identical copies of a physical page onto a single shared copy with copy-on-write semantics.

Tehát csomó helyen implementálva van, nem is tudtam.

https://forums.docker.com/t/does-docker-container-disable-the-memory-de… - a Docker valószínű nem csinálja.

Pár éve amikor új gépet vettem 128gb rakattam bele. Nem azért, mert kell, hanem ha elromlik egy modul akkor pótlás nélkül kidobom.

Az mondjuk durva, annyira azért nem olcsó, hogy redundanciából kimaxolja az ember. A kolléga felhasználására viszont a 64 giga nem overkill. Átlag felhasználásra az lenne, arra elég a 16-32 giga, bár nagyban függ, hogy ki mit használ, hány ablakot és fület tart megnyitva, mennyit hajlandó bezárni.

Nekem már 8 éve van 16 giga minden gépbe, de minimalizmus felé mentem, még egyre inkább sok is. Laptopban még úgy is elég, hogy levesz az integrált GPU is max. 2 gigát, de csak csúcsjáraton, alapból csak kb. felet. Javarészt pehelysúlyú ablakkezelő, terminálos alkalmazások kombó mellett hegyekben áll a sok szabad memória, jelenleg is 10,5 giga free, 13 giga available, a rendszer se használ ennyit cache-nek, egy részét tmpfs ramdrive-nak is hasznosítom. Sose mentem még ebben a felállásban 10 giga fölé, max. csak akkor, ha valami memory leak-et kapott. Nincs swap se, nem használná a rendszer. Viszont ha játékra vennék új gépet, abba 32 gigát tennék, azok nagyon memóriaéhesek lettek újabban, szeretnek 16 gigába pont nem beleférni, meg igazából a 32 se drága már, jövőtállósításnak megérheti nem kicentizni.

Ezt mindenkinek saját magának kell tudni, hogy mennyi a memóriaszükséglete, de azt érteni kell, hogy egy szinten túltolni csak pénzégetés, pótcselekvés, mert semmi nem lesz tőle gyorsabb. Arra kell csak törekedni, hogy ne legyen a swap túl intenzíven használva, mert az lassít.

Windows 95/98: 32 bit extension and a graphical shell for a 16 bit patch to an 8 bit operating system originally coded for a 4 bit microprocessor, written by a 2 bit company that can't stand 1 bit of competition.”

Az mondjuk durva, annyira azért nem olcsó, hogy redundanciából kimaxolja az ember.

Attól függ, mennyi a kiesés költsége. Desktop gépnél persze nem általában olyan sok, mert ha a 2x32-ből a fele megmakkan, azzal még túl lehet élni, másnap reggelre meg a kezedben van a csere.

De amúgy tökmindegy, ha belefér a büdzsébe, akkor vegyen, ártani nem árt.

Javarészt pehelysúlyú ablakkezelő, terminálos alkalmazások kombó mellett hegyekben áll a sok szabad memória,

Ez nem a minimalizmustól függ, hanem a felhasználástól. Nem az a sok, hogy a desktop környezet 300 vagy 400 mega RAM-ot eszik, hanem mondjuk fejlesztésnél ha beindítom a teljes tesztkörnyezetet, az 30 giga

Ha nem használod semmire a gépet, akkor nem kell a RAM, valóban :)

egy szinten túltolni csak pénzégetés, pótcselekvés, mert semmi nem lesz tőle gyorsabb

Jah, csak érted, az a szint nem egy objektív, univerzális igazság. Tök jó, hogy a karakteres faszságoknak elég pár száz mega, csak mondjuk ha nem ez a munkád, hanem Premiere pro-ban vágod a 4K nyersanyagot, akkor hirtelen nagyon nagyon kevés lesz a 8-16 giga.

Igen, azért mondtam, hogy felhasználásfüggő, bár ilyen 128-256 giga az már nem gyorsít semmin, akkor se ha az isten nyersanyagát vágod 8K-ban Premier Pro-ban. A szint mindenkinek változik, hogy hol elég, de egy szinten túl mindenkinek csak pótcselekvés, mert ha van elég szabad RAM, onnan már egy dekát nem fog gyorsítani, ha még több áll kihasználatlanul.

Én már a 16 gigát is csak úgy tudom kihasználni, hogy tmpfs ramdrive-nak be van fogva, a kernel cache-nek használja, meg a böngészőcache is itt van, iGPU is használja VRAM-nak, meg egy DRAM-less NVMe SSD is DDR cache-nek, így végül is pocsékba nem megy. Még talán a 32-vel is tudnék valamit kezdeni (nagyobb kódbázisok fordításánál, mikor sok szálon pörget a make, akkor nem árt szálanként 2 giga RAM, meg ha az ember nagy rakás virtuális gépet, emulátort, konténert futtat), bár azt már nem használnám ki, de talán teljesen pocsékba se menne. 64-gyel és felette én már nem tudnék mit kezdeni, még bloat GUI megoldásokat használva sem, nyilván ez az én felhasználásomra igaz.

Átlag felhasználásnál még akár a ZRAM, Zswap is játszik, bár azt inkább annak ajánlom, akinek odaforrasztott RAM van a gépében, nem tudja bővíteni, de ki akarja tolni a használhatóságot.

A túl sok memória egy szinten túl épp úgy nem segít, mint a túl sok magos proci. Ha az embernek olyan a felhasználása, hogy nem párhuzamosítható, akkor még árt is a túl sok mag, mert a cache már nem használódik ki, de a túl sok mag csak alacsonyabb frekit bír, és még lassabb is lesz az egész (bár nem érezhetően, inkább csak szintetikus benchmarkokban mérhetően), mint egy kevesebb magos, de nagyobb frekis proci, aminek még az összfogyasztása is jobb lesz. Level1Tech-nek volt erről pár videója, hogy használja a 128 meg 196 magos Epyc procikat, amik 256 és 384 szálasak, elindítja a cuccait, játékokat, a magok nagyja ott unatkozik kihasználatlanul.

Windows 95/98: 32 bit extension and a graphical shell for a 16 bit patch to an 8 bit operating system originally coded for a 4 bit microprocessor, written by a 2 bit company that can't stand 1 bit of competition.”

most 10 giga ramot használ(sz), miért swappolt?

Az az állapot a gép indulása után volt lényegében. Gyakori, hogy 4-5 web stack fut egyszerre nem olyan kicsi adatbázisokkal, 2 böngésző, PhpStorm, Thunderbird, stb.

 

               total        used        free      shared  buff/cache   available
Mem:            62Gi        21Gi        29Gi       4.6Gi        17Gi        41Gi
Swap:           23Gi       256Ki        23Gi

 

Már így fest, pedig csak 2 óra telt el a munkanapból, s csak 2 projekt fut.

               total        used        free      shared  buff/cache   available
Mem:            62Gi        27Gi       7.1Gi       5.6Gi        33Gi        34Gi
Swap:           23Gi        32Mi        23Gi

Nap végére így néz ki.

ps x --sort rss | tail -n 4
   5062 pts/2    Sl+   58:29 /home/aaron/firefox/firefox-bin
  95181 ?        Sl     1:26 /usr/share/elasticsearch/jdk/bin/java -Xshare:auto -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.ttl=10 -XX:+AlwaysPreTouch -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -XX:-OmitStackTraceInFastThrow -XX:+ShowCodeDetailsInExceptionMessages -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dio.netty.allocator.numDirectArenas=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Dlog4j2.formatMsgNoLookups=true -Djava.locale.providers=SPI,COMPAT --add-opens=java.base/java.io=ALL-UNNAMED -Djava.security.manager=allow -XX:+UseG1GC -Djava.io.tmpdir=/tmp/elasticsearch-2398819568313323609 -XX:+HeapDumpOnOutOfMemoryError -XX:+ExitOnOutOfMemoryError -XX:HeapDumpPath=data -XX:ErrorFile=logs/hs_err_pid%p.log -Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m -Des.cgroups.hierarchy.override=/ -Xms512m -Xmx512m -XX:MaxDirectMemorySize=268435456 -XX:G1HeapRegionSize=4m -XX:InitiatingHeapOccupancyPercent=30 -XX:G1ReservePercent=15 -Des.path.home=/usr/share/elasticsearch -Des.path.conf=/usr/share/elasticsearch/config -Des.distribution.flavor=default -Des.distribution.type=docker -Des.bundled_jdk=true -cp /usr/share/elasticsearch/lib/* org.elasticsearch.bootstrap.Elasticsearch -Ebootstrap.memory_lock=true -Ecluster.name=docker-cluster -Ediscovery.type=single-node
   7499 ?        Sl     1:59 /usr/share/elasticsearch/jdk/bin/java -Xshare:auto -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.ttl=10 -XX:+AlwaysPreTouch -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -XX:-OmitStackTraceInFastThrow -XX:+ShowCodeDetailsInExceptionMessages -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dio.netty.allocator.numDirectArenas=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Dlog4j2.formatMsgNoLookups=true -Djava.locale.providers=SPI,COMPAT --add-opens=java.base/java.io=ALL-UNNAMED -Djava.security.manager=allow -XX:+UseG1GC -Djava.io.tmpdir=/tmp/elasticsearch-5459826251394555382 -XX:+HeapDumpOnOutOfMemoryError -XX:+ExitOnOutOfMemoryError -XX:HeapDumpPath=data -XX:ErrorFile=logs/hs_err_pid%p.log -Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m -Des.cgroups.hierarchy.override=/ -Xms512m -Xmx512m -XX:MaxDirectMemorySize=268435456 -XX:G1HeapRegionSize=4m -XX:InitiatingHeapOccupancyPercent=30 -XX:G1ReservePercent=15 -Des.path.home=/usr/share/elasticsearch -Des.path.conf=/usr/share/elasticsearch/config -Des.distribution.flavor=default -Des.distribution.type=docker -Des.bundled_jdk=true -cp /usr/share/elasticsearch/lib/* org.elasticsearch.bootstrap.Elasticsearch -Ebootstrap.memory_lock=true -Ecluster.name=docker-cluster -Ediscovery.type=single-node
  24139 ?        Ssl   94:19 /home/aaron/storm/jbr/bin/java -classpath /home/aaron/storm/lib/platform-loader.jar:/home/aaron/storm/lib/util-8.jar:/home/aaron/storm/lib/util.jar:/home/aaron/storm/lib/app-client.jar:/home/aaron/storm/lib/util_rt.jar:/home/aaron/storm/lib/product.jar:/home/aaron/storm/lib/opentelemetry.jar:/home/aaron/storm/lib/app.jar:/home/aaron/storm/lib/product-client.jar:/home/aaron/storm/lib/lib-client.jar:/home/aaron/storm/lib/stats.jar:/home/aaron/storm/lib/jps-model.jar:/home/aaron/storm/lib/external-system-rt.jar:/home/aaron/storm/lib/rd.jar:/home/aaron/storm/lib/bouncy-castle.jar:/home/aaron/storm/lib/protobuf.jar:/home/aaron/storm/lib/forms_rt.jar:/home/aaron/storm/lib/lib.jar:/home/aaron/storm/lib/externalProcess-rt.jar:/home/aaron/storm/lib/groovy.jar:/home/aaron/storm/lib/annotations.jar:/home/aaron/storm/lib/jsch-agent.jar:/home/aaron/storm/lib/junit4.jar:/home/aaron/storm/lib/nio-fs.jar:/home/aaron/storm/lib/trove.jar -XX:ErrorFile=/home/aaron/java_error_in_phpstorm_%p.log -XX:HeapDumpPath=/home/aaron/java_error_in_phpstorm_.hprof -Xms128m -Xmx2048m -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -XX:+IgnoreUnrecognizedVMOptions -ea -Dsun.io.useCanonCaches=false -Dsun.java2d.metal=true -Djbr.catch.SIGABRT=true -Djdk.http.auth.tunneling.disabledSchemes="" -Djdk.attach.allowAttachSelf=true -Djdk.module.illegalAccess.silent=true -Dkotlinx.coroutines.debug=off -XX:CICompilerCount=2 -XX:ReservedCodeCacheSize=512m -XX:+UnlockDiagnosticVMOptions -XX:TieredOldPercentage=100000 -Dsun.tools.attach.tmp.only=true -Dawt.lock.fair=true -Xmx3989m -Djb.vmOptionsFile=/home/aaron/.config/JetBrains/PhpStorm2024.2/phpstorm64.vmoptions -Djava.system.class.loader=com.intellij.util.lang.PathClassLoader -Didea.vendor.name=JetBrains -Didea.paths.selector=PhpStorm2024.2 -Djna.boot.library.path=/home/aaron/storm/lib/jna/amd64 -Dpty4j.preferred.native.folder=/home/aaron/storm/lib/pty4j -Djna.nosys=true -Djna.noclasspath=true -Dintellij.platform.runtime.repository.path=/home/aaron/storm/modules/module-descriptors.jar -Didea.platform.prefix=PhpStorm -Dide.show.tips.on.startup.default.value=true -Dsplash=true -Daether.connector.resumeDownloads=false --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.ref=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.text=ALL-UNNAMED --add-opens=java.base/java.time=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.locks=ALL-UNNAMED --add-opens=java.base/jdk.internal.vm=ALL-UNNAMED --add-opens=java.base/sun.net.dns=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/sun.nio.fs=ALL-UNNAMED --add-opens=java.base/sun.security.ssl=ALL-UNNAMED --add-opens=java.base/sun.security.util=ALL-UNNAMED --add-opens=java.desktop/com.sun.java.swing=ALL-UNNAMED --add-opens=java.desktop/com.sun.java.swing.plaf.gtk=ALL-UNNAMED --add-opens=java.desktop/java.awt=ALL-UNNAMED --add-opens=java.desktop/java.awt.dnd.peer=ALL-UNNAMED --add-opens=java.desktop/java.awt.event=ALL-UNNAMED --add-opens=java.desktop/java.awt.font=ALL-UNNAMED --add-opens=java.desktop/java.awt.image=ALL-UNNAMED --add-opens=java.desktop/java.awt.peer=ALL-UNNAMED --add-opens=java.desktop/javax.swing=ALL-UNNAMED --add-opens=java.desktop/javax.swing.plaf.basic=ALL-UNNAMED --add-opens=java.desktop/javax.swing.text=ALL-UNNAMED --add-opens=java.desktop/javax.swing.text.html=ALL-UNNAMED --add-opens=java.desktop/sun.awt=ALL-UNNAMED --add-opens=java.desktop/sun.awt.X11=ALL-UNNAMED --add-opens=java.desktop/sun.awt.datatransfer=ALL-UNNAMED --add-opens=java.desktop/sun.awt.image=ALL-UNNAMED --add-opens=java.desktop/sun.font=ALL-UNNAMED --add-opens=java.desktop/sun.java2d=ALL-UNNAMED --add-opens=java.desktop/sun.swing=ALL-UNNAMED --add-opens=java.management/sun.management=ALL-UNNAMED --add-opens=jdk.attach/sun.tools.attach=ALL-UNNAMED --add-opens=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-opens=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED --add-opens=jdk.jdi/com.sun.tools.jdi=ALL-UNNAMED -Xbootclasspath/a:/home/aaron/storm/lib/nio-fs.jar:/home/aaron/storm/lib/nio-fs.jar:/home/aaron/storm/lib/nio-fs.jar com.intellij.idea.Main

 

A legéhesebb processzek...