Skip to main content

Posts

Showing posts from March 10, 2013

提高吞吐量(IMPROVING THROUGHPUT)

随着互联网的发展,web服务器成为了一个很大的应用。和传统的科学计算以及桌面应用不同,web服务器对延时并不是很敏感,因为网络传输延时往往 大于服务器端的计算延时。相反的,对于web服务器,提高并发处理能力倒显得极端重要,因为现在的web站点动辄就是几万人,甚至上千万人在线(当然,对 于这种系统,往往不是一个服务器,而是服务器分布在各地,导出都是CDN),因此,提高web服务器的处理器吞吐量就显得极端重要(记得计算所所长李国杰 院士去年提过高通量计算,不知道是不是这个意思)。 提高处理器的吞吐量的基本思路很简单,那就是提高处理器的并发线程数,而提高处理器的并发线程数,方法又有两类,同步多线程(Simultaneous MultiThreading,SMT)以及多核(Multicore)。 传统的处理器核心只能 并发 执行一个线程,而一个线程内部往往会由于相 关(数据相关,控制相关)导致流水线堵塞,从而导致处理器的部件不能充分利用(包括取值部件,功能部件等)。为了减少由于线程内的依赖所造成的堵塞,提高 单个处理器核心的吞吐量,出现了在一个处理器核心同时执行几个线程的技术(因为线程间的依赖比线程内要少很多),即同步多线程技术,Intel又叫超线程 技术(Hyper-Threading Technology,HT)。 同步多线程(SMT)是一种在一个CPU 的时钟周期内能够执行来自多个线程的指令的硬件多线程技术。本质上,同步多线程是一种将线程级并行处理(多CPU)转化为指令级并行处理(同一CPU)的 方法。 同步多线程是单个物理处理器从多个硬件线程上下文同时分派指令的能力。同步多线程用于在商用环境中及为周期/指令(CPI)计数较高的工作负载创造性能优 势。 同步多线程使您可在同一处理器上同时调度多个线程,从而充分利用处理器的各个部件,提高性能功耗比。下面是一副不同粒度的多线程技术的比较,同时从图中也 可以基本看出同步多线程的基本原理。 很多厂商,包括IBM,Sun,Intel的处理器都应用了同步多线程技术, MIPS昨天也发布了代号为神童(Prodigy)的64位同步多线程处理器 。 另外一方面,多核也是提高并发线程数的好方法,但是多核会增加大量的面积及功耗,从而大大降低性能功耗比,而性能功耗比对于24小时在线的web服务器是至关重要的,因此

多线程

多线程,台湾惯用术语为作多执行绪,港澳惯用术语为作多线程(英语:Multithreading),是指从软件或者硬件上实现多个线程迸发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个执行绪,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理(Chip-level multithreading)或同时多线程(Simultaneous multithreading)处理器。 软件多线程。即便处理器只能运行一个线程,操作系统也可以通过快速的在不同线程之间进行切换,由于时间间隔很小,来给用户造成一种多个线程同时运行的假象。这样的程序运行机制被称为软件多线程。如微软的Windows作业系统和Linux就是在各个不同的执行绪间来回切换,被称为单人多任务作业系统。而DOS这类文字接口作业系统在一个时间只能处理一项工作,被视为单人单工作业系统。 除此之外,许多系统及处理器也支持硬件多线程技术。对称多处理机(SMP)系统具有多个处理器,所以具有真正的同时执行多个线程的能力;CMP技术通过在一块芯片上集成多个核心(Core)也具有真正的多线程能力;CMT技术则稍有不同,有的是依靠硬件执行线程切换来获得多线程能力,操作系统不再负责线程切换,因而这部分开销可以减少甚至消除,这方面典型的例子是Sun的UltraSPARC T1,它同时综合了CMP和CMT。微软的Windows 2000以后的操作系统皆支持多线程与超线程技术。 目录     1 概观     2 粗粒度交替多线程         2.1 概念         2.2 硬件成本         2.3 示例     3 细粒度交替式多线程         3.1 概念         3.2 硬件成本         3.3 示例     4 同步多线程         4.1 概念         4.2 硬件成本         4.3 示例     5 实现     6 参见     7 外部链接 概观 由于程序代码中存在的数据及控制依赖关系,单线程中所能发掘的指令并行潜力是有限的。为了发掘有限的指令级并行潜力而一味强化乱序执行和分支预测,以至于处理器复杂度和功耗急剧上升,有时候是得不偿失的。因此,现代微处理器多采用硬件多线程技术来发掘线程之间的线程级并行潜力。

线程

线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包涵在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。 线程是独立调度和分派的基本单位。线程可以操作系统内核调度的内核线程,如Win32线程;由用户进程自行调度的用户线程,如Linux Portable Thread;或者由内核与用户进程,如Windows 7的线程,进行混合调度。 同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。但同一进程中的多个线程有各自的调用栈(call stack),自己的寄存器环境(register context),自己的线程本地存储(thread-local storage)。 一个进程可以有很多线程,每条线程并行执行不同的任务。 在多核或多CPU,或支持Hyper-threading的CPU上使用多线程程序设计的好处是显而易见,即提高了程序的执行吞吐率。在单CPU单核的计算机上,使用多线程技术,也可以把进程中负责IO处理、人机交互而常备阻塞的部分与密集计算的部分分开来执行,编写专门的workhorse线程执行密集计算,从而提高了程序的执行效率。 目录     1 不同架构         1.1 Solaris     2 状态     3 参见 不同架构 Solaris 在solaris中,分成:     用户线程(user-level threads):在用户空间运行。     轻量化进程(lightweight processes):主要工作是将用户线程映射到核心线程     核心线程(kernel threads):在内核中运行。 状态 线程有四种基本状态,分别为:     产生(spawn)     中断(block)     非中断(unblock)     退出(finish)

Ubuntu: Configure Wireless From The Command Line

Although Ubuntu and other distributions give us easy to use graphical user interfaces for configuring almost everything, it's nice to know how to get things working without them. Here we'll show how to connect to a wireless access point and get on the internet from the command line. First things first, you have to know what the device name of your wireless interface is. Typically this is wlan0, but in my case, it's ath0. Be sure the interface is turned on. user@ubuntu:~$ sudo ifconfig ath0 up Next we'll get a list of all the available access points using the iwlist command. user@ubuntu:~$ iwlist ath0 scanning You should see something similar to the following: ath0 Scan completed :    Cell 01 - Address: XX:XX:XX:XX:XX:XX      ESSID:"Larry"      Mode:Master      Frequency:2.462 GHz (Channel 11)      Quality=3/94 Signal level=-92 dBm Noi