Monday, 2015-06-15

*** dkalleg has quit IRC00:20
*** JRobinson__ has quit IRC00:39
*** JRobinson__ has joined #openstack-ansible00:43
*** abitha has quit IRC01:40
*** daneyon has quit IRC03:29
*** logan2 has quit IRC03:35
*** gtt116 has joined #openstack-ansible04:13
gtt116yo04:13
*** meshok0 has joined #openstack-ansible04:27
*** sdake_ has joined #openstack-ansible04:56
*** sdake has quit IRC04:59
*** javeriak has joined #openstack-ansible05:04
*** meshok0 has quit IRC05:21
*** JRobinson__ is now known as JRobinson__afk05:35
*** shausy has joined #openstack-ansible05:36
*** abitha has joined #openstack-ansible05:50
*** JRobinson__afk is now known as JRobinson__05:53
*** radek__ has joined #openstack-ansible06:10
*** abitha has quit IRC06:20
*** metral_zzz is now known as metral06:35
*** sdake has joined #openstack-ansible06:56
*** sdake has quit IRC06:57
*** sdake has joined #openstack-ansible06:57
*** sdake_ has quit IRC07:00
*** abitha has joined #openstack-ansible07:20
*** abitha has quit IRC07:25
*** meshok0 has joined #openstack-ansible07:26
*** subscope has joined #openstack-ansible07:34
*** JRobinson__ has quit IRC07:43
*** sdake has quit IRC08:06
*** sura8257 has quit IRC08:18
*** vdo has joined #openstack-ansible08:34
*** subscope has quit IRC08:54
*** javeriak has quit IRC09:06
*** abitha has joined #openstack-ansible09:10
*** abitha has quit IRC09:14
*** sura8257_ has joined #openstack-ansible09:49
*** gtt116_ has joined #openstack-ansible10:18
*** gtt116 has quit IRC10:21
svgA good day to all10:39
*** sura8257_ has quit IRC10:50
*** abitha has joined #openstack-ansible10:59
*** jaypipes has joined #openstack-ansible11:00
*** abitha has quit IRC11:04
odyssey4meo/ svg how was your w/end11:44
svgo/ odyssey4me11:49
svgcalm11:49
svgdidn't do anythin, achievement unlocked11:49
svgneeded some rest from openstack network troubleshooting11:50
*** sdake has joined #openstack-ansible11:54
*** sdake has quit IRC11:55
*** sdake has joined #openstack-ansible11:55
evrardjphello everyone12:02
evrardjpGood afternoon for some, morning for the others12:03
svgA good day to you too evrardjp12:03
svgan upate on our network troubleshooting debacle12:07
svgit seems things are falling down once router namespaces are created12:08
svgpossibly somewhere between 100-200 on the whole stack, but hard to pin an exact number here12:09
svgi/o with containers also seem to interfere with the loopback adapter12:10
*** KLevenstein has joined #openstack-ansible12:11
svgwhen things go wrong, we can't ping lo anymor12:12
*** KLevenstein has quit IRC12:54
openstackgerritKevin Carter proposed stackforge/os-ansible-deployment: Updates the container build process  https://review.openstack.org/19121512:54
*** KLevenstein has joined #openstack-ansible12:55
*** KLevenstein has quit IRC12:55
*** KLevenstein has joined #openstack-ansible12:56
openstackgerritKevin Carter proposed stackforge/os-ansible-deployment: Updates the container build process  https://review.openstack.org/19151712:57
*** KLevenstein has quit IRC13:06
*** KLevenstein has joined #openstack-ansible13:07
*** KLevenstein has quit IRC13:16
*** gtt116__ has joined #openstack-ansible13:30
*** gtt116_ has quit IRC13:33
*** ccrouch has joined #openstack-ansible13:37
*** Mudpuppy has joined #openstack-ansible13:51
*** alextricity has joined #openstack-ansible13:54
*** alextricity has quit IRC13:56
*** shausy has quit IRC13:56
cloudnullMorning.14:02
svgGood afternoon :)14:07
*** stevemar has joined #openstack-ansible14:12
*** jwagner_away is now known as jwagner14:16
*** openstackgerrit has quit IRC14:24
*** openstackgerrit has joined #openstack-ansible14:24
*** sigmavirus24_awa is now known as sigmavirus2414:28
*** KLevenstein has joined #openstack-ansible14:34
*** galstrom_zzz is now known as galstrom14:38
sigmavirus24Hi svg14:46
svghi sigmavirus2414:46
sigmavirus24Did you figure out what was happening with your networking woes?14:47
cloudnullwe some folks have some time, these items need to be reviewed/worked on https://review.openstack.org/#/q/starredby:cloudnull+status:open,n,z14:48
svgsigmavirus24: can you read ^^ (about 2,5 h ago) -> latest news14:49
sigmavirus24svg: I was hoping there was newer news :D14:50
cloudnullsvg: are your envs creating 200 + routers or just network namespaces ?14:51
cloudnullcc ^ Apsu14:51
ApsuHallo14:52
cloudnullApsu: we'rent there some kernel tunings that we had done for envs that were/are using LOTS of neutron namespaces ?14:53
cloudnulli thought we had something , but im precaffiniated and in training.14:54
ApsuMmm, there's some things14:54
svgwhen tat happns, certain things hit the fan, and metal hosts etc start to become unresponsive network wise14:55
svg(bit of delay, traveling on train)14:55
svgcloudnull: we have a base unit of deploy (heat) with two hosts, with each two nics connected to two networks, each network has its router connected to an external network14:56
svgonly the external network is part of another tenant14:57
Apsusvg: What are the names of these namespaces and where are you seeing them?14:57
ApsuAre they all qrouter-* and qdhcp-*?14:58
svgwe typicaly test that in batches of 505, and that often starts to fail wsomewehere between 100 and two hundred14:58
svgApsu: yes, seen on the neutron-agents containers14:59
ApsuOh, so wait, you're specifically creating 100s of routers and/or networks, and it falls over between 100-20015:00
svgyes15:00
ApsuNot that you've got a router and a couple networks and you're randomly getting hundreds of namespaces, lol15:00
Apsuok15:00
svg(not sure where it failes exactly, but something like that)15:01
ApsuWhat kind of load averages are you seeing?15:01
ApsuI mean, that's a LOT of routers/networks15:01
ApsuAnd Neutron is very inefficient at handling that many, fyi15:01
ApsuThat's 10x the scale most people operate at15:01
*** KLevenstein__ has joined #openstack-ansible15:04
svgload average is almost nothing, mostly less than one on a 48 core box15:04
*** KLevenstein has quit IRC15:05
*** KLevenstein__ is now known as KLevenstein15:05
svgthe base design idea we have is to encapsulate every app in its own network, with a "public" network and a management network for vm access15:05
svgthe latter being silly imho15:06
svgthen they want to do green/blue deployment  with such a base 'bubble'15:07
svgthey decided to move from vmware away to SDN to be able to grow beyond the 4096 vlan limiit...15:09
Apsulol15:09
ApsuWhat is this I don't even :)15:09
ApsuI see the VLAN limit as a hint. Mayyyybe you should be doing this differently, type thing15:10
ApsuUnless you're reselling datacenter space15:10
odyssey4mecloudnull it would appear that the apt cache updating has vastly improved success :) nice catch on the bug, and the patch to ansible too!15:11
cloudnullhopfully that patch https://github.com/ansible/ansible-modules-core/pull/1517 goes in for 1.9.215:12
svgfor the record, there were also some minor dns and network issues we straightened out, which barfed at us at deploy time15:12
svgbut ok, sao basically we're doing it wrong :)15:12
svgto many networks15:13
openstackgerritDarren Birkett proposed stackforge/os-ansible-deployment: Set permissions on user_secrets.yml to 0600  https://review.openstack.org/19185115:13
Apsusvg: We've seen scaling issues in Neutron before -- with and without containers -- when getting into the hundreds of networks range15:14
ApsuMostly around slightly older kernel versions15:14
ApsuBut also the fact Neutron's architecture/services scale poorly15:15
ApsuSome of the agents ship around the full port lists very often, for instance15:15
ApsuWhich gets large quickly and isn't a cheap (enough) operation to query15:15
*** sdake_ has joined #openstack-ansible15:23
palendaecloudnull: Playing with your container build patches in an AIO15:24
palendaeCode looks good, just want to see it before I vote15:24
svgApsu does this also explain why other containers and  hosts get in trouble to communicate withc each other?15:24
palendaesee it in action15:24
*** sdake has quit IRC15:27
Apsusvg: Possibly. That might be something else though15:30
Apsusvg: Maybe LXC has some limitations around high netns counts. My guess is probably not, probably something else going on15:31
vincent_vdkApsu: I'm wondering how larger hosting providers solve this problem15:32
vincent_vdklike OVH, Rackspace etc..15:33
cloudnullVincent_vdk I'm my experience providers at very large scale start leaning on sdn providers like plumgrid, etc.15:35
ApsuI'm not sure how much I can say about Rackspace's public cloud scaling architecture, but...15:35
vincent_vdk:)15:36
ApsuI can tell you that there's a lot of custom OVS plumbing, involving pushing flows directly in without letting the standard python bits do the calculations and port shipping15:36
ApsuBecause it didn't scale :)15:36
palendaeIf only there was an open source project where those fixes could have been pushed... >.>15:37
ApsuThat'd be sweet. We should start one15:37
palendaenova-network15:37
*** nosleep77 has joined #openstack-ansible15:37
ApsuNice name idea. Let's propose it15:37
palendaeIt's networks for nova, you see15:37
ApsuRight right, I follow15:37
cloudnullvincent_vdk: http://www.slideshare.net/andyhky/rackspace-hypervisor-networking-show-tell < andy hill network guru from rax public cloud.15:38
cloudnulla little old but worth a watch https://www.openstack.org/summit/openstack-summit-atlanta-2014/session-videos/presentation/neutron-at-scale15:39
Apsutl;dr, broooooken15:39
cloudnull^ truth15:39
vincent_vdkthanks for the pointers15:40
ApsuHonestly, going from the tested deployment size of devstack (> 1 node isn't common in the CI chain) to a production public cloud is a cosmic scale shift15:41
ApsuTakes entirely different methods to deal with15:41
vincent_vdkwe are now also looking at HP Helion, but they also use ovs underneath15:41
ApsuOVS itself isn't really the challenge, per se. It's moreso the machinery around what talks to it and how it deals with scale15:43
ApsuNeutron's mechanism for shipping around port information from L2 providers is poor with the stock OVS/LinuxBridge plugins15:44
ApsuEssentially every agent loop iteration there's a full port list query, ship and comparison with the database, to converge changes if necessary15:45
palendaeSounds like the problem is big networks15:45
ApsuTo align each agent machine's state15:45
ApsuBecause l2 agents are essential converging state machines15:45
openstackgerritIan Cordasco proposed stackforge/os-ansible-deployment: Add support for deploying Keystone with Fernet  https://review.openstack.org/18999815:46
Apsupalendae: Yep, pretty much15:47
ApsuNeutron's fairly dumb with respect to that for stock plugins15:48
cloudnullIt's no secret that our pub cloud uses ovs , but they have a custom sdn plugin that makes all the magic possible.15:48
cloudnullBut its worth mentioning that they employ a dedicated ops team and support staff to ensure all of that is happy. Ovs is a support and upgrade nightmare , IMHO.15:49
palendaeI'd imagine any deployer running at that scale would employ a dedicated team for the network15:50
palendaeClouds seem to still be very much pets for the ones operating them15:50
vincent_vdkall sounds very promising15:52
vincent_vdk:)15:52
*** jaypipes has quit IRC16:03
*** gus has joined #openstack-ansible16:04
*** jaypipes has joined #openstack-ansible16:05
*** sdake has joined #openstack-ansible16:11
*** sdake_ has quit IRC16:14
*** daneyon has joined #openstack-ansible16:26
*** daneyon has quit IRC16:26
*** daneyon has joined #openstack-ansible16:27
*** abitha has joined #openstack-ansible16:34
*** meshok0 has quit IRC16:50
svgokm thanks apsu cloudnull for your insights, I'm sending  our team back to the drawing board...16:50
Apsusvg: Good luck! If there's some specific failure with containers and namespaces I can help take a look at, let me know16:51
svgThanks. Hopelfulle the next issues will be clearer, if any.16:52
*** Mudpuppy has quit IRC16:54
*** javeriak has joined #openstack-ansible16:54
*** dkalleg has joined #openstack-ansible17:01
*** jwagner is now known as jwagner_away17:02
sigmavirus24So are we okay with having rsync installed on all of the keystone containers just to synchronize stuff for fernet?17:14
*** gtt116__ has quit IRC17:17
*** gtt116__ has joined #openstack-ansible17:18
stevellesigmavirus24: would something like this work for you? http://paste.openstack.org/show/294397/17:44
stevelleI wasn't clear on whether there was actually an issue with the shared secret ever hitting the deploy host17:45
sigmavirus24stevelle: it may, but synchronize would remove the necessity for that complexity so long as we can all agree rsync inside of the keystone containers is okay17:45
sigmavirus24stevelle: no one's objected to fetch/copy'ing other than we then have to add a local_action to clean it all up17:46
sigmavirus24That said, we're still (poorly) reimplementing synchronize just to avoid rsync which seems silly to me17:46
stevelleI find this easy enough to understand17:46
stevellebut I don't feel strongly either way17:46
stevelleI suppose you already have rsa keys on all the hosts so you can rsync.17:47
sigmavirus24Believe so17:48
stevellewhereas that is exactly what I was setting up with the above play17:48
sigmavirus24be back shortly after a quick lunch intermission17:52
stevelleI suppose I can't' think of a reason sync won't work.  The only hesitation there is that we are adding a package that the os_install_keystone.yml doesn't include already but that's in a var already.17:52
*** javeriak has quit IRC17:56
*** javeriak has joined #openstack-ansible17:57
*** Mudpuppy has joined #openstack-ansible18:04
*** galstrom is now known as galstrom_zzz18:06
*** stevemar2 has joined #openstack-ansible18:09
*** stevemar has quit IRC18:09
*** meshok0 has joined #openstack-ansible18:14
openstackgerritSteve Lewis proposed stackforge/os-ansible-deployment: Configure DB addresses for each service  https://review.openstack.org/19027118:19
stevellecores: ^ could use a refresh of workflow when you have time18:20
*** jwagner_away is now known as jwagner18:25
*** jmccrory has quit IRC18:26
*** sdake_ has joined #openstack-ansible18:29
*** jmccrory has joined #openstack-ansible18:31
openstackgerritSteve Lewis proposed stackforge/os-ansible-deployment: Allow Horizon to access multiple regions  https://review.openstack.org/19030218:33
*** sdake has quit IRC18:34
palendaestevelle: Done18:37
*** nosleep77 has left #openstack-ansible18:43
*** stevemar2 is now known as stevemar18:51
*** meshok01 has joined #openstack-ansible19:05
*** meshok0 has quit IRC19:05
openstackgerritIan Cordasco proposed stackforge/os-ansible-deployment: Create Junit XML Report from tempest run  https://review.openstack.org/19110319:07
openstackgerritSteve Lewis proposed stackforge/os-ansible-deployment: Move haproxy vars to defaults  https://review.openstack.org/19072119:10
openstackgerritSteve Lewis proposed stackforge/os-ansible-deployment: Updated to the latest stable rabbitmq release  https://review.openstack.org/19151419:24
stevellecores: another workflow refresh needed on https://review.openstack.org/#/c/190220/19:26
openstackgerritSteve Lewis proposed stackforge/os-ansible-deployment: Split environment file into component parts  https://review.openstack.org/19022019:26
openstackgerritMerged stackforge/os-ansible-deployment: Updates the container build process  https://review.openstack.org/19121519:38
sigmavirus24Apsu: are you certain that we set up the containers such that one can ssh from one container to another?19:38
Apsusigmavirus24: No I'm not certain. I was actually thinking host to host19:49
ApsuI suspect containers don't have privkeys on them, just authorized_keys19:50
sigmavirus24Apsu: yeah that's what it looks like :/19:50
sigmavirus24And host to containers19:50
Apsuyeah19:50
sigmavirus24Yeah that's what it looks like but I can't get past the keystone role at this point in time19:50
sigmavirus24so I'm runnign a setup-everything without my changes using synchronize19:50
*** javeriak has quit IRC19:50
*** sdake has joined #openstack-ansible19:54
*** javeriak has joined #openstack-ansible19:58
*** sdake_ has quit IRC19:58
*** daneyon_ has joined #openstack-ansible19:59
*** sdake_ has joined #openstack-ansible20:01
*** daneyon has quit IRC20:02
*** sdake has quit IRC20:05
*** javeriak has quit IRC20:06
*** javeriak has joined #openstack-ansible20:08
*** javeriak has quit IRC20:19
svgApsu: we cleaned all deploys in the stack, got left with about 5 networks and 2 routers - stack works but feels sluggish, asking ro a net list or router list, from cli or horizon, takes several seconds20:35
Apsusvg: Odd. Load averages on controllers?20:36
svgall < 0.4820:37
svghow can I check whick backend component doing a neutron net/router-list takes about 10s20:43
svgnu, lijkt me een goed plan om al die netwerken eens te  vergeten, en te testen op de rest20:44
*** sdake has joined #openstack-ansible20:44
svgals we daarmee een deelproblem weglaten, wordt een ander probleem miscchien meer evident20:45
svgoops20:45
svgsorry, wrond window :)20:45
Apsusvg: Well, --debug is a god first start.20:45
svg:)20:46
ApsuEr, good, lulz20:46
*** KLevenstein has quit IRC20:46
*** sdake_ has quit IRC20:48
*** KLevenstein has joined #openstack-ansible20:52
*** Mudpuppy has quit IRC20:54
openstackgerritKevin Carter proposed stackforge/os-ansible-deployment: Added apt update tasks to everything using apt  https://review.openstack.org/19152820:55
openstackgerritKevin Carter proposed stackforge/os-ansible-deployment: Add read/write_affinity settings for Swift  https://review.openstack.org/19102320:55
openstackgerritKevin Carter proposed stackforge/os-ansible-deployment: Allow protocol to be set per endpoint-type  https://review.openstack.org/19073620:56
openstackgerritKevin Carter proposed stackforge/os-ansible-deployment: Set default pass in aio scripts to be random  https://review.openstack.org/19026620:56
openstackgerritKevin Carter proposed stackforge/os-ansible-deployment: Configurable lxc cache and rootfs path  https://review.openstack.org/19004820:56
openstackgerritKevin Carter proposed stackforge/os-ansible-deployment: Ceph/RBD support  https://review.openstack.org/18195720:56
openstackgerritKevin Carter proposed stackforge/os-ansible-deployment: Updated MariaDB to the new release version  https://review.openstack.org/17825920:56
*** jwagner is now known as jwagner_away20:58
svgcloudnull: you made an update to the ceph review; how am I supposed to pull in that subpatch back into my tree?21:01
cloudnullYou should just be able to rebase the patch off of current master.21:01
cloudnull# git fetch --all21:02
cloudnull# git rebase -i origin/master21:02
svgthat won't pull in the small change you made21:02
*** Mudpuppy has joined #openstack-ansible21:03
svghttps://review.openstack.org/#/c/181957/19..21/playbooks/roles/lxc_container_create/tasks/container_create.yml,cm21:03
*** stevemar2 has joined #openstack-ansible21:03
*** stevemar has quit IRC21:04
svgcloudnull: ^^21:05
cloudnullYes?21:06
svgrebasing won't pull in the small change you made21:06
cloudnullIf you rebase your local branch with whats now in master it should fix it right up.21:07
svghow is that possible, as you added a change that is not yet in master21:08
svgok, sorry, that one is in master21:09
svgurgh21:09
svgtime to go to sleep, sorry21:09
cloudnullNo worries.21:09
*** Mudpuppy has quit IRC21:11
*** javeriak has joined #openstack-ansible21:13
openstackgerritKevin Carter proposed stackforge/os-ansible-deployment: changed container bind mounts to use abspath  https://review.openstack.org/18855821:18
*** yaya has joined #openstack-ansible21:20
*** meshok01 has quit IRC21:20
openstackgerritIan Cordasco proposed stackforge/os-ansible-deployment: Add support for deploying Keystone with Fernet  https://review.openstack.org/18999821:22
*** yaya has left #openstack-ansible21:34
openstackgerritIan Cordasco proposed stackforge/os-ansible-deployment: Add support for deploying Keystone with Fernet  https://review.openstack.org/18999821:38
*** Mudpuppy has joined #openstack-ansible21:39
*** Mudpuppy has quit IRC21:39
*** Mudpuppy has joined #openstack-ansible21:39
openstackgerritIan Cordasco proposed stackforge/os-ansible-deployment: Add support for deploying Keystone with Fernet  https://review.openstack.org/18999821:43
*** stevemar2 is now known as stevemar21:43
openstackgerritIan Cordasco proposed stackforge/os-ansible-deployment: Add support for deploying Keystone with Fernet  https://review.openstack.org/18999821:50
openstackgerritMerged stackforge/os-ansible-deployment: Split environment file into component parts  https://review.openstack.org/19022021:52
*** KLevenstein has quit IRC21:56
*** Mudpuppy has quit IRC22:02
openstackgerritIan Cordasco proposed stackforge/os-ansible-deployment: Add support for deploying Keystone with Fernet  https://review.openstack.org/18999822:05
sigmavirus24So in running ^ on an AIO, I'm seeing http://paste.openstack.org/show/IGhYKNSqqnmIiYONF0NO/ and I'm not quite sure why22:20
*** stevemar has quit IRC22:21
*** dkalleg has quit IRC22:37
*** dkalleg has joined #openstack-ansible22:39
sigmavirus24dolphm: http://paste.openstack.org/show/JQVaFpRp21BpskWxWwcR/22:40
openstackgerritMerged stackforge/os-ansible-deployment: Updates the container build process  https://review.openstack.org/19151722:40
sigmavirus24dolphm: so that HMAC_CTX error is coming from a 400 in Keystone it seems: http://paste.openstack.org/show/294535/22:42
sigmavirus24Doesn't seem there's much detail coming back from the cinder client though22:42
sigmavirus24going to start going through keystone logs22:43
*** sura8257 has joined #openstack-ansible22:45
sigmavirus24dolphm: http://paste.openstack.org/show/294537/ is out of the apache logs22:45
dolphmsigmavirus24: looking..22:45
dolphmsigmavirus24: oh that's fun22:46
sigmavirus24Yeahhh, right?22:46
dolphmsigmavirus24: wonder if something is butchering the fernet token?22:46
sigmavirus24Hm22:46
* sigmavirus24 wonders if rsync is butchering the token22:46
sigmavirus24nope22:48
sigmavirus24both containers have the exact same content22:48
sigmavirus24for both keys22:48
sigmavirus24oh that's another thing22:48
dolphmsigmavirus24: https://github.com/pyca/cryptography/issues/177622:48
sigmavirus24max_keys is set to 3 but it only generates two22:48
dolphmsigmavirus24: so it's under the configured maximum? working as intended!22:49
* sigmavirus24 wasn't sure if maximum was meant to be inclusive or not22:49
dolphmsigmavirus24: no matter how many times you do keystone manage fernet-rotate now, it'll keep the number of keys under the maximum22:49
sigmavirus24cool22:49
dolphmsigmavirus24: your first rotate will give you 3 keys22:50
dolphmand it'll stay at that number22:50
sigmavirus24dolphm: so the version of cryptography deployed is 0.9.122:50
sigmavirus24which according to github is in 0.9.122:51
sigmavirus24so another issue it seems?22:51
dolphmsigmavirus24: based on the conversation in that bug, i wouldn't be surprised if it was the same issue somewhere else22:52
sigmavirus24so if you look at https://github.com/pyca/cryptography/commit/fbd7d7f2adb5dfb66175e5a2f77e4e0c4a640107 the problem is with how the library is loaded and I'm not sure how that could have regressed22:53
sigmavirus24thanks dolphm ;)22:54
sigmavirus24I was going to ping them when I had a better idea22:54
*** JRobinson__ has joined #openstack-ansible22:54
*** dkalleg has quit IRC22:54
dolphmsigmavirus24: turn the number of apache threads down to 1?22:54
sigmavirus24I haven't yet22:55
dolphmsigmavirus24: when we benchmarked keystone w/ apache, we didn't get much benefit out of threading at all in either mpm_event or mpm_worker22:55
dolphmwe also weren't memory constrained at all, so more processes was a simpler path forward22:56
* dolphm afk23:00
*** dkalleg has joined #openstack-ansible23:22
openstackgerritMiguel Grinberg proposed stackforge/os-ansible-deployment: Use default service_region var for all roles  https://review.openstack.org/18966423:38
openstackgerritMiguel Grinberg proposed stackforge/os-ansible-deployment: Support an externally hosted keystone  https://review.openstack.org/19201523:38
*** daneyon_ has quit IRC23:43
*** javeriak has quit IRC23:58

Generated by irclog2html.py 2.14.0 by Marius Gedminas - find it at mg.pov.lt!