tag:blogger.com,1999:blog-79541284472146904932023-11-15T15:44:58.582+01:00Tankar om teknikProblem solving, mostly LinuxSniglomhttp://www.blogger.com/profile/07928207350672548445noreply@blogger.comBlogger121125tag:blogger.com,1999:blog-7954128447214690493.post-21338765459200006922023-11-04T14:55:00.004+01:002023-11-04T14:55:30.952+01:00Ubuntu missing web fonts.After upgrading from Ubuntu 23.04 to 23.10 fonts on the web started looking weird. The solution was to install the microsofts fonts.
<blockquote>sudo apt-get install ttf-mscorefonts-installer</blockquote>
source: <a href="https://stackoverflow.com/questions/31881893/ubuntu-is-missing-windows-fonts">stackoverflow.com</a>Sniglomhttp://www.blogger.com/profile/07928207350672548445noreply@blogger.com0tag:blogger.com,1999:blog-7954128447214690493.post-22555306944334080182022-12-13T18:01:00.003+01:002022-12-13T18:01:40.348+01:00Steam Deck missing stdio.hI tried to compile an application for the steam deck when I ran into missing header files. Weirdly the correct packages seemed to be installed, so why was I missing headers?
<br><br>
A <a href="https://old.reddit.com/r/SteamDeck/comments/t92ozw/for_compiling_c_code/">reddit post</a> explained that Valve had deleted some files belonging to installed packages and the resolution was to reinstall them.
<br><br>
So I ran the following command and surely, my compile worked afterwards.<br>
<blockquote>sudo pacman -S glibc linux-api-headers</blockquote>Sniglomhttp://www.blogger.com/profile/07928207350672548445noreply@blogger.com0tag:blogger.com,1999:blog-7954128447214690493.post-70652043774406956532021-03-14T13:58:00.006+01:002021-03-14T13:58:47.705+01:00Get full path for a file.Time for another oneliner. I often need to get the full path of a file.<br>
This can be done using the following command:
<br>
<br>
readlink -f myfile
<br>
<br>
Via <a href="https://stackoverflow.com/questions/5265702/how-to-get-full-path-of-a-file">stackoverflow.com</a>
Sniglomhttp://www.blogger.com/profile/07928207350672548445noreply@blogger.com0tag:blogger.com,1999:blog-7954128447214690493.post-2878673057036234812021-03-03T21:43:00.008+01:002021-03-03T21:45:07.700+01:00Text disappearing from context menus in GnomeI'm having an issue where most text in Gnome disappears or gets corrupted. I'm yet to find the root cause.
<br>
In the meantime the best quickfix is to restart Gnome.
<br>
<br>
To do so, press alt + F2, type r and press enter.
<br>
<br>
Via <a href="https://linuxconfig.org/how-to-restart-gui-on-ubuntu-20-04-focal-fossa">linuxconfig.org</a>Sniglomhttp://www.blogger.com/profile/07928207350672548445noreply@blogger.com0tag:blogger.com,1999:blog-7954128447214690493.post-50072684978835122762021-02-27T16:36:00.005+01:002021-02-27T16:36:59.046+01:00Add user to sudoers listJust a simple oneliner.
<br>
usermod -aG sudo username
<br>
<br>
Via <a href="https://linuxize.com/post/how-to-add-user-to-sudoers-in-ubuntu/">linuxize.com</a>Sniglomhttp://www.blogger.com/profile/07928207350672548445noreply@blogger.com0tag:blogger.com,1999:blog-7954128447214690493.post-26374715475581924792021-02-15T12:42:00.002+01:002021-02-27T16:34:26.363+01:00Can't init device hci0: Connection timed out (110)Bluetooth stopped working on my raspberry pi running raspbian. The first I tried was to reset the interface by running hciconfig hci0 down/up, but that gave me "Can't init device hci0: Connection timed out (110)".
<br>
<br>
I found that by removing the btusb module and then adding it back, I was able to get bluetooth working again.
Next time bluetooth gives up, I will run this:
<br>
sudo hciconfig hci0 down
<br>
sudo rmmod btusb
<br>
sudo modprobe btusb
<br>
sudo hciconfig hci0 up
<br>
Via <a href="https://unix.stackexchange.com/questions/602730/bluetooth-intermittently-disconnects/602739#602739">unix.stackexchange.com</a>
Sniglomhttp://www.blogger.com/profile/07928207350672548445noreply@blogger.com0tag:blogger.com,1999:blog-7954128447214690493.post-10181356398271085442020-04-11T21:58:00.000+02:002020-04-11T22:03:10.046+02:00Overclock works in Windows but hangs in Linux.So I have this old Intel Lynnfield system from 2010. It's overclocked and has been so for many years. Works perfectly in Windows even during high load for several days. Ubuntu and other distributions I tried would randomly freeze. Even more strangely, it never happened during heavy load.<br />
<br />
Maybe Linux uses some CPU instruction Windows doesn't and that particular instruction doesn't work with the overclock? I clocked the CPU down, but Linux would still hang randomly.<br />
I upgraded the motherboard bios, I upgraded the GPU bios. I replaced the soundcard. I checked SMART data for the drives. I ran memtest. I tested with a different GPU vendor.<br />
But I couldn't find what was going on. Why was it freezing, so randomly, when there was almost no load in the system?<br />
<br />
But then, for some reason I checked the cpu frequency using /proc/cpuinfo. The CPU wasn't running at the speed I had specified in bios, it was clocking down. That could certainly explain why the system froze during low load scenarios. CPU scaling and overclocking seldom works well, but I had disabled the C-states in bios. I had disabled turbo in bios. I knew for a fact that this was the case, since I've checked it numerous times in Windows.<br />
<br />
So I started searching about C-states and the Linux kernel. For some reason the kernel ignores whether the bios has turned off the c-states or not. Thus, my disabled C-states was enabled. Confusing and frustrating.<br />
<br />
I tried to fix this by disabling cpu scaling within Ubuntu, but for some reason it never worked as it was supposed to. Then I found that there is a kernel parameter for specifying what level of C-state that is allowed.<br />
intel_idle.max_cstate=1<br />
<br />
So I opened up /etc/default/grub and modified the GRUB_CMDLINE_LINUX_DEFAULT:<br />
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_idle.max_cstate=1"<br />
<br />
Then I ran<br />
sudo update-grub2<br />
sudo reboot<br />
<br />
Finally I confirmed that the cpu was no longer scaling using<br />
cat /proc/cpuinfo<br />
<br />
If I understand it correctly (haven't verified), you can set the max_cstate to 0 to disable the intel_idle driver, which should make the kernel use the bios/uefi settings instead.<br />
<br />
Sources:<br />
<a href="https://wiki.ntb.ch/infoportal/_media/embedded_systems/ethercat/controlling_processor_c-state_usage_in_linux_v1.1_nov2013.pdf">Info from Dell</a><br />
<a href="https://www.ibm.com/support/pages/linux-ignores-c-state-settings-unified-extensible-firmware-interface-uefi-servers">Info from IBM</a>Sniglomhttp://www.blogger.com/profile/07928207350672548445noreply@blogger.com0tag:blogger.com,1999:blog-7954128447214690493.post-75499607166558202722020-03-11T12:32:00.003+01:002020-04-11T21:43:54.700+02:00Where does files mount in Ubuntu?So I was mounting network directories using the graphical interface in the files application, when I needed to use the mount points with the terminal. Where are those mount points located?<br />
<br />
That location is here:<br />
/run/user/[uid]/gvfs/[mount]/<br />
<br />
Source: <a href="https://askubuntu.com/questions/1155864/how-do-i-cd-the-remote-server-directory-mounted-through-file-nautilus">askubuntu.com</a></mount></uid>Sniglomhttp://www.blogger.com/profile/07928207350672548445noreply@blogger.com0tag:blogger.com,1999:blog-7954128447214690493.post-24900041909524376242019-12-12T16:19:00.002+01:002019-12-12T16:20:30.454+01:00openssl: Can't load /home/[username]/.rnd into RNGOn Ubuntu 18.04 LTS I got the following error message:<br />
Can't load /home/sniglom/.rnd into RNG<br />
<br />
The solution was to comment out the following line in /etc/ssl/openssl.cnf:<br />
RANDFILE = $ENV::HOME/.rnd<br />
<br />
I found this solution via the <a href="https://github.com/openssl/openssl/issues/7754#issuecomment-541307674">openssl project at github</a>.<br />
Sniglomhttp://www.blogger.com/profile/07928207350672548445noreply@blogger.com0tag:blogger.com,1999:blog-7954128447214690493.post-53945352004436250932019-11-04T13:46:00.002+01:002019-11-04T13:46:49.109+01:00Slack open links in its own browser on UbuntuRunning 18.04 LTS I discovered an odd behavior from Slack. Instead of opening links in my regular FIrefox installation, it opened its own Firefox-instance. That instance had no plugins and was grouped as a slack process in the menu bar. Weird.<br />
<br />
Reinstalling Slack from Ubuntu Software didn't help and I couldn't find a setting within Slack that controlled this.<br />
<br />
The solution to my issue was to install the .deb file from Slack's homepage, instead of using Ubuntu Software. After doing so, links opened through my regular Firefox installation, instead of starting new processes belonging to Slack.<br />
<br />
Source: <a href="https://askubuntu.com/questions/1103461/slack-shows-opened-links-to-browser-as-another-slack-instance-in-task-bar">askubuntu.com</a>Sniglomhttp://www.blogger.com/profile/07928207350672548445noreply@blogger.com0tag:blogger.com,1999:blog-7954128447214690493.post-24420125216910483562019-10-01T21:34:00.001+02:002019-10-01T21:34:26.966+02:00option OSS requires SDL_AUDIOTrying to compile SDL20 I got the following message. It took a while before I realized that this wasn't a library that I needed to install, I needed to reconfigure SDL20 to add the SDL_AUDIO option.<br />
To do that I simply ran "make config" in the SDL20 port directory and added SDL_AUDIO.Sniglomhttp://www.blogger.com/profile/07928207350672548445noreply@blogger.com0tag:blogger.com,1999:blog-7954128447214690493.post-57767111380069249822019-10-01T13:33:00.003+02:002019-10-01T13:33:50.511+02:00FreeBSD: X needs Python 3.5 at least, but 2.7 was specified.When trying to compile using the ports system, the error message that something needs Python 3.x, but 2.7 was specified is quite common.<br />
This is due to the ports system "remembering" the python version that was specified by a top level package, while a dependency may require something else.<br />
<br />
The solution is to manually compile the dependency first.<br />
<br />
In my case I was trying to build sdl_sound, but it failed due to meson-0.51.2 needs Python 3.5 at least, but 2.7 was specified.<br />
To fix this I compile meson first, then I go back and compile sdl_sound.<br />
<br />
Sniglomhttp://www.blogger.com/profile/07928207350672548445noreply@blogger.com0tag:blogger.com,1999:blog-7954128447214690493.post-22992989084173989132019-09-22T22:39:00.003+02:002019-09-22T22:41:40.630+02:00Avoid configuration prompts when installing freebsd portsWhen installing ports with many dependencies, repeatedly stopping the compilation to show a configuration prompt is annoying, especially if you want the default values. This can be avoided in a couple of ways.<br />
<br />
When installing a port, adding either of these batch flag uses default.<br />
<blockquote>make install BATCH=YES</blockquote><blockquote>make install -DBATCH</blockquote><br />
The batch flag can also be set as an environment variable.<br />
<blockquote>export BATCH=yes</blockquote><br />
What if you want to configure everything first and then compile?<br />
<blockquote>make config-recursive</blockquote>Remember that this command needs to be run many times until all configuration has been performed.<br />
<br />
Sources:<br />
<a href="https://unix.stackexchange.com/questions/101971/how-can-i-configure-all-dependencies-before-installation">1 unix.stackexchange.com</a><br />
<a href="https://unix.stackexchange.com/questions/5257/how-can-i-avoid-the-prompts-when-installing-a-freebsd-port">2 unix.stackexchange.com</a>Sniglomhttp://www.blogger.com/profile/07928207350672548445noreply@blogger.com0tag:blogger.com,1999:blog-7954128447214690493.post-89356146229005451792019-09-22T22:21:00.000+02:002019-09-22T22:21:03.383+02:00Get octal permissions for files.Sometimes it would be nice to read the permissions in octal, not only set it in octal.<br />
This can be done using the stat tool.<br />
<br />
This command will list all files/folders and their octal permission.<br />
<blockquote>stat -c "%a %n" *</blockquote><br />
-c is for specifying the display format.<br />
%a is the octal permission and %n is the file name.<br />
<br />
Source: <a href="https://askubuntu.com/questions/152001/how-can-i-get-octal-file-permissions-from-command-line">AskUbuntu.com</a>Sniglomhttp://www.blogger.com/profile/07928207350672548445noreply@blogger.com0tag:blogger.com,1999:blog-7954128447214690493.post-87503226877320899122016-12-11T20:50:00.001+01:002016-12-11T20:50:49.262+01:00error while loading shared libraries: libtorrent.so.19After compiling rtorrent on Ubuntu 16.04 I got the following error message:<br />
rtorrent: error while loading shared libraries: libtorrent.so.19: cannot open shared object file: No such file or directory<br />
<br />
The solution was to add the following to /etc/ld.so.conf<br />
include /usr/local/lib<br />
<br />
Then after doing that run<br />
ldconfig<br />
<br />
Source: <a href="https://ubuntuforums.org/showthread.php?t=371275&page=4">Ubuntu Forums</a><br />
Sniglomhttp://www.blogger.com/profile/07928207350672548445noreply@blogger.com0tag:blogger.com,1999:blog-7954128447214690493.post-56723909465856956982016-11-18T16:00:00.003+01:002016-11-18T16:00:48.359+01:00Raspbian upgrade from wheezy to Jessie hangs on Started Permit User Sessions.After I upgraded from wheezy to jessie my Raspberry refused to boot. It was stuck on Started Permit User Sessions.<br />
The solution is in editing the cmdline.txt at /boot<br />
<br />
I changed mine from this:<br />
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait fbcon=map:10 fbcon=font:VGA8x8 plymouth.enable=0<br />
<br />
to this:<br />
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootdelay=10 rootwait usbhid.mousepoll=0 init=/lib/sysvinit/init<br />
<br />
After reading at the <a href="https://www.raspberrypi.org/forums/viewtopic.php?t=104314">Raspberry forums</a> and it booted fine again.Sniglomhttp://www.blogger.com/profile/07928207350672548445noreply@blogger.com0tag:blogger.com,1999:blog-7954128447214690493.post-25389688336941682632016-11-14T20:20:00.002+01:002016-11-14T22:42:37.475+01:00Hårdvaruarkitektur i Raspberry Pi 1På många hemsidor kan man läsa om att Raspberry Pi har en teoretisk busshastighet på 60MB/s. Detta är en väldigt grov förenkling som är baserad på att Raspberry Pi har en USB 2.0-kanal, denna är på 480mbit = 60MB/s.<br />
<br />
Tittar man i dokumentationen står det så här;<br />
The bus interface provides high bandwidth connections between the processor, second level caches, on-chip RAM, peripherals, and interfaces to external memory.<br />
<blockquote>There are separate bus interfaces for:<br />
*instruction fetch, 64-bit data<br />
*data read/write, 64-bit data<br />
*peripheral access, 32-bit data<br />
*DMA, 64-bit data.</blockquote><br />
<blockquote>Bus clock speeds<br />
The bus interface ports operate synchronously to the CPU clock if IEM is not implemented.</blockquote><br />
Huruvida IEM är implementerat på Raspberry Pi vågar jag inte svara på, men jag gissar på att det inte är det. Man har velat hålla priset så lågt som möjligt och det finns många rapporter på att de som överklockat sin Pi fått datakorruption.<br />
<br />
Utgår man från att IEM är av, kan man dra följande slutsats;<br />
<br />
Bussen mot ram är<br />
5600MB/s = 700MHz * 64 bitar / 8 bitar<br />
<br />
Bussen mot peripheral är<br />
2800MB/s = 700MHz * 64 bitar / 8 bitar<br />
<br />
De peripherals som Raspberryn har är GPIO-portar, SD-kortsläsare, USB och nätverk.<br />
<br />
pi@raspberrypi ~ $ lsusb -t<br />
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M<br />
|__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/3p, 480M<br />
|__ Port 1: Dev 3, If 0, Class=vend., Driver=smsc95xx, 480M<br />
<br />
Här kan vi se att det finns en intern USB-port i Raspberryn, denna delas sedan med ett kombinerat USB-hubb och nätverkschipp. Nätverkschippet sitter alltså anslutet på en USB-hubb som i sin tur sitter ansluten i den enda USB-porten. Detta förklarar varför den billiga Raspberry-modellen utan nätverk bara har en USB-port.<br />
<br />
Den totala USB-bandbredden är 480mbit, vilket ger 60MB i teorin. I praktiken är teoretisk USB-throughput runt 53MB/s, men implementationerna är oftast så mycket sämre att man inte ska förvänta sig mer än runt ~30MB/s. Läs mer om detta här: http://electronics.stackexchange.com/questions/24700/why-are-usb-devices-slower-than-480-mbit-s<br />
<br />
<br />
Raspberryn har ett minneschip anslutet. Detta är LPDDR2 från antingen Hynix eller Samsung och kör som standard 400MHz.<br />
Båda modellerna av minnen är specade till 400MHz och 32bitar<br />
<br />
3200MB/s = 800MHz * 32 bitar / 8 bitar<br />
<br />
Detta resultat kan även verifieras mot följande benchmark:<br />
https://panthema.net/2013/pmbw/RaspberryPi-ModelB/<br />
Här är den sekventiella topprestandan som går att få ut ~1.17GB/s.<br />
Tittar man på memset i tinymembench får man liknande siffror.<br />
<br />
Dessa siffror tyder på en väldigt låg effektivitet på runt 35%.<br />
<br />
<br />
<br />
Hynix: H9TKNNN4GDMP LRNDM 800MHz (400MHz)<br />
http://www.hynix.com/inc/pdfDownload.jsp?path=/datasheet/Databook/Databook_MobileMemory.pdf<br />
<br />
Samsung: K4P4G324EB-AGC1<br />
http://www.samsung.com/global/business/semiconductor/html/common/file/support/part_number_decoder/Mobile_SDR_DDR_code.pdf<br />
<br />
https://panthema.net/2013/pmbw/RaspberryPi-ModelB/<br />
http://www.memetic.org/raspberry-pi-overclocking/<br />
http://elinux.org/RPiconfig#Overclocking_options<br />
http://www.petervis.com/Raspberry_PI/Raspberry_Pi_Model_B_512MB_RAM_Revision_2/K4P4G324EB.html<br />
<br />
<br />
http://www.irongeek.com/i.php?page=security/svartkast-pogoplug-dropbox<br />
<br />
<br />
Jag jämför tre system, ett Core 2 Duo med dualchannel, ett Atomsystem med single channel, samt en överklockad Raspberry.<br />
<br />
Tittar vi på tiny membench sedan ser vi att skillnaden är långt mycket större än så.<br />
Oftast har Raspberry Pi runt en tiondel av C2D-maskinen kan få ut.<br />
<br />
För memset kan man se att Raspberryn når upp en effektivitet på ~18% medan C2D-systemet når runt ~40% och Atomsystemet drygt 55%.<br />
<br />
C2D - DDR2 667MHz, 128bit - 10.6GB/s<br />
C copy backwards : 1420.2 MB/s (1.3%)<br />
C copy : 1413.9 MB/s (0.9%)<br />
C copy prefetched (32 bytes step) : 1425.8 MB/s (1.0%)<br />
C copy prefetched (64 bytes step) : 1432.0 MB/s (1.5%)<br />
C 2-pass copy : 1309.2 MB/s (3.4%)<br />
C 2-pass copy prefetched (32 bytes step) : 1359.3 MB/s<br />
C 2-pass copy prefetched (64 bytes step) : 1365.6 MB/s (1.9%)<br />
C fill : 1932.5 MB/s (2.2%)<br />
---<br />
standard memcpy : 2067.2 MB/s (1.0%)<br />
standard memset : 4125.7 MB/s (0.5%)<br />
<br />
RPi DDR2 1000MHz, 32bit, - 4GB/s<br />
C copy backwards : 92.4 MB/s (7.1%)<br />
C copy : 131.7 MB/s (6.4%)<br />
C copy prefetched (32 bytes step) : 187.3 MB/s (10.2%)<br />
C copy prefetched (64 bytes step) : 188.4 MB/s (1.4%)<br />
C 2-pass copy : 115.0 MB/s (13.6%)<br />
C 2-pass copy prefetched (32 bytes step) : 133.7 MB/s (8.8%)<br />
C 2-pass copy prefetched (64 bytes step) : 146.3 MB/s (8.6%)<br />
C fill : 450.3 MB/s (1.5%)<br />
---<br />
standard memcpy : 205.0 MB/s (3.0%)<br />
standard memset : 721.3 MB/s (1.8%)<br />
<br />
Atom N450 DDR2 667MHz, 64bit - 5.3GB/s<br />
C copy backwards : 1186.6 MB/s<br />
C copy : 1183.7 MB/s<br />
C copy prefetched (32 bytes step) : 1015.0 MB/s<br />
C copy prefetched (64 bytes step) : 1014.8 MB/s<br />
C 2-pass copy : 1203.6 MB/s<br />
C 2-pass copy prefetched (32 bytes step) : 898.5 MB/s<br />
C 2-pass copy prefetched (64 bytes step) : 898.4 MB/s<br />
C fill : 1520.9 MB/s (0.2%)<br />
---<br />
standard memcpy : 1670.0 MB/s (0.3%)<br />
standard memset : 3028.3 MB/s<br />
<br />
<br />
<br />
http://code.google.com/p/flashfire/<br />
Sniglomhttp://www.blogger.com/profile/07928207350672548445noreply@blogger.com0tag:blogger.com,1999:blog-7954128447214690493.post-91103841813883168942016-11-14T20:19:00.002+01:002016-11-14T20:19:49.853+01:00Kompileringsflaggor till Raspberry PiJag försöker lista ut vilka GCC-flaggor man bör köra mot Raspberry Pi och vad som kan förbättra prestandan. Många är av åsikten att man inte köper en Raspberry för att få prestanda och att optimeringar därför är överflödigt. Personligen anser jag att ju simplare ett system är, desto mer finns det att hämta ur optimeringar. Dessutom kan man dra nytta av att systemet är slutet genom att det går att reproducera alla resultat.<br />
<br />
I GCC finns det ett antal flaggor som jag valt att ta en titt på.<br />
-pipe<br />
-march<br />
-mcpu<br />
-mtune<br />
-mfloat-abi<br />
-mfpu<br />
-O0<br />
-O1<br />
-O2<br />
-O3<br />
-Ofast<br />
-Os<br />
<br />
-fsched2-use-superblocks<br />
-fira-hoist-pressure <- kan ge mindre kod, används i Os<br />
-fira-loop-pressure <- används kanske vid O3<br />
-fira-region= one för O1 Os, mixed för O2/O3, all ska prövas<br />
-funsafe-loop-optimizations<br />
-fmodulo-sched<br />
-fmodulo-sched-allow-regmoves<br />
-fgcse-sm<br />
-fgcse-las<br />
-fgcse-after-reload<br />
-fmerge-all-constants<br />
<br />
-fprofile-use path <- gör funroll loops och liknande! Path är inte obligatorisk<br />
<br />
<br />
-pipe<br />
Denna flaggan påverkar inte slutresultatet utan gör endast att GCC jobbar med pipes istället för temporära filer. Resultatet är att man får mindre diskaccess men betalar med ram.<br />
Så länge GCC inte kraschar av brist på ram är -pipe att föredra, då det snabbar upp kompileringen. Särskilt på Raspberryn som har ett långsamt filsystem.<br />
<br />
-march<br />
Sätter vilken arkitektur GCC kompilerar för, detta avgör vilka assemblerinstruktioner som är tillåtna i slutbinären.<br />
Exempelvis kan man kompilera för armv6, armv6j eller armv6zk. armv6j står för Jazelle, hårdvara för java. Enligt ARMs hemsida ger ARM1176JZF-S stöd för armv6k-extensions som inte ARM1176JF-S har. Läser man en mailinglista från GCC-utvecklare ska inget skilja mellan armv6zk och tidigare modeller från en kompilators perspektiv. Så armv6 borde ge precis samma prestanda som armv6j eller armv6zk.<br />
<br />
-mcpu<br />
Specificerar ännu striktare än -march, inte bara arkitektur utan även en specifik CPU. På detta sätt kan GCC optimera efter just den processorn man använder.<br />
Processorn som sitter i Raspberry Pi heter ARM1176JZF-S, där F står för floating point. I GCC specificeras följande modeller inom Arm11:<br />
‘arm1136j-s’, ‘arm1136jf-s’, ‘mpcore’, ‘mpcorenovfp’, ‘arm1156t2-s’, ‘arm1156t2f-s’, ‘arm1176jz-s’, ‘arm1176jzf-s’, den sista är den som sitter i Raspberry Pi<br />
<br />
-mtune<br />
Denna flagga optimerar efter en viss processor utan att begränsa instruktionsrymden till endast den processorn.<br />
Exempelvis skulle man kunna köra -march i386 med mtune för Pentium 3 och på så sätt göra koden körbar på alla processorer som stöder i386, men optimera för Pentium 3.<br />
<br />
-mfpu<br />
Specificerar vilken FPU som finns tillgänglig. För Raspberry Pi finns endast vfp som alternativ.<br />
<br />
-mfloat-abi<br />
Ställer hur flyttalsoperationer ska utföras. Ska stå på hard för att Raspberryns VFP ska utnyttjas.<br />
<br />
-O0<br />
Optimering avslaget, detta är default<br />
<br />
-O1<br />
Lägsta nivån av optimering. Många optimeringar som ökar hastigheten utan att öka storleken, samt storleksreducerande optimeringar är aktiverade.<br />
<br />
-Os<br />
Tar alla storleksreducerande optimeringar från O2 plus några extra. Slutmålet är minsta möjliga binär<br />
<br />
-O2<br />
Som O1, fast mer av det goda. O2 tar längre tid att kompilera än O1.<br />
<br />
-O3<br />
Tillåter även kompileringar som ger större binärer. Risken med O3 är att den större och snabbare binären kan gå långsammare på grund av att mindre får plats i cache.<br />
<br />
-Ofast<br />
Som O3, fast med ytterligare ett par optimeringar (bland annat -ffast-math, Fortran-specific, -fno-protect-parens och -fstack-arrays). Är inte längre ISO/IEEE-kompatibel. <br />
<br />
Källor:<br />
http://www.arm.com/products/processors/classic/arm11/arm1176.php<br />
http://infocenter.arm.com/help/topic/com.arm.doc.ddi0301h/DDI0301H_arm1176jzfs_r0p7_trm.pdf<br />
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0301h/apbs02s02.html<br />
http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html<br />
http://en.wikipedia.org/wiki/ARM11<br />
http://gcc.gnu.org/ml/gcc-patches/2004-09/msg03073.html<br />
<br />
Benchmarks:<br />
https://github.com/ssvb/tinymembench/wiki/Raspberry-Pi-%28BCM2708%29<br />
http://www.netlib.org/benchmark/linpackc<br />
http://www.openssl.org/source/<br />
Sniglomhttp://www.blogger.com/profile/07928207350672548445noreply@blogger.com0tag:blogger.com,1999:blog-7954128447214690493.post-52893453520726717082016-11-14T20:17:00.001+01:002016-11-14T20:17:06.800+01:00Running docker images on Raspberry PiMy Raspberry Pi 2 is running Ubuntu. I wanted to try the phoronix test suite with a different compiler and thought that Docker could be great for this. After installing docker and trying to run my image I was met by "write pipe: bad file descriptor".<br />
<br />
The issue was that docker is not architecture aware. Thus running "docker create ubuntu" will default to x86_64, regardless of your arch. To run ubuntu the solution was to ask for armv7/armhf-ubuntu instead.<br />
<br />
Sources:<a href="https://hub.docker.com/u/armv7/"><br />
hub.docker.com - armv7</a><br />
<a href="http://stackoverflow.com/questions/40022817/docker-write-pipe-bad-file-descriptor">Stackoverflow</a>Sniglomhttp://www.blogger.com/profile/07928207350672548445noreply@blogger.com0tag:blogger.com,1999:blog-7954128447214690493.post-61563780214367821102016-11-09T00:10:00.001+01:002016-11-09T00:10:35.286+01:00Set CPU Frequency on Raspberry Pi in FreeBSDWhile benchmarking I noticed very low results with FreeBSD. Apparently the Raspberry Pi 2 is locked to the low frequency of 600MHz, while in Ubuntu a governor scales it between 600 and 900.<br />
My first try was to edit /boot/msdos/CONFIG.TXT but the different overclocking values applicable for Linux did not affect FreeBSD.<br />
<br />
The solution was to enable powerd in FreeBSD.<br />
<br />
Add the following to /etc/rc.conf<br />
powerd_enable="YES"<br />
powerd_flags="-a hadp"<br />
<br />
That will enable powerd to utilize frequency scaling from 600MHz to 900MHz depending on load. hadp means hiadaptive mode and is a scaling leaning towards more performance.<br />
You can read more via "man powerd" and also try out different modes live, by running for example:<br />
powerd -v -a hadp<br />
<br />
Sources:<br />
<a href="https://vzaigrin.wordpress.com/2015/08/15/control-cpu-frequency-on-raspberry-pi-with-freebsd-10-2/">vzaigrin</a><br />
<a href="http://blog.nobugware.com/post/2016/freebsd_raspberry_pi2/">nobugware</a>Sniglomhttp://www.blogger.com/profile/07928207350672548445noreply@blogger.com0tag:blogger.com,1999:blog-7954128447214690493.post-1646102530510734222016-11-08T02:46:00.001+01:002016-11-08T02:59:22.440+01:00Portsnap fetch fails in RaspBSD 12 on RPi3<br />
First I couldn't run 'portsnap fetch' due to the system time being off.<br />
Snapshot appears to have been created more than one day into the future!<br />
(Is the system clock correct?)<br />
Cowardly refusing to proceed any further.<br />
<br />
Setting the time using the command 'ntpdate' fixed that issue, but got me a new instead:<br />
Verifying snapshot integrity... Segmentation fault (core dumped)<br />
snapshot corrupt.<br />
<br />
This can be worked around by manually installing the ports tree.<br />
wget http://ftp.freebsd.org/pub/FreeBSD/ports/ports/ports.tar.gz<br />
tar xvf ports.tar.gz -C /usr/<br />
<br />
Sources: <br />
<a href="https://www.freebsd.org/doc/handbook/ports-using.html">FreeBSD documentation - using ports</a><br />
<a href="http://qiita.com/slug/items/d235c5d3d7972c90605d">slug</a><br />
<br />
<br />
<br />
Sniglomhttp://www.blogger.com/profile/07928207350672548445noreply@blogger.com0tag:blogger.com,1999:blog-7954128447214690493.post-6366063603762915162016-11-07T23:25:00.003+01:002016-11-07T23:25:56.887+01:00Resizing the root partition in RaspBSD 12I was trying to resize the root partition for RaspBSD 12 on a Raspberry Pi 3 and ran in some trouble, since growfs showed "operation not permitted".<br />
<br />
Here was my solution to resizing:<br />
gpart show<br />
This showed that my disk was named mmcsd0 and that my root partition had the index "2".<br />
<br />
gpart resize -i 2 -a 4k -s 20gb mmcsd0<br />
Here I'm resizing the root partition, 2, to 20gb<br />
<br />
gpart commit<br />
save the changes<br />
<br />
service growfs onestart<br />
resize the file system<br />
<br />
Sources:<br />
<a href="https://www.freebsd.org/doc/handbook/disks-growing.html">FreeBSD.org documentation</a><br />
<a href="https://www.digitalocean.com/community/questions/freebsd-growfs-operation-not-permitted-aka-enlarge-your-partition">DigitalOcean</a>Sniglomhttp://www.blogger.com/profile/07928207350672548445noreply@blogger.com1tag:blogger.com,1999:blog-7954128447214690493.post-606787296946800812015-11-28T14:13:00.005+01:002015-11-28T14:13:52.925+01:00Firefox renderar hemsidor annorlunda under Ubuntu 15.10Jag märkte att vissa hemsidor jag surfade såg väldigt konstiga ut, som att typsnitten inte längre hade samma storlek. Tabeller kunde bli förskjutna exempelvis.<br />
Lösningen var enkel, installera de typsnitt som var tänkta att användas på dessa hemsidor:<br />
sudo apt-get install ttf-mscorefonts-installerSniglomhttp://www.blogger.com/profile/07928207350672548445noreply@blogger.com0tag:blogger.com,1999:blog-7954128447214690493.post-91197084377647259382015-11-28T14:11:00.002+01:002015-11-28T14:11:41.236+01:00Stäng av musacceleration i Ubuntu 15.10Jag förstår inte hur inställningen kan saknas i både Ubuntu och OSX. Blev helt tokig efter att datorn nyinstallerats.<br />
Vem är det som vill ha extrem musacceleration som standard? Vem är denna person som inte ens tycker man ska kunna välja nivån av acceleration?<br />
<br />
En enkel fix är att skriva följande i terminalen:<br />
xset m 0 0<br />
<br />
Det kommandot stänger av musacceleration för en mus, det är möjligt att "m" behöver ändras till något annat för andra typer av enheter så som touchpads.Sniglomhttp://www.blogger.com/profile/07928207350672548445noreply@blogger.com0tag:blogger.com,1999:blog-7954128447214690493.post-10065097420250248422015-10-22T15:23:00.003+02:002015-10-22T15:23:54.236+02:00SSH hänger sig med jumbo framesNär jag skulle ansluta till Amazon via SSH hängde sig bara min session. Körde jag verbose kunde man se följande:<br />
debug1: sending SSH2_MSG_KEX_ECDH_INIT<br />
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY<br />
<br />
Men inget mer hände. Efter ett par sökningar hittade jag denna tråden där MTU nämns:<br />
https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/1254085<br />
<br />
När jag såg MTU-diskussionen kom jag genast ihåg att jag slagit på jumbo frames, för ökad lokal nätverksprestanda i mitt gigabitnät. Att det skulle påverka utgående SSH-sessioner var inte något som hade slagit mig. Sagt och gjort så sänkte jag MTU-storleken och det gick genast att använda ssh igen.<br />
<br />
Exempel på hur man ställer MTU till 1500:<br />
sudo ip link set eth0 mtu 1500Sniglomhttp://www.blogger.com/profile/07928207350672548445noreply@blogger.com0