Dette kapitel af guiden beskæftiger sig med diverse tips og tricks til Gentoo. Tips og tricks der kan hælpe dig med at få det bedste ud af systemet. Husk på at jeg ikke kan drages til ansvar for amatøragtige handlinger det får jeres filer til at forsvinde eller eres systemer til at futte af.
Forkortelse af emerge kommandoer
Ved at køre kommandoen emerge --help kan man få en liste over mulige kommandoer, men jeg vil give en lille kort liste over kommandoer og parametre der kan bruges i hverdagen.
emerge -avt pakkenavn giver en liste over hvilke pakker der skal installeres og hvilke USE flag der skal sættes for programmet. Pakkenavn udskiftes med navnet på pakken
emerge -uD world opdaterer alle pakker på systemet der opdateres kan. Det anbefales at køre denne efter en ugentlig eller månedlig emerge --sync, så man har alle de nyeste pakker.
emerge -uDN world opdaterer alle pakker og gør dem i stand til at bruge nye USE flag som man har sat. Samme kommando bruges med det samme efter at man har sat USE flag til at recompile pakker til at bruge nye flag.
Brug af grafikkort RAM som swap eller RAM drev
Alle grafikkort har i dag mindst 64 MB RAM og en forholdsvis hurtig GPU. et typisk grafikkort har i omegnen af 128-512 MB RAM. Problemet er bare at man ikke kan udnytte det i fx. en server eller til andre formål hvor grafik ikke spiller den store rolle. Noget man kan i Gentoo, er at man kan bruge grafikkortets hurtige RAM (typisk ned til 1ns, hvor en harddisk er på min. 50-75 ns læsetid)
For at man kan bruge grafikkortets RAM som swap eller som RAMdisk, skal man helst køre med vesa driveren eller med open source driveren, da man kan bestemme hvor meget RAM på grafikkortet de skal styre. Dette kan man ikke med producenternes egne grafikkortdrivere, og filer, samt system kan gå i stykker hvis man gør dette med producenternes drivere.
For at kunne bruge det ekstra RAM på grafikkortet og andre kort, skal det kunne styres af kernen. kernel 2.6 leverer hvad vi har brug for: Memory Technology Device (MTD). Gå ind i kernens menuconfig (Hvis de forrige guider er blevet fulgt, vil i vide det nu. enten make menuconfig eller genkernel --menuconfig all):
Device Drivers --->
....Memory Technology Devices (MTD)--->
........Memory Technology Device (MTD) support
......... [*] eller [M] Direct char device access to MTD devices
......... [*] eller [M] Caching block device access to MTD devices
..........Self-contained MTD device drivers --->
..............[*] eller [M] Uncached system RAM
..............[*] eller [M] Physical system RAM
Du kan både kompilere dem som moduler eller som indbyggede drivere, det virker uanset hvad.
Herefter skam vi finde grafikkortets RAM, det nemmeste er at bruge lspci:
lspci -vvv
Hvorefter vi får en masse output (min laptop som eksempel):
|
Kildekode
|
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
|
...
01:00.0 VGA compatible controller: ATI Technologies Inc Unknown device 9581 (prog-if 00 [VGA controller])
Subsystem: ASUSTeK Computer Inc. Unknown device 1562
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
Interrupt: pin A routed to IRQ 20
Region 0: Memory at c0000000 (32-bit, prefetchable) [size=512M]
Region 1: I/O ports at c000 [size=256]
Region 2: Memory at fdff0000 (32-bit, non-prefetchable) [size=64K]
Expansion ROM at fdfc0000 [disabled] [size=128K]
Capabilities: [50] Power Management version 3
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [58] Express (v1) Legacy Endpoint, MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <4us, L1 unlimited
ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
MaxPayload 128 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
LnkCap: Port #0, Speed 2.5GT/s, Width x16, ASPM L0s L1, Latency L0 <64ns, L1 <1us
ClockPM- Suprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk+
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x16, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
Capabilities: [a0] Message Signalled Interrupts: Mask- 64bit+ Queue=0/0 Enable-
Address: 0000000000000000 Data: 0000
Kernel driver in use: fglrx_pci
Kernel modules: fglrx
...
|
Den vi skal holde øje med er Region 0. Begyndelsen af hukommelsesområdet er 0xc0000000, en 32 bit hex-værdi (x86_64 udgaven viser det måske som en 64-bit hexadecimalværdi, jeg ved det ikke og har ikke prøvet, men sig til hvis den gør)
For at kunne bruge denne hukommelse skal man fortælle MTD driveren hvor den starter og slutter. Det er nemt at udregne slutadressen, man skal bare vide hvor meget RAM man vil tage af. Men husk at det er en god idé at lade noget RAM være til selve grafikchippen også for at kunne gøre brug af GPUens basale funktioner.
Start af SLRAM modulet hvis man har kompileret SLRAM (Uncached system RAM) som modul:
|
Kildekode
|
1
2
3
|
# Region 0 starter ved 0xc0000000, lad 12 MB RAM ligge (så har vi 500MB til swap eller RAMdrev). Brug derefter en #lommeregner til at udregne 12*1024*1024 og konvertér denne værdi til hex (som er 0x00c00000 i 32-bit hex). Dette #betyder at 0xc0c00000 er startpositionen. Den tredje parameter har et plus foran fordi det IKKE markerer #slutpositionen, men derimod et offset. Denne skal i dette tilfælde svare til 500MB i 32-bit hex. (som er 0x1F400000)
modprobe slram map=VRAM,0xc0c00000,+0x1f400000
|
Start af PHRAM (Physical System RAM)modulet:
|
Kildekode
|
1
2
3
4
5
6
7
8
9
|
#At loade med PHRAM modulet er meget i stil med at loade med SLRAM modulet udover at det bruger en #længdeparameter i stedet for et offset.
# Loading with PHRAM module is very similar to SLRAM module, except that it uses a "length"
# parameter by default rather than an "end offset".
# Dette gør det samme som SLRAM modulet ovenfor
modprobe phram phram=VRAM,0xc0c00000,0xc00000
# Igen det samme, bare nemmere at læse
modprobe phram phram=VRAM,0xc0c00000,500Mi
|
eller hvis SLRAM modulet er bygget ind i kernel skal dette ind i kernel command line:
|
Kildekode
|
1
2
3
4
5
|
# mtd0 er enheden der skal mappes (hvis grafikkortet er det første kort der blev konfigureret er denne mtd0)
# De andre parametre viser det samme som dem ovenfor, startadresse og offset.
# Computeren skal genstartes for at man kan bruge den nye hukommelse
slram=mtd0,0xc0c00000,+0x1f400000
|
Man burde så med dmesg kunne se:
|
Kildekode
|
1
2
3
4
5
|
slram: devname = mtd0
slram: devstart = 0xc0c00000
slram: devlength = +0x1f400000
slram: devname=mtd0, devstart=0xc0c00000, devlength=0x1f400000
# derefter kommer informationer om i hvilke RAM områder mtd0 ligger i og om at mtd0 er registreret.
|
Desuden kan man tjekke /proc/mtd for at se om denne har fundet mtd enheden.
Når du så har understøttelse på plads i kernen og har fået alle data, så skal du have adgang til hukommelsen. Det er tid til at lave enhederne. Hvis du har udev, skal du bare modprobe mtdchar og mtdblock (alm. Gentoo indeholder udev) og hald vil lave drivere automatisk.
|
Kildekode
|
1
2
3
4
5
6
7
8
9
|
#Opret character enheden. MTD vil bruge og allokere denne så den ikke bruges af almindelige programmer. Den er #vital for at MTD skal kunne fungere
#Hvis Direct Character Device access to MTD devices er blevet kompileret som et modul, skal man først køre modprobe: #modprobe mtdchar
mknod /dev/mtd0 c 90 0
#Opret block enheden. Denne vil blive brugt og behøver "Caching block device access to MTD devices". Hvis denne er #kompileret som et modul skal man først køre modprobe mtdblock
mknod /dev/mtdblock0 b 31 0
|
Herefter kan vi så bestemme om grafikkortets RAM skal bruges som RAMdisk eller som swaphukommelse. Ligemeget hvad skal der oprettes et filsystem
For at oprette swaphukommelse:
mkswap /dev/mtdblock0
swapon /dev/mtdblock0
Dette vil oprette swapstrukturen i grafikkortets RAM og aktivere det som swaphukommelse som systemet kan bruge. For at sætte en prioritet (hvilken swapkilde der skal bruges først) kan man bruge swapons parameter -p X hvor X er et tal mellem 0 og 32767, jo højere tallet er, jo højere ligger grafikkortets hukommelse på listen
swapon /dev/mtdblock0 -p 10
Hvis ikke der specificeres en prioritet, så vil den næstlaveste prioritet blive brugt. Desuden kan MTD området lægges i /etc/fstab så man ikke skal oprette enheden efter boot.
|
Kildekode
|
1
2
|
# <fs> <mountpoint> <type> <opts> <dump/pass>
/dev/mtdblock0 none swap sw,pri=10
|
i options feltet svarer pri=10 til swapons -p parameter.
Det kan godt være fedt at have hurtig swaphukommelse eller en hurtig RAMdisk på din computer, men husk at hvis enten NVidias eller ATIs egne drivere bliver startet op med X, så kan det få systemet til at fryse eller lave grafikfejl. Der er ingen måder at fortælle disse drivere hvor meget af grafikkortets hukommelse må bruge. (de vil styre hele grafikkortets hukommelse). Dog er VESA driveren god, da den giver mulighed for at fastsætte antal RAM på grafikkortet.
Det betyder at det enten er DRI og 3D effekter eller hurtig swap.
I modsætning til alm. RAM og harddiske, så er der ingen grafikkort der har ECC RAM. Dette betyder måske ikke det store når der skal tegnes grafik, men det er en dum idé at lægge vigtige data på, eller at bruge det til andet end compiling på servere.