Thursday 27 July 2017

How Big is 'At Scale'?

I see the term 'at scale' being used a lot on tech/engineering blogs - "You need to do it like this when you run your app at scale", "We had to do this to make it work at scale" etc etc.

But what exactly determines that I am doing something at scale?

How do you quantify that?  There's no SI unit for scale like the 'Double Decker Bus' or the 'Olympic Swimming Pool'.  I like to think that if my systems break either due to the amount of traffic they're being asked to handle or the amount of data I've asked them to query then I'm probably running my systems 'at scale'.

Today I read the excellent ebook Scaling PHP Applications.  The blurb on the website makes the proud claim "Scale PHP 5.6 (and 7), nginx, haproxy, MySQL 5.6, Redis, and Memcache to 10K req/second".

That sounds like an upper limit for 'at scale' - 10,000 requests per second.

I'm sure I've seen my systems consistently handle more than 10k req/s.  Sure enough, my monitoring graphs are showing peak HTTP traffic of 25k req/s - that's 2.5x 'at scale'.  I call this 2.5 Xscale.

Taking a function of the number of requests handled and the service uptime, I got some stats from my system:

nginx - 14,227 req/s (1.4 Xscale)
php-fpm - 10,999 req/s (1.09 Xscale)
memcached - 93,221 cmd/s (9.3 Xscale)

Thursday 29 June 2017

Apple Magic Keyboard 2 on Linux

Annoyingly, the Apple Magic Keyboard 2 is only recognised as a generic Bluetooth hid keyboard so the Fn and shortcut keys don't work correctly (using hid-generic kernel module).

I've started work on a set of patches for the hid-apple kernel module to add support for this keyboard.

Using Wireshark to sniff the Bluetooth packets, I've found the following are emitted as Fn KeyDown and KeyUp events:

Fn KeyDown: a1 01 00 00 00 00 00 00 00 00 02
Fn KeyUp:   a1 01 00 00 00 00 00 00 00 00 00

I'm going to attempt to add these as a customisation in the hid-apple module and see how I get on.

Monday 2 January 2017

External USB Audio on Raspberry Pi 3

The rpi3 could see the USB audio device but not be able to enable it. The following errors were observed in dmesg:

[    4.214503] snd_bcm2835: unknown parameter 'index' ignored
[    4.470103] snd-usb-audio 1-1.2:1.0: cannot find the slot for index 0 (range 0-0), error: -16
[    4.470134] usb 1-1.2: cannot create card instance 0
[    4.470164] snd-usb-audio: probe of 1-1.2:1.0 failed with error -16
[    4.470823] usbcore: registered new interface driver snd-usb-audio

It looks like a conflict with the card index of the internal sound codec. Because I don't want to use the interval sound codec I just blacklisted the module to prevent it from loading by adding:

blacklist snd_bcm2835

To the configuration file /etc/modprobe.d/rpi-blacklist.conf