PC Engines APU6

/ pfSense, PC Engines, APU6, APU6B, iperf3

pc-engines-splash

Reeds meerdere jaren heb ik goede ervaring met APU boards van PC Engines. Alle APU2, 3 en 4 modellen met 4GB RAM heb ik toegepast. Vooral als router/firewall blijken de APU boards zeer betrouwbaar. Maar ook als maatwerktoepassing waar een Pi niet voldoende is, kan een APU board uitkomst bieden.

Alle APU boards hebben meerdere netwerkpoorten. Een grote wens was een board met een SFP+ slot. PC Engines heeft deze wens in vervulling laten gaan met de APU6. Het gaat om de APU6B4 om precies te zijn.

Ik was benieuwd of dit board net zo goed als de andere modellen presteert. Daarnaast wilde ik nog eens de installatie van pfSense beschrijven. In deze post beschrijf ik hoe een APU voorzien kan worden van een pfSense installatie - en hoe deze vervolgens presteert.

Bestelling en levering

Wij hebben een aantal apparaten besteld waarbij rekening gehouden is met de behuizing (kleur), flash storage (wat groter dan normaal), de adapter (EU versie) en voormontage + doos. De levering was vlot. Ongeveer een week later was de bestelling binnen. Een groot voordeel dat alles op voorraad is.

Installatie pfSense

USB Stick

Een APU board kan vanaf een USB stick opgestart worden. Ik heb eerst pfSense versie 2.6.0 gedownload vanaf pfsense.org. Ik heb gekozen voor het USB image voor AMD64 met serial console. Dit laatste is belangijk omdat er geen video aansluiting op een APU board zit. Dit is iets om rekenig mee te houden.

Ik gebruik Linux dus heb ik met het commando dd if=pfSense-CE-memstick-serial-2.6.0-RELEASE-amd64.img of=/dev/sdX status=progress ; sync het image naar de USB stick geschreven. Let op: in het voorgaande commando staat sdX. Vul daar het juiste device in voor de USB stick. Gebruik dmesg en fdisk -l of desnoods gparted om vast te stellen wat het correcte apparaat is. Het is vervelend om bijvoorbeeld de harddisk of SSD van de eigen computer te overschrijven.

Onder Windows kan bijvoorbeeld Rufus gebruikt worden om het pfSense image naar de USB stick te schrijven. Een alternatief voor Rufus is Balena Etcher. Rufus heeft overigens mijn persoonlijke voorkeur.

Testopstelling

Seriële poort?

Het eerste wat mij opviel is dat er geen seriële RS232 / DB9 aansluiting op de APU6 zit... Dat was wat een verrassing, want nu moest ik opzoek naar een microUSB kabel. Tegenwoordig gebruik ik voor bijna alles USB C maar gelukkig had mijn vrouw nog een microUSB kabel liggen. Dat het om een roze microUSB kabel gaat is niet erg. Voor de technische werking maakt de kleur niet uit.

Testopstelling

Voordat ik de APU opstartte heb ik een testopstelling gemaakt. Ik heb een verbinding gemaakt tussen de APU6 en een HP ProCurve switch d.m.v. een glasvezel patchkabel. In de SFP+ module van de APU6 heb ik een 1G glasvezel module van Cisco (GLC-SX-MM, 850nm) geplaatst. In de HP ProCurve heb ik een soortgelijke module geplaatst, maar dan van het merk HP (SFP SX, J4858C, 850nm). De SFP+ module in het SFP+ slot van de APU6 wordt als IGB0 herkent (onder pfSense) en wordt als WAN poort toegepast in de testopstelling. Om een internetverbinding op de WAN poort aan te sluiten, heb ik op poort 24 van de HP ProCurve switch aangesloten op mijn lab netwerk. Vervolgens heb ik nog een laptop op de HP switch aangesloten, zodat ik daarop iperf3 in server modus kan draaien.

Installatie pfSense

APU6 opstarten

Nu de APU6 is aangesloten, kan ik deze opstarten.

PuTTY

Ik gebruik in deze post PuTTY om een seriële verbinding op te zetten. Immers: er zit geen video aansluiting op het APU board.

Op een APU2 t/m 4 zit een RS232 aansluiting maar op de APU6 een microUSB aansluiting. In het eerste geval is een RS232 naar USB adapter nodig. In het geval van de APU6 is een microUSB kabel nodig. In beide gevallen is de verbindingssnelheid 115200 baud. Op mijn computer is het apparaat om mee te verbinden /dev/ttyUSB0. Onder Windows zal dat waarschijnlijk COM3 zijn. Onder Apparaatbeheer kan de COM poort onder Windows vastgesteld worden. In Apparaatbeheer kan de COM poort gevonden worden onder "Poorten (COM&LPT)" of onder de USB-serieel adapter. Klik rechts op "Poorten (COM & LPT)" of klik rechts op de gevonden USB-serieel adapter. Klik vervolgens op "Eigenschappen". Klik daarna op de tab "Poort Eigenschappen" en daarna op "Geavanceerd". In het geval van een USB-serieel adapter onder Windows moet soms eerst de driver geïnstalleerd worden.

Installatie pfSense vanaf USB stick

Voordat de APU aangezet wordt, moet de USB stick in een USB poort van de APU worden gestoken. Zodra PuTTY is gestart, dan kan de APU6 aangezet worden (door de stroomstekker aan te sluiten). Klik vervolgens (snel) op het console scherm, zodat je nog op tijd een aantal keren op de F10 toets kunt drukken voor het boot menu. Kies in het boot menu de USB stick om vanaf op te starten.

PuTTY-pfSense-Boot-001

Type cons25w in en druk op ENTER om verder te starten.

PuTTY-pfSense-Boot-002

Druk op ENTER om de licentievoorwaarden te accepteren.

PuTTY-pfSense-Install-001

Druk op ENTER om de installatie te starten.

PuTTY-pfSense-Install-002

Druk op ENTER om de toetsenbordindeling te accepteren.

PuTTY-pfSense-Install-003

Druk op ENTER om de ZFS partitie indeling te kiezen.

PuTTY-pfSense-Install-004

Optioneel: maak aanpassingen. In de schermafdruk is de "swap size" aangepast van 1g naar 4g, zodat de swap partitie groter is.

PuTTY-pfSense-Install-005

Druk op ENTER om verder te gaan met de installatie.

PuTTY-pfSense-Install-006

Druk op ENTER om geen renundantie te kiezen (er zit maar één SSD in de APU).

PuTTY-pfSense-Install-007

Vink (met de spatiebalk) het juiste opslagapparaat aan. Druk vervolgens op ENTER.

PuTTY-pfSense-Install-008

Kies YES en druk op ENTER

PuTTY-pfSense-Install-009

Wacht af totdat de installatie is afgerond.

PuTTY-pfSense-Install-010

Kies NO en druk op ENTER om geen verdere handmatige wijzigingen te maken.

PuTTY-pfSense-Install-011

Kies voor Reboot en druk op ENTER. Trek vervolgens de USB stick uit de USB drive.

PuTTY-pfSense-Install-012

Het opstartmenu wordt getoond. Na een aantal seconden wordt automatisch de eerst optie gekozen (zodat het opstarten vanzelf verder gaat).

PuTTY-pfSense-Boot-013

Zodra pfSense is opgestart, dan zal het onderstaande scherm getoond worden.

PuTTY-pfSense-Boot-014

Hiermee is pfSense geïnstalleerd.

De volgende stappen zijn optioneel.

Firmware upgrade

De APU6 die ik ontving kwam met firmware versie 4.12.0.5 terwijl op het moment van schrijven versie 4.17.0.3 de laatste is.

In dit deel leg ik uit hoe de firmware of BIOS bijgewerkt kan worden. Met de termen "firmware" en "BIOS" wordt hetzelfde bedoeld. Beide termen worden op de Github pagina van PC Engines (ook) door elkaar gebruikt.

Ga terug naar de het consolescherm en druk op 8 voor de Shell.

Voer het commando pkg update uit om op updates te controleren.

Installeer flashrom met het commando pkg install flashrom. Druk op y en daarna op ENTER om de installatie uit te voeren.

Type rehash in en druk op ENTER

PuTTY-pfSense-Prep-015

Maak het scherm wat groter indien niet alles erop past. In de onderstaande schermafdruk past het curl commando niet volledig binnen het venster.

PuTTY-pfSense-Prep-016

Controleer op https://pcengines.github.io de laatste firmwareversie.

Navigeer naar de /tmp map: cd /tmp

Download de laatste firmware versie met het curl commando: curl -O https://3mdeb.com/open-source-firmware/pcengines/apu6/apu6_v4.17.0.3.rom

Upgrade de firmware met het flashrom commando: flashrom -w apu6_v4.17.0.3.rom -p internal

PuTTY-pfSense-Prep-017

In het bovenstaande scherm wordt de flash niet uitgevoerd omdat ik reeds eerder de procedure had uitgevoerd.

Tip: ik heb APU boards gezien met een lage BIOS versie waarbij flashrom een melding "board mismatch" gaf (en niet verder ging). Dat komt doordat in lagere firmware versies een andere hardeware ID string (platform name) wordt gebruikt. Hier kan omheen gewerkt worden door -p internal aan te passen naar -p internal:boardmismatch=force. Het is belangrijk om zeker te weten dat de juiste firmware gebruikt wordt (alhoewel ik een APU4 ook prima kan starten met een debricking adapter waar een APU2 firmware op staat - wil je uiteraard wel de juiste firmware in productie gebruiken).

Het is belangrijk om een firmware flash actie nooit te onderbreken. Gebeurt dat wel, dan start de APU niet meer op. In dat geval is een debricking adapter (of SPI module) nodig (spi1a; flash recovery board for APU2). Ik heb één keer een debricking adapter gebuikt en dat werkte prima. Ik heb destijds met de debricking adapter pfSense kunnen starten. Vervolgens kon ik de adapter weer van het board verwijderen en met flashrom de BIOS flashen

Loader config aanpassen

Tijdens het opstarten wordt gewezen op het accepteren van de Intel licentie. Dit is niet persé nodig om te doen - maar wel zo netjes.

Installeer de teksteditor Nano met het commando pkg install nano.

Kies y en druk op ENTER om Nano te installeren.

PuTTY-pfSense-Prep-018

Geef het rehash commando en druk op ENTER.

Geef het commando nano /boot/loader.conf.local om het bestand te maken en aan te passen.

PuTTY-pfSense-Prep-019

Plak de volgende regels in het Nano scherm:

legal.intel_ipw.license_ack=1
legal.intel_igb.license_ack=1
legal.intel_iwi.license_ack=1

Sla de wijzingen op met CTRL + O en druk op ENTER.

Sluit Nano af met CTRL + X.

PuTTY-pfSense-Prep-020

Test

Mijn testopstelling is niet optimaal - maar geeft een idee over de doorvoersnelheid.

Op mijn laptop die is aangesloten is op de switch (WAN-zijde) heb ik iperf3 in server modus gestart: iperf3 --server -p 7890

Vervolgens heb ik op mijn andere laptop - die direct op de LAN poort van de APU3 is aangesloten - iperf3 in client modus gestart: iperf3 -c 100.127.248.106 -p 7890 -P 16 -N

pfSense-iperf3

Wat opvalt is dat de doorvoersnelheid wat varieert maar tegen de 1 Gigabit aankomt met 940 tot 960 Mbps.

De bovenstaande tests heb ik uitgevoerd met de pfSense config uit mijn vorige post. Het testresultaat wordt niet veel anders wanneer ik de config terug zet naar fabrieksinstellingen. Wanneer ik meerdere tests gelijktijdig uitvoer (iperf3 server op pfSense en iperf3 server op mijn laptop), dan haal ik 970 - 990 Mbps.

Ik heb ook naar geavanceerd instellingen gekeken maar wijzigingen resulteren niet in een opvallende verbetering of verslechtering.

De volgende netwerkinstellingen zijn te vinden onder System - Advanced - tab: Networking.

  • Hardware TCP Segmentation Offloading
  • Hardware Large Receive Offloading
  • hn ALTQ support

De bovenstaande opties kunnen uit gevinkt worden.

Mijn testresultaat wijkt af van wat ik in een artikel van TekLager terugvind: https://teklager.se/en/knowledge-base/apu2-1-gigabit-throughput-pfsense. In dat artikel staat dat een doorvoersnelheid van 1 Gbps makkelijk gehaald kan worden. De CPU belasting loopt tijdens mijn tests op tot 93 procent. Mogelijk kan de doorvoersnelheid nog wat hoger door hier en daar nog iets aan te passen? Of door mijn testopstelling aan te passen?

pfSense-iperf3-LAN

Ik ben redelijk tevreden met dit eerste resultaat. Een doorvoersnelheid tussen de 940 en 990 Mbps vind ik best aardig. Ik denk dat het realistisch is om een doorvoersnelheid van 480 tot 940 Mbps te verwachten, afhankelijk hoe de belasting is (enkele verbinding of meerdere verbindingen). Daarnaast zal het aantal firewallregels invloed hebben - nog afgezien van het draaien van bijvoorbeeld pfBlockerNG, Snort/Suricata, VPN, routing protocol en andere CPU belastende processen.

Overige

speedtest-cli

Zoals hierboven getoond kunnen er packages via de command line geïnstalleerd worden. Een handig package is speedtest-cli. Met het commando pkg install py39-speedtest-cli kan speedtest-cli geinstalleerd worden. Hiermee kan vanaf de command line een snelheidstest uitgevoerd worden. Het is handig om tijdens het uitvoeren van speedtest-cli de traffic graphs in de gaten te houden. Met de muiscursor op de traffic graph kan eenvoudig de snelheid op de interface bekeken worden. Een speedtest zegt overigens iets over de internetverbinding en minder over de maximale doorvoersnelheid van de interfaces.

Recensie Pim van Pelt

Op de website IPng Networks staat een recensie van Pim van Pelt met de titel Review: PCEngines APU6 (with SFP). Wat mij opvalt is dat in deze recensie erop gewezen wordt dat de APU6 1 Gbps in beide richtingen kan verwerken onder normale omstandigheden. Ik had eerder eens per mail aan Pascal Dornier gevraagd of een betere processor mogelijk zou zijn; nu valt mij op dat Pim van Pelt daar ook een opmerking over maakt onder "CPU bound". Persoonlijk zou ik het niet erg vinden wanneer er een model uitkomt met een zwaardere CPU... en mogelijk een model met 2.5G of 10G SFP+ poorten.

Toevoeging 23-01: Core Performance Boost (CPB)

Performance is belangrijk wanneer het om doorvoersnelheid gaat. In het geval van pfSense wordt een standaard processor toepast in een router/firewall. Dit betekent dat er geen gebruik gemaakt wordt van speciale chips zoals ASIC's (ASIC Hardware Acceleration). De CPU moet het zware werk doen. Het is dan belangrijk om de CPU maximaal te kunnen benutten. Het is dan mooi meegenomen wanneer een performance boost mogelijk is.

Het blijkt dat de CPU op het APU board Core Performance Boost (CPB) ondersteund.

Core Performance Boost (CPB) is een functie waarmee de frequentie van de processorkern kan worden verhoogd tot boven de nominale waarden. Net als Intel's Turbo Boost-technologie, verhoogt AMD Core Performance Boost tijdelijk de frequentie van een enkele core wanneer het besturingssysteem om de hoogste processorprestaties vraagt.

Hiermee loopt (in het geval van de APU2 en hoger) de klok frequentie op van 1 GHz naar 1400 MHz bij een hoge belasting. Uit de bovenstaande blijkt dat het om één core gaat waar de performance boost op van toepassing is. Deze functionaliteit is voor het besturingssysteem transparant. Het besturingssysteem weet niets af van een toename in performance en geeft - in het geval van een APU board - 1 GHz aan.

In verschillende forum posts wordt gewezen op deze functionaliteit waarbij gewezen wordt op het toevoegen van een aantal regels aan de loader.conf file. Je zou de indruk kunnen krijgen dat de functionaliteit op deze manier "aangezet" kan worden maar die veronderstelling blijkt echter niet te kloppen. Het gaat om een BIOS functie. CPB is sinds firmware v4.9.0.2 standaard ingeschakeld voor de APU2 modellen en hoger. Het verschil in klokfrequentie kan (slechts) zichtbaar gemaakt worden in het besturingssysteem. Een betere methode is door middel van het uitvoeren van tests de verschillen duidelijk te krijgen (tests met CPB uitgeschakeld en vervolgens (dezelfde tests) met CPB ingeschakeld uitvoeren).

The core performance states (P-states) in boosted mode are not described in ACPI (Advanced Configuration and Power Interface) system (and they shouldn’t be as AMD BIOS and Kernel Developer Guide states). As a result operating system does not know about the fact of processor’s transition to the state with higher, boosted performance. Bron citaat: https://blog.3mdeb.com/2019/2019-02-14-enabling-cpb-on-pcengines-apu2/

Om de toename van de klok frequentie te kunnen waarnemen kunnen drie regels toegevoegd worden aan loader.conf. Ik heb tijdelijk de volgende regels in /boot/loader.conf.local gezet:

hint.acpi_perf.0.disabled=1
hint.acpi_throttle.0.disabled=1
hint.p4tcc.0.disabled=1

De instellingen worden tijdens het opstarten van het APU board geactiveerd.

Vervolgens moet er een intensief proces gestart worden, zodat de boost waar kan worden genomen. Zie https://pcengines.github.io/apu2-documentation/apu_CPU_boost/ voor een complete beschrijving en https://blog.3mdeb.com/2019/2019-02-14-enabling-cpb-on-pcengines-apu2/ voor diverse tests. In het laatste geval zijn tests uitgevoerd met CPB uit en CPB aan.

Ik heb de bovenstaande regels standaard niet in mijn /boot/loader.conf.local file staan. Het is "leuk" om die regels eens uit te proberen - maar echt nuttig is het niet.

Ik accepteer via de loader (om esthetische redenen) alleen de Intel licentie. De regels m.b.t. de Intel licentie heeft voor de werking (performance) geen toegevoegde waarde - maar voorkomt dat er steeds op de Intel licentie gehamerd wordt in de boot log (dmesg.boot). De reden om dit in deze post te beschrijven is een ander artikel m.b.t. de performance van pfSense op een APU board. Op de website van TekLager wordt de regel legal.intel_igb.license_ack=1 in het artikel How to fine-tune pfSense for 1Gbit throughput on APU2/APU3/APU4 weergegeven. Maar dat artikel is niet van toepassing op pfSense 2.6.0 (alleen op versie 2.4.4 en (mogelijk) eerder).

#Intel License
legal.intel_ipw.license_ack=1
legal.intel_igb.license_ack=1
legal.intel_iwi.license_ack=1

Referentielijst:

Vorige Post