# HG changeset patch # User Shinji KONO # Date 1275391341 -32400 # Node ID 8fd7e6fb855fa08a99b8cb2669120c14c39e7a2e # Parent 2e6bb87054bf1d0ba471c0b14e70f2728ba0c79c spell check pdf generated. diff -r 2e6bb87054bf -r 8fd7e6fb855f db.ind --- a/db.ind Tue Jun 01 19:48:29 2010 +0900 +++ b/db.ind Tue Jun 01 20:22:21 2010 +0900 @@ -5,14 +5,14 @@ -abstract: To implement scalable services, not only higher software design, -low level implementation is also important to achive performance +low level implementation is also important to achieve performance and reliability. A combination of fine grain task manager and continuation based language is good to make Scalable Services on Many core architecture. Code segment is a small part of execution code written in a lower language of C. -Data segements are fragments of memory and these are passed -amoung code segments and CPU cores. We discuss the pro and cons +Data segments are fragments of memory and these are passed +among code segments and CPU cores. We discuss the pro and cons of our method. --Tools for implementing Distributed Application @@ -26,25 +26,25 @@ Not necessary mentioned SEDA \cite{SEDA2001}, scalable services requires highly distributed servers and highly multi-threaded program on a server among them. This type of implementation works -fine in theory, but it heavily depends on low level implementation, such +fine in theory, but it heavyly depends on low level implementation, such as threads, synchronized queues and CAS operations. We have successfully implemented WWW services using Classical tools such as C++, Java, or even C. Script Languages such as Perl, PHP or Python are used in front end, but in case of heavy duty database side, careful implementation -is necessary to achive good performance. +is necessary to achieve good performance. Now some of the services have more than 10 millions users, load balancing among several WWW front-end and many -memcached\cite{memcahed04} servers to replicate Database accesses using +memcached\cite{memcached04} servers to replicate Database accesses using classical database such as Oracle, mySQL or Postgress, which performs so badly, Internet companies have to create Key Value Store system by themselves, such as BigTable \cite{Chang06bigtable:a} or Cassandra\cite{cassandra09}. This situation is sometimes discussed in a context -of ACID vs BASE database scheme \citeP{Brewer:2000:TRD:343477.343502}. +of ACID vs BASE database scheme \cite{Brewer:2000:TRD:343477.343502}. Based on our works on Internet programming and Sony PS3 programming, that is Cell architecture\cite{Cell}, now, @@ -58,7 +58,7 @@ now, so we have to reconsider the situation (Fig. \ref{Data and Code in Internet Service}). -
Data and Code in Internet Service
+
Data and Code in Internet Service
We are working on a combination of Continuation based C\cite{kono08f,cbc-sourceforge} and @@ -71,7 +71,7 @@ our own memory manager. We can use 6 SPE with 2Tbit/s ring bus in PS3 Linux (Fig. \ref{Cell Architecture}). -
Cell Architecture
+
Cell Architecture
In this paper, first we analyze problems in scalable system. Then we introduce new concepts: Code Segment and Data Segment. Code @@ -88,7 +88,7 @@ Instead of using direct pointer access, data segments are copied among modules and CPU cores, which are carefully adopted to the cache or interconnect communication such as DMA. -All the data segments are hashed in 2^n size memory pool similar to the +All the data segments are hashed in $2^n$ size memory pool similar to the Unix malloc mechanism. This pool is in 64bit address space and it makes data segment communication far simpler. @@ -157,7 +157,7 @@ processing in modules can be executed in a pipelined way. In order to implement the pipeline, we assign threads from thread pools to each module layer . -Each thread is interconnected by a sychronized queue, which has +Each thread is interconnected by a synchronized queue, which has certain overheads, but if it is carefully implemented, parallel processing hides its costs. @@ -173,8 +173,8 @@ stages. In case of C++, we have to managing all the queue manually because it lacks garbage collection. It is not so easy and requires complex memory pools ( or conservative GC ), which is a bug prone -(Fig.\ref{Layer by Trhead}). -
Layer by Trhead
+(Fig.\ref{Layer by Thread}). +
Layer by Thread
---Thread Implementation @@ -213,7 +213,7 @@ cost. In case of Java, to avoid GC penalty, link node is not reused and it simply delete old one and create new one. If the new operation is shared among threads (unlikely), it requires another CAS, otherwise -it requires separate memory pool for each therad, which consumes a lot +it requires separate memory pool for each thread, which consumes a lot of memory. ---Scheduling @@ -226,7 +226,7 @@ execution time of tasks. Sometimes it is better to reduce concurrency and skip these -synchronization costs. In this case, synchronization of theads +synchronization costs. In this case, synchronization of threads becomes just a cost. ---Garbage Collection @@ -286,11 +286,12 @@ CbC Syntax is very simple. - struct interface1 { DataSegment *i; }; - struct interface2 { DataSegment *o; }; + struct interface1 { DataSegment *i;}; + struct interface2 { DataSegment *o;}; - __code f(struct interface1 *a) { - struct interface2 *b; b->o=a->i; + __code f(struct interface1 *a, + struct interface2 *b) { + b->o=a->i; goto g(b); } @@ -315,21 +316,23 @@ We also supports full continuation of normal C function using GCC nested function and statement expression. It is implemented some like this in GCC compiler in a pseudo code with GCC extensions. - void (*__return)(int retval_, void *_envp); - __return = ({ - nee_label__ _cbc_exit0; - void __return_func(int retval_, void *_envp){ + void (*__return)(int retval_, void *_envp); + __return = ({ + nee_label__ _cbc_exit0; + void __return_func(int retval_, + void *_envp){ retval = retval_; - goto exit0; - } - if (0) { - _cbc_exit0: - return retval; - } - __return_func; + goto exit0; + } + if (0) { + _cbc_exit0: + return retval; + } + __return_func; // return value }); - void *__environment = __builtin_frame_pointer(); + void *__environment = + __builtin_frame_pointer(); We have a environment pointer which is usually the frame pointer, but it is not used here, because this is a closure with a hidden environment. @@ -340,13 +343,14 @@ Anyway this can be used like this. - int main() { - goto f(1, __environment, __return ); - .... - } - __code f(int, void *env, __code (*continuation)(int retval_,void *fp)) { - goto (continuation)(-1, env); - } + int main() { + goto f(1, __environment, __return ); + .... + } + __code f(int, void *env, + __code (*continuation)(int retval_,void *fp)) { + goto (continuation)(-1, env); + } In this example, \verb+main+ will return -1. When you want to return to the middle of the normal function or code segment, put an extra function @@ -355,7 +359,7 @@ --Data Segment -We have Open CL like task manager with data segement. +We have Open CL like task manager with data segment. Data segment is a set of doubly linked fix size block which also hashed by the 64bit address. It has $2^n$ size, so it is allocated @@ -374,9 +378,9 @@
Pipeline buffered data segment
-Each Core have to have two input segements and two output segments -to make pipeline correctly. With two extra segements are necessary -for task array itselves, so we have 6 segments total. +Each Core have to have two input segments and two output segments +to make pipeline correctly. With two extra segments are necessary +for task array it-selves, so we have 6 segments total. ---Data Segment operations @@ -393,7 +397,8 @@ API can be called from a Task like this, - TilePtr tile = smanager->get_segment(tex_addr,g->tileList); + Datasegment tile = + smanager->get_segment(addr); but usually it not visible from the task, because its reading operations were done before its execution and its writing @@ -415,11 +420,12 @@ execution. In following example, \verb+t_exec+ is created, and it has one input -data segement and one output data segment. It can be executed in +data segment and one output data segment. It can be executed in any SPU (PS3's CPU core), and \verb+t_print+ task have to wait for its completion. Finally it is spawned. - HTask *t_exec = manager->create_task(TASK_EXEC); + HTask *t_exec = + manager->create_task(TASK_EXEC); t_exec->add_input_datasegment(i_data); t_exec->add_output_datasegment(o_data); t_exec->set_cpu(SPE_ANY); @@ -452,14 +458,16 @@ we know where to execute it. It can be passed to the current task. - _code task_a(next_task, interface input, interface output) { + _code task_a(next_task, interface input, + interface output) { .... Task processing - goto next_task->code(next_task, next_task->input, next_task->output); + goto next_task->code(next_task, + next_task->input, next_task->output); } If we have not task to execute more, we can put mail waiting task in -the next_task. -In this way, next_task call address is determined well before the call. +the \verb+next_task+. +In this way, \verb+next_task+ call address is determined well before the call. ---Data segment deallocation timing @@ -539,8 +547,10 @@ tasks on requests. We can simply writes this using iterator. In case of word count in a file, - foreach data segment d in ( file ), out in (partial_result) { - task_work_count(d,out); + foreach data segment d + in ( file ), + out in (partial_result) { + task_work_count(d,out); } task_sum_up(partial_result); diff -r 2e6bb87054bf -r 8fd7e6fb855f ieee-kono.tex --- a/ieee-kono.tex Tue Jun 01 19:48:29 2010 +0900 +++ b/ieee-kono.tex Tue Jun 01 20:22:21 2010 +0900 @@ -1,4 +1,3 @@ - %% bare_conf.tex %% V1.3 %% 2007/01/11 @@ -127,13 +126,14 @@ % *** GRAPHICS RELATED PACKAGES *** % \ifCLASSINFOpdf - % \usepackage[pdftex]{graphicx} + \usepackage[dvipdfmx]{graphicx} % declare the path(s) where your graphic files are % \graphicspath{{../pdf/}{../jpeg/}} % and their extensions so you won't have to specify these with % every instance of \includegraphics % \DeclareGraphicsExtensions{.pdf,.jpeg,.png} \else + \usepackage[dvipdfmx]{graphicx} % or other class option (dvipsone, dvipdf, if not using dvips). graphicx % will default to the driver specified in the system graphics.cfg if no % driver is specified. @@ -352,24 +352,24 @@ % % paper title % can use linebreaks \\ within to get better formatting as desired -\title{Bare Demo of IEEEtran.cls for IEEECS Conferences} +\title{Programming Scalable Service in Code segment and Data segment} % author names and affiliations % use a multiple column layout for up to two different % affiliations -\author{\IEEEauthorblockN{Authors Name/s per 1st Affiliation (Author)} -\IEEEauthorblockA{line 1 (of Affiliation): dept. name of organization\\ -line 2: name of organization, acronyms acceptable\\ -line 3: City, Country\\ -line 4: Email: name@xyz.com} +\author{\IEEEauthorblockN{Shoji TAMAKI } +\IEEEauthorblockA{Information Engineering\\ +University of the Ryukyus\\ +Nishihara-cyo 1, Okinawa, 903-01, Japan\\ +Email: shoshi@cr.ie.u-ryukyu.ac.jp} \and -\IEEEauthorblockN{Authors Name/s per 2nd Affiliation (Author)} -\IEEEauthorblockA{line 1 (of Affiliation): dept. name of organization\\ -line 2: name of organization, acronyms acceptable\\ -line 3: City, Country\\ -line 4: Email: name@xyz.com} +\IEEEauthorblockN{Shinji KONO} +\IEEEauthorblockA{Information Engineering\\ +University of the Ryukyus\\ +Nishihara-cyo 1, Okinawa, 903-01, Japan\\ +Email: kono@ie.u-ryukyu.ac.jp} } % conference papers do not typically use \thanks and this command @@ -408,13 +408,11 @@ \begin{abstract} -The abstract goes here. DO NOT USE SPECIAL CHARACTERS, SYMBOLS, OR MATH IN YOUR TITLE OR ABSTRACT. - +\input abstract.tex \end{abstract} \begin{IEEEkeywords} -component; formatting; style; styling; - +scalable; continuation; parallel processing; \end{IEEEkeywords} @@ -428,126 +426,7 @@ % creates the second title. It will be ignored for other modes. \IEEEpeerreviewmaketitle - - -\section{Introduction} -% no \IEEEPARstart -This demo file is intended to serve as a ``starter file'' -for IEEE conference papers produced under \LaTeX\ using -IEEEtran.cls version 1.7 and later. - -All manuscripts must be in English. These guidelines include complete descriptions of the fonts, spacing, and related information for producing your proceedings manuscripts. Please follow them and if you have any questions, direct them to the production editor in charge of your proceedings at Conference Publishing Services (CPS): Phone +1 (714) 821-8380 or Fax +1 (714) 761-1784. -% You must have at least 2 lines in the paragraph with the drop letter -% (should never be an issue) - -\subsection{Subsection Heading Here} -Subsection text here. - - -\subsubsection{Subsubsection Heading Here} -Subsubsection text here. - -\section{Type style and Fonts} -Wherever Times is specified, Times Roman or Times New Roman may be used. If neither is available on your system, please use the font closest in appearance to Times. Avoid using bit-mapped fonts if possible. True-Type 1 or Open Type fonts are preferred. Please embed symbol fonts, as well, for math, etc. - - -% An example of a floating figure using the graphicx package. -% Note that \label must occur AFTER (or within) \caption. -% For figures, \caption should occur after the \includegraphics. -% Note that IEEEtran v1.7 and later has special internal code that -% is designed to preserve the operation of \label within \caption -% even when the captionsoff option is in effect. However, because -% of issues like this, it may be the safest practice to put all your -% \label just after \caption rather than within \caption{}. -% -% Reminder: the "draftcls" or "draftclsnofoot", not "draft", class -% option should be used if it is desired that the figures are to be -% displayed while in draft mode. -% -%\begin{figure}[!t] -%\centering -%\includegraphics[width=2.5in]{myfigure} -% where an .eps filename suffix will be assumed under latex, -% and a .pdf suffix will be assumed for pdflatex; or what has been declared -% via \DeclareGraphicsExtensions. -%\caption{Simulation Results} -%\label{fig_sim} -%\end{figure} - -% Note that IEEE typically puts floats only at the top, even when this -% results in a large percentage of a column being occupied by floats. - - -% An example of a double column floating figure using two subfigures. -% (The subfig.sty package must be loaded for this to work.) -% The subfigure \label commands are set within each subfloat command, the -% \label for the overall figure must come after \caption. -% \hfil must be used as a separator to get equal spacing. -% The subfigure.sty package works much the same way, except \subfigure is -% used instead of \subfloat. -% -%\begin{figure*}[!t] -%\centerline{\subfloat[Case I]\includegraphics[width=2.5in]{subfigcase1}% -%\label{fig_first_case}} -%\hfil -%\subfloat[Case II]{\includegraphics[width=2.5in]{subfigcase2}% -%\label{fig_second_case}}} -%\caption{Simulation results} -%\label{fig_sim} -%\end{figure*} -% -% Note that often IEEE papers with subfigures do not employ subfigure -% captions (using the optional argument to \subfloat), but instead will -% reference/describe all of them (a), (b), etc., within the main caption. - - -% An example of a floating table. Note that, for IEEE style tables, the -% \caption command should come BEFORE the table. Table text will default to -% \footnotesize as IEEE normally uses this smaller font for tables. -% The \label must come after \caption as always. -% -%\begin{table}[!t] -%% increase table row spacing, adjust to taste -%\renewcommand{\arraystretch}{1.3} -% if using array.sty, it might be a good idea to tweak the value of -% \extrarowheight as needed to properly center the text within the cells -%\caption{An Example of a Table} -%\label{table_example} -%\centering -%% Some packages, such as MDW tools, offer better commands for making tables -%% than the plain LaTeX2e tabular which is used here. -%\begin{tabular}{|c||c|} -%\hline -%One & Two\\ -%\hline -%Three & Four\\ -%\hline -%\end{tabular} -%\end{table} - - -% Note that IEEE does not put floats in the very first column - or typically -% anywhere on the first page for that matter. Also, in-text middle ("here") -% positioning is not used. Most IEEE journals/conferences use top floats -% exclusively. Note that, LaTeX2e, unlike IEEE journals/conferences, places -% footnotes above bottom floats. This can be corrected via the \fnbelowfloat -% command of the stfloats package. - - - -\section{Conclusion} -The conclusion goes here. this is more of the conclusion - -% conference papers do not normally have an appendix - - -% use section* for acknowledgement -\section*{Acknowledgment} - - -The authors would like to thank... -more thanks here - +\input{0} % trigger a \newpage just before the given reference % number - used to balance the columns on the last page @@ -564,20 +443,13 @@ % http://www.ctan.org/tex-archive/biblio/bibtex/contrib/doc/ % The IEEEtran BibTeX style support page is at: % http://www.michaelshell.org/tex/ieeetran/bibtex/ -%\bibliographystyle{IEEEtran} +\bibliographystyle{IEEEtran} % argument is your BibTeX string definitions and bibliography database(s) -%\bibliography{IEEEabrv,../bib/paper} +\bibliography{ref} % % manually copy in the resultant .bbl file % set second argument of \begin to the number of references % (used to reserve space for the reference number labels box) -\begin{thebibliography}{1} - -\bibitem{IEEEhowto:kopka} -H.~Kopka and P.~W. Daly, \emph{A Guide to \LaTeX}, 3rd~ed.\hskip 1em plus - 0.5em minus 0.4em\relax Harlow, England: Addison-Wesley, 1999. - -\end{thebibliography}