Palantir - Stanford University

Download Report

Transcript Palantir - Stanford University

Palantir
http://www.csuglab.cornell.edu/Info/People/livshits/Palantir.html
A window-sharing system for Windows NT
Max Feingold, Vladimir Livshits, and Yevgeniy Rozenfeld
General Description


Palantir is a window sharing system. It allows one to view windows opened on a
different machine on the network.
We implemented the system as a client/server application, in which both the client and
the server are implemented in the same Windows executable. Upon startup, the
program places itself into the system tray and provides a convenient MFC interface for
opening client connections, sharing server windows, changing communication and
program settings, etc.
Palantir
Client-Server Organization





When you run Palantir, it is automatically configured to run as both a client and a
server.
All program functionality is accessible from an icon that sits in your Windows system
tray.
When you use Palantir as a client, you can connect to a server by providing its ipaddress. The program will query and display the list of available widows on that server
for you.
You can select certain application windows running on your computer to be shared out
There is server authentication -- you need to supply a valid user name and password for
when you are trying to connect.
Palantir
Technology



We are using win32 API bitmap functions to grab client area of application windows.
Bitmaps are created on the server. Since it may take a considerable amount of memory
and CPU time to grab a window bitmap, server is put to sleep between subsequent
updates. The update frequency (refresh late on the picture below) can be configured
along with many other parameters.
Bitmaps sent over the network to the the client(s) through Windows sockets.
Palantir
Bitmap Processing


Clearly, it can take a lot of network bandwidth to transfer big bitmaps to multiple
clients. The screenshot saved as a bitmap can take as much as 1.5Mb with 1024x768
screen resolution. To minimize the network load we use the following techniques
Image sampling
•
•
•
•
•
The basic idea is that we don’t need to send the whole bitmaps -- it is sufficient to only send
the differences.
The server maintains the previous bitmap it sent to the client in a cache and determines the
smallest rectangle containing the difference difference between the current bitmap and the
previous one.
To find this rectangle, we pass over the image twice finding the leftmost and rightmost
column and topmost and bottommost row containing changes.
One of the drawbacks of this approach is that in the worst case (i.e., when the two bitmaps
we are comparing are absolutely identical) we need to pass over the image twice, which can
be quite CPU-intensive for large images.
To alleviate this problem, we can set up the server to look only on each n-th point.
Effectively, we set up a grid of points we will look at. This can considerably reduce the CPU
load, but this can also affect precision with which bitmaps are updated.
Palantir
•
•

Another technique we use to reduce network utilization is run length compression
•
•
•


We discovered that approach with a grip can significantly reduce CPU utilization at the same
time yielding reasonably precise results with many applications.
However, for applications that require high precision (for instance, if you are typing in
notepad and only every other letter you type gets updated on the client) we may end up
with a pretty distorted image, so we send full window updates every so often (the frequency
of these updates can be configured).
It turns out that typical images we need to process have lots of horizontal and vertical lines
of the same color. Clearly, this is an opportunity for run length compression.
It practice, run length compression performs quite well. The compression ratio depends on
the type of data being transferring: for example, a 2.8MB bitmap of an Explorer window was
compressed to only 800KB of data (72% compression), while much smaller gains were
achieved with colorful images such as digitized paintings.
To reduce the CPU overhead of this compression technique, it was build directly into the
socket class. All data that is sent through the socket is compressed on the fly.
Generally, you would want to use some combination of these two compression
techniques to achieve the best CPU/network utilization tradeoffs for your situation.
The program allows you to set various compression parameters on a window-perwindow basis.
Palantir
Possible Applications








Sharing of browser windows, images, and documents over the network.
Monitoring student activities.
Lab administrators monitoring desktop windows on many computers from a single
workstation.
Corporations monitoring their employees’ desktop activities.
Professors demonstrating the use of a particular program to students across the
network.
Communication with shared images between graphics designers.
Graphics-based talk applications -- two notepad windows open side-by-side.
Gaining access to resources available on one machine, such as a camera installed on a
remote computer. In one of our experiments, we ran a Palantir server on a machine
equipped with a camera and viewed the output on a computer in a different lab.
Palantir