<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>中文 &#187; 石剑</title>
	<atom:link href="http://software.intel.com/zh-cn/blogs/author/jian-shi/feed/" rel="self" type="application/rss+xml" />
	<link>http://software.intel.com/zh-cn/blogs</link>
	<description></description>
	<lastBuildDate>Sat, 26 May 2012 06:34:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>linux下简单的自适应CPU利用率的控制（Python实现）</title>
		<link>http://software.intel.com/zh-cn/blogs/2008/08/25/linuxcpupython/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2008/08/25/linuxcpupython/#comments</comments>
		<pubDate>Tue, 26 Aug 2008 06:37:21 +0000</pubDate>
		<dc:creator>石剑</dc:creator>
				<category><![CDATA[开放源代码]]></category>
		<category><![CDATA[虚拟化技术]]></category>
		<category><![CDATA[CPU]]></category>
		<category><![CDATA[利用率]]></category>
		<category><![CDATA[控制]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2008/08/25/linuxcpupython/</guid>
		<description><![CDATA[最近在做的是虚拟化相关的一个demo，牵涉到虚拟化环境下的服务器负载均衡。我们用到一个简单的case，就是在负载出现“不平衡”的时候，进行live migration。由于只是demo需要，我们的负载暂时只考虑到cpu的利用率。而实际准备中，由于没有客户端的压力，很难做到CPU利用率的精确控制。这里写了个简单的脚本程序，通过自适应的调节，来达到将服务器CPU利用率控制在一定的范围内，从而为确保在某台服务器CPU过高的时候，会自动将虚拟机live migration到其他CPU利用率低的机器上的测试做了准备。 python实现的脚本如下，这个脚本需要5个数字参数的输入，分别为： 最低CPU利用率，最高CPU利用率，初始线程数量，每次调节的线程数量，每个线程睡眠的时间（毫秒） 当然，很大程度上，由于硬件环境的不同，这些参数带有很强的经验性。 #!/usr/bin/python import threading import time import os import string import sys class ControlThread(threading.Thread):     def __init__(self):     threading.Thread.__init__(self)     self.runflag = True #线程运行标示，用于将来减少线程时能够正常结束   def run(self):     while self.runflag:       os.popen('usleep ' + sys.argv[5])       #time.sleep(string.atof(sys.argv[5])) #这里使用的是linux下shell里面的usleep，而不是python自带的sleep函数。 #相比之下，usleep还是相当强大的，而python的sleep单位为秒，虽然可以输入浮点数，但还是相对弱了些   def stop(self):     self.runflag = False #让其正常终止循环 threadList=[] print [...]]]></description>
			<content:encoded><![CDATA[<p>最近在做的是虚拟化相关的一个demo，牵涉到虚拟化环境下的服务器负载均衡。我们用到一个简单的case，就是在负载出现“不平衡”的时候，进行live migration。由于只是demo需要，我们的负载暂时只考虑到cpu的利用率。而实际准备中，由于没有客户端的压力，很难做到CPU利用率的精确控制。这里写了个简单的脚本程序，通过自适应的调节，来达到将服务器CPU利用率控制在一定的范围内，从而为确保在某台服务器CPU过高的时候，会自动将虚拟机live migration到其他CPU利用率低的机器上的测试做了准备。</p>
<p>python实现的脚本如下，这个脚本需要5个数字参数的输入，分别为：<br />
最低CPU利用率，最高CPU利用率，初始线程数量，每次调节的线程数量，每个线程睡眠的时间（毫秒）</p>
<p>当然，很大程度上，由于硬件环境的不同，这些参数带有很强的经验性。</p>
<p>#!/usr/bin/python</p>
<p>import threading<br />
import time<br />
import os<br />
import string<br />
import sys<br />
class ControlThread(threading.Thread):<br />
 </p>
<p>  def __init__(self):<br />
    threading.Thread.__init__(self)<br />
    self.runflag = True #线程运行标示，用于将来减少线程时能够正常结束</p>
<p>  def run(self):<br />
    while self.runflag:<br />
      os.popen('usleep ' + sys.argv[5])<br />
      #time.sleep(string.atof(sys.argv[5]))<br />
#这里使用的是linux下shell里面的usleep，而不是python自带的sleep函数。<br />
#相比之下，usleep还是相当强大的，而python的sleep单位为秒，虽然可以输入浮点数，但还是相对弱了些</p>
<p>  def stop(self):<br />
    self.runflag = False<br />
#让其正常终止循环<br />
threadList=[]</p>
<p>print 'Start Thread Number:' + sys.argv[3] + '\tSleep Time(ms):'+ sys.argv[5]</p>
<p>#初始化一定数量的线程，否则从零开始，可能需要很长的时间才能达到指定范围<br />
for i in range(0,string.atoi(sys.argv[3])):<br />
  thread = ControlThread()<br />
  threadList.append(thread)<br />
  thread.start()</p>
<p>#这里使用sar来抓取cpu利用率，这里指的是总的cpu利用率。然后通过比较，进行自适应调整<br />
while True:<br />
  output = 100 - string.atof(os.popen('sar 1 1 | grep ^Average | awk \'{print $8}\'').read())<br />
  print 'CPU Usage:' + str(output) + '\tCurrent Thread Number:' + str(len(threadList))</p>
<p>  if output &lt; string.atoi(sys.argv[1]):#增加线程<br />
   for i in range(0,string.atoi(sys.argv[4])):<br />
    thread = ControlThread()<br />
    thread.start()<br />
    threadList.append(thread)<br />
   print "+++++"<br />
  if output &gt; string.atoi(sys.argv[2]):#减少线程<br />
   for i in range(0,string.atoi(sys.argv[4])):  <br />
    thread = threadList.pop()<br />
    thread.stop()<br />
   print "-----"</p>
<p> </p>
<p>总的来说，这个脚本比较简单，而且在不同的机器上，需要操作人员的经验来初始化才能达到最佳效果。但这毕竟是我第一个python程序，而且也达到了预期的目的。以上只是能运行的核心代码，至于usage，错误处理，退出程序等，就没有给出来了：）</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2008/08/25/linuxcpupython/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

