theoretical 'high' perfornance x server using ipc - Android Q&A, Help & Troubleshooting

Hi, I've been looking at running GNU Linux apps on a rooted android. device with modern hardware and I've yet to find a 'nice' way to run x apps with acceptable GUI performance. Currently I've tried the java implemention of x on android which is barely useable and various vnc - rpc intergrations running x11 using a virtual frame buffer which is much better but laggy.
My idea to solve this problem is to completely do away with the vnc etc.. proxying. that 8s hack the virtual frame buffer version of xorg so that the main pixel map surface is in ipc shared memory and use ipc to render this through the android api.
So is it possible to statically link the needed android libraries to allow abdroids ipc to work between a hacked xorg vfb and abdroids shared memory ipc to a native android app. Thus making high performance rendering with near zero memory coppies possible.
Secondly, and this would be a bonus, could I even get rid of ipc and a native android app by getting xorg on my root GNU Linux install to work directly with android graphics and UI apis. This would be ammazing.
Hopefully ipc is at a kernel level so it may be possible to just port the needed parts of android to GNU Linux to do this if the statically linking method is known not to work.
Any ideas and suggestions, what do you think of this idea for intergraring GNU Linux x apps and android.

I really like this idea and I've been looking for something like this. You said you used the "X server" android app? I'm kind of curious on the performance. Was it laggy or just that it wasn't fully what you expected?

jthree2001 said:
I really like this idea and I've been looking for something like this. You said you used the "X server" android app? I'm kind of curious on the performance. Was it laggy or just that it wasn't fully what you expected?
Click to expand...
Click to collapse
Currently I'm running xrdp and tightvncserver in a gnu/linux environment (using inode linking not chroot) and xfe as the windows manager.
I connect to this from android using a rdp client.
The main issues appear to be very slow performance on graphics updates, visably slow, which I put down to the overheards of running everything through vnc/rdp - over sockets - mem coppies, compression (which I should turn off to see if it helps) encryption and all that stuff that goes along with rdp and vnc that's not needed if you use something like shared memory and blit to that.
Performanc of the apps in xfe &co, for instance libraoffice or eclipse etc.... seems to be pretty good, so that's not the issue, just the graphics.
Running a Asus transformer infinity T700

my current messing arpund has been trying to get the Android NDK to compile and run on ARM, which in theory should be no problem so long as it doesn't rely on x86 machine code to do the job (which I doubt).
idky google locked down the architecture in the builds and didn't just leae it as any old gnu/linux or whatever and let the person making the build tweek any bugs, instead of having to hack googles custom build system for building the toold chain to for a specific architecture.

floowing some rough profiling
jthree2001 said:
I really like this idea and I've been looking for something like this. You said you used the "X server" android app? I'm kind of curious on the performance. Was it laggy or just that it wasn't fully what you expected?
Click to expand...
Click to collapse
Ok, I did some crude profiling using the setup
tightvncserver
xrdp
and xrdp client on android.
the major bottle neck was the rdp client on android which made my testing cpu limited since it was maxing out cpu usage. I beleive this may be due to a bug in Android on my tablet relating to non opengl es graphics..
anyhow I got some more usefull data
xrdp was typically sitting at around 40% cpu and all it's doing is taking data from tightvnc and shunting it over rdp to the client.
next on the list was the vncserver using typically less than 30% cpu.
I think this shows there is clearly a lot of overhead (based on the 40% cpu xrdp was using) of using a remote desktop protocol over sockets that should be easy to mitigate by using shared memory.
I also tried a different setup
tightvncserver
and a vnc client on android
taking rdp out of the loop
again the android client made the tests cpu limited but perforance was much better.
This VNC client is open source, so my next step is to create an opensource project and modify the VNC client so that the user input is up to scratch and look at using opengl for graphics (assuming that's where the bottle neck is) so that it's not longer cpu limited.
Once that is done (which should also failarize me with the VNC protocol and the client code).. I can look at replacing the graphics part of VNC with a shared memory buffer, but keeping the user IO over the existing VNC protocol as that makes sense...unless that also becomes a major issue.
That also leaves me some way of sending additional data back and forth without having to do it 'all' via shared memory which would be much more of a mission
in theory there shouldn't be any need for any kind of complicated mutexing between the android client and the x server sine the x server will be all but write only and the android client always read only.

on a side note,
running java linpack on android I get about 50mflops per cpu
with disk io I get about 1gig per second cached reads.
so some crude math would give me 250mega words
my screen is 1920 by 1080 (well actually 1200), but we'll call that 2k by 1k, or 2 mega words.
so a theoretical performance into the high tens of fps seems quite achievable, which is much bettern that the 5 or so tops that I'm getting atm by an order of magnitute.

having a quick poke around, mostly related to my xorg wows (that is it complaints about no tty device when starting up. it seems that it's not too difficult to get xorg running using a frame buffer driver after a few android services have been stopped. So i'm not sure if this is still needed or not.. IPC betwen gnu and android is still an interesting project.
So anyhow, I'm going to try and get xorg running properly, there are even tegra 3 drivers for xorg too, so in theory the performance should be substantially better than anything an ipc hack would be able to achieve.

Related

WebTop architecture questions

Hi, I'm trying to understand the WebTop architecture. How does it interact with android OS, or does it interact with hardware directly like a real linux OS? Attached is an android architecture diagram. Is there something like this for WebTop?
There are several WebTop hacks. At least one of them was described as "running Linux, on top of Linux, on top of Android, a.k.a Linux". Which hack is the one runs closest to hardware, thus has the best performance? Dual core cpu is good, but it's still a ARM. I'd really want to avoid running things in virtual machines in this kind of CPU.
Thanks for any clarifications.
That is something I've been wondering too! If someone could enlighten us it would be great
Sent from my MB860 using Tapatalk
qaplus said:
Hi, I'm trying to understand the WebTop architecture. How does it interact with android OS, or does it interact with hardware directly like a real linux OS? Attached is an android architecture diagram. Is there something like this for WebTop?
There are several WebTop hacks. At least one of them was described as "running Linux, on top of Linux, on top of Android, a.k.a Linux". Which hack is the one runs closest to hardware, thus has the best performance? Dual core cpu is good, but it's still a ARM. I'd really want to avoid running things in virtual machines in this kind of CPU.
Thanks for any clarifications.
Click to expand...
Click to collapse
The "WebTop" is just a standard Linux X-server, and apps run on it the same way they do on a Linux desktop. On your attached diagram, the X-Server would be at the same level as the Android RT and the Dalvik VM, as would each application running in the webtop. I think that the only webtop thing that would interace with Android would be the dock manager, which starts up the X-server, and the panel that shows the android notifications.
If you bring up lxterminal in the webtop,. sudo to root, then run 'pstree' you can see how the apps running in the webtop are running as close to the kernel as you can possibly get.
Thanks cmcnabb.
So if I run FireFox in WebTop, it's really running on the same instance of linux kernel which is running android, and display is rendered by WebTop the x server? I'm glad to know where's no additional VM involved.
FireFox does't seems to be very responsive in default WebTop. Some WebTop hacks clarim it's much faster there. Is it because the hacks have more efficient x servers?

[Q] Is it possible to use virtualization on the Atrix

I've been working these days on virtual servers and in that state of "virtualization user" mindset an idea hit me: Could it be possible to use virtualization techniques to account for lack of proper ICS drivers in Atrix.? For example: Emulating 3.x kernel supported hardware (Nexus?) on top of a 2.6.x kernel with the released drivers?
I found this video of EmbeddedXen running on an HTC phone: http://www.youtube.com/watch?v=ErLZQE5ZI7U&feature=player_embedded but I think we wouldn't need simultaneous running of two OSs (well, on second thought, this could be a terrific WebTop).
Saludos, Marco.
Sounds like you're after a concept similar to ndiswrapper on Linux.
I think that would likely introduce more complexity and instability than it's worth.
Hm, that's an interesting idea. I've been having similar thoughts about virtualizing the virtual machine on android and being able to save ram by not replicating the virtual machine state for each app you open up. For example open g l e s 2 libraries get loaded at around 5 or 8 megabytes each for each app that uses 3d rendering on android.

[Q] Tablet ubuntu able to run edubuntu (kde etc)?

Hi all
Does anyone know if I can run kde-based software on the developer alpha of Ubuntu for tablets yet please? Not expecting reliability, just want to do some child user testing of the edubuntu suite on tablets.
Thanks
Chris
Currently you can't and probably neither in the near futur 'cause you need an X Server for that.
And there is no X server on ubuntu touch.
Huge thanks, that is really useful
Hempe said:
Currently you can't and probably neither in the near futur 'cause you need an X Server for that.
And there is no X server on ubuntu touch.
Click to expand...
Click to collapse
After some research on your reply I've a couple questions. Does it mean the Unity interface doesn't need X-server? Or are they just using a temporary workaround until X-server is implemented?
And does this apply to both Ubuntu for Android, and Ubuntu for tablets?
Huge thanks
Having done some further research I've made my decision - thanks hugely for providing the missing link in my knowledge. What follows is my best interpretation of the rumours.
Currently in place of X-server is SurfaceFlinger, ("because X-server uses 30 yr old code" - Canonical). Canonical publicly dabbled with using Wayland until mid-Feb, then decided to create their own revamped display server from scratch, called Mir, which they seem to have been working on since mid last year, and are trying to get GPU vendors to support, written to run across all devices and to meet the needs of the Unity interface, and written in Qt/QML which is what they want native apps written in.
Bottom line for me, is that the technology is still right up there in the clouds and nowhere near decided enough to base my business strategy on. Also, Ubuntu for tablets seems a pretty thin version of Ubuntu anyway, so Edubuntu was never an option and I'm unlikely to be able to leverage much from Ubuntu's Open Source libraries anyway.
Like others, (see the comment on jonobacon.org below), I find it frustrating that the wealth of code written for Ubuntu is no longer usable, but I reckon this is probably necessary to squeeze the most out of every single CPU cycle and milliamp. Ubuntu for tablet is dead in the water if it kills the battery and performs worse than the established competitors.
Therefore all indications are I need to write for Android, keeping my options as open as possible to migrate. So it is now Titanium/UnityIDE versus HTML5, particularly assessing relative performance.
http://www.omgubuntu.co.uk/2013/03/canonical-announce-custom-display-server-mir-not-wayland-not-x
http://www.jonobacon.org/2013/02/21/five-ubuntu-touch-facts/ -- not the article but the comment starting "In that case, wouldn't it be better to port existing apps instead of...."
http://www.omgubuntu.co.uk/2013/02/canonical-working-on-new-display-server
http://www.phoronix.com/scan.php?page=news_item&px=MTMwOTM
Just to clarify.
1. There are plans to make a X-Mir compatibility layer that will allow you to run programs that require an X-Server to work with mir.
2. Not all is lost at the moment it just looks that way.
Only Graphical Userinterfaces are affected. Your commandline tools and libraries don't need to be changed.
3. If you are looking for platform to write apps for, well there is worke being done to let you run your QML apps (intended for ubuntu touch) on android.
So if you choose to make QML apps they can be or will be able to run on linux, mac, windows and android
Wow, huge thanks, I missed that.
Does this mean EVERYTHING Ubuntu without a GUI will work? I want to run a NodeJS server. How likely is it that it will work perfectly now? How likely is it that it will work perfectly in the (nominally October 2013) release? (Sorry, just give me a keyword and I'll go off and do my research.)
Is Canonical planning to get X-Mir into the next ~Oct release?
My other query was whether QML on Android would perform as well. For others interested, it looks like it works directly with the Android SurfaceFlinger, bypassing the Dalvik VM, so performance should compare with native Java code.
Huge thanks once again
Chris
Sources:
http://www.youtube.com/watch?v=TEkubKZaUt8
http://victorpalau.net/2013/01/25/ubuntu-qml-todo-android-vs-ubuntu/

Android app framework suggestion.

Hello all!
Would it be possible to develop a framework of some sorts to install android apps natively instead of using Darwin or JVM on Ubuntu Touch?
The way I see it (might be a little too simple) is to convert the bytecode to native code and write wrapper functions for Android function calls or something like that. Is it possible?
Android doesn't use Darwin or the JVM (In the strictest sense), it uses either the Dalvik VM (which is based off Java, but is not Java, nor is it a JVM in the strictest sense [as in, executes applications made for the Java JVM]) or the Android Runtime (ART).
To my knowledge there is no Android analog to WINE (what you're proposing). There are applications such as Genymotion and Shashlik but those either aren't targeting ARM or aren't ready for ARM yet.
It's quite possible, if you ported the Android Runtime or Dalvik VM over to a WINE-esque application, but no, to my knowledge there are no projects doing this.
As Android is coming to Chromebooks it may be possible to just replicate the same container on Ubuntu Touch - it may require some work to make Mir work with whatever interface Chromebook's android port talks to (Freon?) but Google will do most of the effort here
grandrew said:
As Android is coming to Chromebooks it may be possible to just replicate the same container on Ubuntu Touch - it may require some work to make Mir work with whatever interface Chromebook's android port talks to (Freon?) but Google will do most of the effort here
Click to expand...
Click to collapse
Android itself is NOT coming to Chromebooks, this is simply Google's Android Runtime for Chrome being released into mainstream usage (see the Archon project for more information about this runtime.), This is still an emulated Android device (albeit more optimized so it runs faster, likely using x86 binaries) that runs under Chrome's NACL platform, it is NOT Android on Chromebooks as many news sources would like to suggest.
At the moment, Chromium does not run very well inside XMir (which is why I didn't give it any real thought there), but yes, this and the Android Runtime for Chrome should fill this gap perfectly. In the future though, it may be possible to use the LXC container with some work done to surface_flinger and the Android frameworks (to support Mir's windowing system ofc) to run the applications inside the Android container.
Like I said though, Google's Chromium runtime would work. But we currently have no hardware acceleration inside of legacy X11 applications, limited filesystem access inside said legacy container (only the XDG standard folders: Downloads, Documents, Music, Pictures are mounted into the legacy container), We also don't really have good, working OpenGL available to X11 applications since GPU access is done through libhybris which X11 knows nothing about.
It's possible to get around this similar to how Canonical has done it on the PC's development version of Unity8 and get Hardware Acceleration (truthfully, I haven't tested to see if it works with the android mirplatform packages though) by turning on DRI/DRM, I did this in my tweaked kernel, but it doesn't seem to provide any performance improvements with the freedreno X11 driver installed (I saw no indication that XMir initialized the freedreno driver at all, only Mesa's Software Rasterizing Interface driver.)

Very lightweight Android emulator

Sorry if this isn't the best section to be asking in, it's a big forum out there with so many boards.
I'm trying to run many instances of a certain Android app concurrently. I need either Google Play services to be available for a one-time sign in on each instance, or preferably a way to import app data to remove the need for Google Play or any other components of the Android environment besides the basic runtime needed to run the app.
I'm currently using an Android emulator (Nox) running on 640x360 at 20 fps, which is able to get me about 14 instances running on my local Windows. machine before things start crashing. The limiting factors seem to be the frequency of snapshots taken by the VMs and running low on RAM, which in turn increases CPU usage for defragmentation and page file management.
Is there any more efficient way to accomplish this task? Perhaps an x86 Android runtime with settings to reduce graphics quality? I've also looked at the Genymotion AMI on AWS but all of Amazon's VM options seem too powerful (and costly) to run my app on so many machines.
Thanks!

Categories

Resources