https://www.mediawiki.org/wiki/Special:Code/MediaWiki/101948
Revision: 101948
Author: tstarling
Date: 2011-11-04 02:43:42 +0000 (Fri, 04 Nov 2011)
Log Message:
-----------
Added a test program which can read from a pipe at a precisely controlled rate,
up to about 1 GB/s.
Modified Paths:
--------------
trunk/udplog/Makefile
trunk/udplog/srclib/PosixClock.h
Added Paths:
-----------
trunk/udplog/srcmisc/slowread.cpp
Modified: trunk/udplog/Makefile
===================================================================
--- trunk/udplog/Makefile 2011-11-04 02:10:45 UTC (rev 101947)
+++ trunk/udplog/Makefile 2011-11-04 02:43:42 UTC (rev 101948)
@@ -1,8 +1,9 @@
-TARGETS = log2udp udprecv delta udp2log/udp2log packet-loss
+TARGETS = log2udp udprecv delta udp2log/udp2log packet-loss slowread
SRCLIB_OBJS = srclib/HostEntry.o srclib/FileDescriptor.o srclib/IPAddress.o
srclib/Socket.o srclib/SocketAddress.o srclib/PosixClock.o
HOST_OBJS = srcmisc/host.o $(SRCLIB_OBJS)
LOG2UDP_OBJS = srcmisc/log2udp.o $(SRCLIB_OBJS)
UDPRECV_OBJS = srcmisc/udprecv.o $(SRCLIB_OBJS)
+SLOWREAD_OBJS = srcmisc/slowread.o $(SRCLIB_OBJS)
UDP2LOG_OBJS = udp2log/udp2log.o udp2log/LogProcessor.o
udp2log/Udp2LogConfig.o $(SRCLIB_OBJS)
CFLAGS:=$(CFLAGS) -Wall
@@ -29,6 +30,9 @@
packet-loss: srcmisc/packet-loss.cpp
g++ $(CFLAGS) -o packet-loss srcmisc/packet-loss.cpp
+slowread: $(SLOWREAD_OBJS)
+ g++ $(CFLAGS) $(SLOWREAD_OBJS) -lrt -o slowread
+
udp2log/udp2log: $(UDP2LOG_OBJS)
g++ $(CFLAGS) -o udp2log/udp2log $(UDP2LOG_OBJS)
-lboost_program_options -lrt
Modified: trunk/udplog/srclib/PosixClock.h
===================================================================
--- trunk/udplog/srclib/PosixClock.h 2011-11-04 02:10:45 UTC (rev 101947)
+++ trunk/udplog/srclib/PosixClock.h 2011-11-04 02:43:42 UTC (rev 101948)
@@ -87,6 +87,13 @@
return res;
}
+ Time NanoSleep(int flags, const Time & request) {
+ Time remain;
+ if (clock_nanosleep(id, flags, &request.data, &remain.data) ==
-1) {
+ throw libc_error("PosixClock::NanoSleep");
+ }
+ return remain;
+ }
protected:
clockid_t id;
Time res;
Added: trunk/udplog/srcmisc/slowread.cpp
===================================================================
--- trunk/udplog/srcmisc/slowread.cpp (rev 0)
+++ trunk/udplog/srcmisc/slowread.cpp 2011-11-04 02:43:42 UTC (rev 101948)
@@ -0,0 +1,33 @@
+#include "../srclib/PosixClock.h"
+#include <stdlib.h>
+#include <unistd.h>
+
+int main(int argc, char** argv) {
+ long long rate = 1e6; // bytes per second
+
+ if (argc > 1) {
+ rate = atoll(argv[1]);
+ }
+
+ const int bufSize = 32768;
+ char buffer[bufSize];
+ ssize_t bytesRead;
+
+ PosixClock clock(CLOCK_REALTIME);
+ PosixClock::Time t = clock.Get();
+ PosixClock::Time currentTime;
+ PosixClock::Time maxDrift(0.001);
+ for (;;) {
+ bytesRead = read(STDIN_FILENO, buffer, bufSize);
+ if (bytesRead <= 0) {
+ return 0;
+ }
+ currentTime = clock.Get();
+ if (currentTime - t > maxDrift) {
+ t = currentTime;
+ }
+ t += PosixClock::Time((double)bytesRead / rate);
+ clock.NanoSleep(TIMER_ABSTIME, t);
+ }
+}
+
Property changes on: trunk/udplog/srcmisc/slowread.cpp
___________________________________________________________________
Added: svn:eol-style
+ native
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs