Tag Archives: Operation System and Linux

Install Arch Linux

When come to Linux, previously I would take Ubuntu distribution. It is rather easy to use, and the Debian package manager is more than adequate. Well, this time I am trying Arch Linux for a change. This is a minimalism … Continue reading

Posted in Operation System and Linux | Tagged | Leave a comment

非正式 Debian 软件包制作手册

正式的 Debian 软件包一般是由源代码和 AutoTools 工具配置编译生成,再和 debian 配置文件一起打包发布的。过程还是相当繁杂的。 下面是简化的非正式的流程,适用于简单的利用 Debian 包来部署 Linux 应用。 首先,注意 Debian 包的名字遵循下面的约定: [package]_[version]-[revision]_[arch].deb package 是软件包名,version 是版本号,revision 是修订号,arch 是软件包架构(例如 i386 或 armle,也可以是通用的 all 或 any)。 最为例子,我们的工作目录就用 package_version-revision_arch。 接下去要做的有两件事,一是准备要部署的文件和目标路径,二是编写 debian 的配置文件。 准备部署文件很简单,只需要将文件连同其完整目标路径复制到刚才准备的 package_version-revision_arch 目录中。例如要将 foo 文件部署到目标系统的 /usr/bin/foo,只要将 foo 文件复制到 … Continue reading

Posted in Computer and Internet, Operation System and Linux | Tagged , | Leave a comment

Linux 的 Socket 通信

Socket 不仅是网络通信工具,同时也是 *nix 系统下方便且通用的跨进程通信方式。 但是如果通信双方配合不当的话也会给系统造成负面效果。 在发送和接收端传输数据的时候,可以把双方的缓存合起来看作一个大的缓存。如果当接收端的处理速度跟不上发送端的发送速度的话,就会把双方的缓存用尽而造成发送端的阻塞。而如果发送端不幸又使用了阻塞的 Socket API 发送的话,就很容易引起其性能下降了。 根本的解决方案一是提高接收端处理速度,解决性能瓶颈;如果一做不到的话,二则是用非阻塞的方式发送数据。在二中,一是使用线程,二是使用异步IO,比如 libevent 库(资源方面,线程是线性扩展性的,而异步IO则可能达到次线性甚至常数的扩展性)。 对于简单的阻塞式的 Socket API,一个对应瞬时性的大容量的数据传输的方式是加大发送端的缓存(使用 setsockopt)。但需要注意的是 Linux 一般可以设置的缓存最大值往往不过数百kB,有时不够满足需求。如果需要更大的缓存则需要调整系统设置,可以参考 Boost socket performance on Linux。 需要注意的是,即使使用文件名作为地址的本地 Socket 通信(AF_UNIX,或 AF_LOCAL / AF_FILE),上面讨论的缓存和缓存设置同样起作用。

Posted in Computer and Internet, Operation System and Linux | Tagged , | Leave a comment

DOMjudge结构简介

最近在公司里架了个 DOMjudge。简单介绍下它的结构吧。 DOMjudge 是一个自动化的编程竞赛的判定系统,由一个 DOMjudge server 和复数个 Judgehost 构成。 DOMjudge server 给用户、评委、管理员提供网页界面。它是一个典型的 LAMP 网络应用的架构,运行于 Linux 操作系统,Apache 提供网页服务,PHP 作为 CGI 脚本,MySQL 存储数据。用户界面主要显示队伍、排名、文件提交和提交状态;评委界面是管理员界面的子集,主要用来查看队伍的答题情况,可以显示提交的源代码、测试例的输出比较等,以便评委和进行验证。管理员界面用来管理竞赛、队伍、题目等配置,大多数的配置也可以通过直接编辑 domjudge 数据库中的 configure 表进行。 Judgehost 负责编译和运行队伍提交的源代码,给出判定结果。鉴于性能考虑,Judgehost 可以有复数台,且一般不和 DOMjudge server 运行于同一台服务器。它通过守护进程连接 DOMjudge server,通过轮询的方式检查 server 是否有需要判定的代码,如有,则编译运行代码,并做出判定。有趣的是,除了编译运行的部分,Judgehost 的结构和 server 的结构非常相似。守护进程仅仅是一个 PHP 脚本,而每次轮询贯彻了 … Continue reading

Posted in ACM, Computer and Internet, Operation System and Linux | Tagged , , | Leave a comment