summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Aaron Murphy <mmstickman@gmail.com>2017-01-18 10:04:33 -0500
committerMichael Aaron Murphy <mmstickman@gmail.com>2017-01-18 10:04:33 -0500
commitd99681f8df1dbdb03b647132ec8b35877f31cbf6 (patch)
tree184efb8bcc128fa1b8f6b1cc74878d66ebe3ac85
parent51eaf671b8336ee7966c72c894de84b374a59df8 (diff)
0.10.7: Bump Version0.10.7
-rw-r--r--Cargo.lock2
-rw-r--r--Cargo.toml2
-rw-r--r--README.md91
-rw-r--r--src/arguments/mod.rs6
-rw-r--r--src/execute/job_log.rs46
-rw-r--r--src/execute/receive.rs4
6 files changed, 50 insertions, 101 deletions
diff --git a/Cargo.lock b/Cargo.lock
index d3e5cd6..cbcbb0d 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1,6 +1,6 @@
[root]
name = "parallel"
-version = "0.10.6"
+version = "0.10.7"
dependencies = [
"arrayvec 0.3.20 (registry+https://github.com/rust-lang/crates.io-index)",
"itoa 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
diff --git a/Cargo.toml b/Cargo.toml
index 25c1a4b..9124802 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "parallel"
-version = "0.10.6"
+version = "0.10.7"
authors = ["Michael Aaron Murphy <mmstickman@gmail.com>"]
license = "MIT"
description = "Command-line CPU load balancer for executing jobs in parallel"
diff --git a/README.md b/README.md
index 944aa29..ba3137f 100644
--- a/README.md
+++ b/README.md
@@ -40,29 +40,11 @@ See the [to-do list](https://github.com/mmstick/parallel/blob/master/TODO.md) fo
```
~/D/parallel (master) $ seq 1 10000 | time -v /usr/bin/parallel echo > /dev/null
- Command being timed: "/usr/bin/parallel echo"
User time (seconds): 194.73
System time (seconds): 66.49
Percent of CPU this job got: 230%
Elapsed (wall clock) time (h:mm:ss or m:ss): 1:53.08
- Average shared text size (kbytes): 0
- Average unshared data size (kbytes): 0
- Average stack size (kbytes): 0
- Average total size (kbytes): 0
Maximum resident set size (kbytes): 16140
- Average resident set size (kbytes): 0
- Major (requiring I/O) page faults: 0
- Minor (reclaiming a frame) page faults: 10329017
- Voluntary context switches: 102095
- Involuntary context switches: 229910
- Swaps: 0
- File system inputs: 0
- File system outputs: 0
- Socket messages sent: 0
- Socket messages received: 0
- Signals delivered: 0
- Page size (bytes): 4096
- Exit status: 0
```
#### Cat the contents of every binary in /usr/bin
@@ -73,24 +55,18 @@ See the [to-do list](https://github.com/mmstick/parallel/blob/master/TODO.md) fo
System time (seconds): 27.67
Percent of CPU this job got: 222%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:44.62
- Average shared text size (kbytes): 0
- Average unshared data size (kbytes): 0
- Average stack size (kbytes): 0
- Average total size (kbytes): 0
Maximum resident set size (kbytes): 17576
- Average resident set size (kbytes): 0
- Major (requiring I/O) page faults: 8
- Minor (reclaiming a frame) page faults: 4112045
- Voluntary context switches: 51331
- Involuntary context switches: 101494
- Swaps: 0
- File system inputs: 1512
- File system outputs: 0
- Socket messages sent: 0
- Socket messages received: 0
- Signals delivered: 0
- Page size (bytes): 4096
- Exit status: 5
+```
+
+#### Logging echo ::: $(seq 1 1000)
+
+```
+~/D/parallel (master) $ time -v /usr/bin/parallel --joblog log echo ::: $(seq 1 1000) > /dev/null
+User time (seconds): 21.27
+System time (seconds): 7.44
+Percent of CPU this job got: 238%
+Elapsed (wall clock) time (h:mm:ss or m:ss): 0:12.05
+Maximum resident set size (kbytes): 16624
```
### Rust Parallel (Built with MUSL target)
@@ -106,24 +82,7 @@ Command being timed: "target/x86_64-unknown-linux-musl/release/parallel echo"
System time (seconds): 2.85
Percent of CPU this job got: 104%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:03.20
- Average shared text size (kbytes): 0
- Average unshared data size (kbytes): 0
- Average stack size (kbytes): 0
- Average total size (kbytes): 0
Maximum resident set size (kbytes): 1768
- Average resident set size (kbytes): 0
- Major (requiring I/O) page faults: 0
- Minor (reclaiming a frame) page faults: 823754
- Voluntary context switches: 82723
- Involuntary context switches: 64834
- Swaps: 0
- File system inputs: 0
- File system outputs: 320
- Socket messages sent: 0
- Socket messages received: 0
- Signals delivered: 0
- Page size (bytes): 4096
- Exit status: 0
```
#### Cat the contents of every binary in /usr/bin
@@ -134,24 +93,18 @@ Command being timed: "target/x86_64-unknown-linux-musl/release/parallel echo"
System time (seconds): 4.61
Percent of CPU this job got: 192%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:02.89
- Average shared text size (kbytes): 0
- Average unshared data size (kbytes): 0
- Average stack size (kbytes): 0
- Average total size (kbytes): 0
Maximum resident set size (kbytes): 1868
- Average resident set size (kbytes): 0
- Major (requiring I/O) page faults: 0
- Minor (reclaiming a frame) page faults: 350216
- Voluntary context switches: 68772
- Involuntary context switches: 40085
- Swaps: 0
- File system inputs: 368
- File system outputs: 416
- Socket messages sent: 0
- Socket messages received: 0
- Signals delivered: 0
- Page size (bytes): 4096
- Exit status: 0
+```
+
+#### Logging echo ::: $(seq 1 1000)
+
+```
+~/D/parallel (master) $ time -v target/release/x86_64-unknown-linux-musl/release/parallel --joblog log echo ::: $(seq 1 1000)
+User time (seconds): 0.06
+System time (seconds): 0.29
+Percent of CPU this job got: 70%
+Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.51
+Maximum resident set size (kbytes): 1768
```
## Syntax Examples
diff --git a/src/arguments/mod.rs b/src/arguments/mod.rs
index 05abe4a..214418d 100644
--- a/src/arguments/mod.rs
+++ b/src/arguments/mod.rs
@@ -195,9 +195,9 @@ impl Args {
}
}
_ if &argument[2..9] == "shebang" => {
- shebang = true;
- comm.push_str(&argument[10..]);
- break
+ shebang = true;
+ comm.push_str(&argument[10..]);
+ break
},
_ => return Err(ParseErr::InvalidArgument(index-1)),
}
diff --git a/src/execute/job_log.rs b/src/execute/job_log.rs
index 91fbf4e..f07ff2c 100644
--- a/src/execute/job_log.rs
+++ b/src/execute/job_log.rs
@@ -25,12 +25,11 @@ pub struct JobLog {
impl JobLog {
/// Writes an individual job log to the job log file, efficiently.
pub fn write_entry(&self, joblog: &mut File, id_buffer: &mut [u8], pad: usize) {
- let mut start_indice;
// 1: JobID
let mut joblog = BufWriter::new(joblog);
- start_indice = (self.job_id + 1).numtoa(10, id_buffer);
- let _ = joblog.write(&id_buffer[start_indice..]);
- for _ in 0..pad-id_buffer[start_indice..].len() {
+ let mut index = (self.job_id + 1).numtoa(10, id_buffer);
+ let _ = joblog.write(&id_buffer[index..]);
+ for _ in 0..pad - (20 - index) {
let _ = joblog.write(b" ");
}
@@ -38,64 +37,61 @@ impl JobLog {
if self.flags & JOBLOG_8601 != 0 {
// ISO 8601 representation of the time
let tm = at(self.start_time);
- // TODO: Eliminate heap allocation
- let message = format!("{}-{:02}-{:02} {:02}:{:02}:{:02} ", 1900+tm.tm_year, 1+tm.tm_mon,
+ let _ = write!(joblog, "{}-{:02}-{:02} {:02}:{:02}:{:02} ", 1900+tm.tm_year, 1+tm.tm_mon,
tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
- let _ = joblog.write(message.as_bytes());
} else {
// Represented in seconds, with two decimal places
- // TODO: write an abstraction for printing decimals
- start_indice = self.start_time.sec.numtoa(10, id_buffer);
- let _ = joblog.write(&id_buffer[start_indice..]);
+ index = self.start_time.sec.numtoa(10, id_buffer);
+ let _ = joblog.write(&id_buffer[index..]);
let _ = joblog.write(b".");
let decimal = (self.start_time.nsec % 1_000_000_000) / 1_000_000;
if decimal == 0 {
let _ = joblog.write(b"000");
} else {
- start_indice = decimal.numtoa(10, id_buffer);
- match id_buffer[start_indice..].len() {
+ index = decimal.numtoa(10, id_buffer);
+ match 20 - index {
1 => { let _ = joblog.write(b"00"); },
2 => { let _ = joblog.write(b"0"); },
_ => (),
};
- let _ = joblog.write(&id_buffer[start_indice..]);
+ let _ = joblog.write(&id_buffer[index..]);
}
let _ = joblog.write(b" ");
}
// 3: Runtime in seconds, with up to three decimal places.
- start_indice = (self.runtime / 1_000_000_000).numtoa(10, id_buffer);
- for _ in 0..6-id_buffer[start_indice..].len() {
+ index = (self.runtime / 1_000_000_000).numtoa(10, id_buffer);
+ for _ in 0..6 - (20 - index) {
let _ = joblog.write(b" ");
}
- let _ = joblog.write(&id_buffer[start_indice..]);
+ let _ = joblog.write(&id_buffer[index..]);
let _ = joblog.write(b".");
let decimal = (self.runtime % 1_000_000_000) / 1_000_000;
if decimal == 0 {
let _ = joblog.write(b"000");
} else {
- start_indice = decimal.numtoa(10, id_buffer);
- match id_buffer[start_indice..].len() {
+ index = decimal.numtoa(10, id_buffer);
+ match 20 - index {
1 => { let _ = joblog.write(b"00"); },
2 => { let _ = joblog.write(b"0"); },
_ => (),
};
- let _ = joblog.write(&id_buffer[start_indice..]);
+ let _ = joblog.write(&id_buffer[index..]);
}
let _ = joblog.write(b" ");
// 4: Exit Value
- start_indice = self.exit_value.numtoa(10, id_buffer);
- let _ = joblog.write(&id_buffer[start_indice..]);
- for _ in 0..9-id_buffer[start_indice..].len() {
+ index = self.exit_value.numtoa(10, id_buffer);
+ let _ = joblog.write(&id_buffer[index..]);
+ for _ in 0..9 - (20 - index) {
let _ = joblog.write(b" ");
}
// 5: Signal
- start_indice = self.signal.numtoa(10, id_buffer);
- let _ = joblog.write(&id_buffer[start_indice..]);
- for _ in 0..8-id_buffer[start_indice..].len() {
+ index = self.signal.numtoa(10, id_buffer);
+ let _ = joblog.write(&id_buffer[index..]);
+ for _ in 0..8 - (20 - index) {
let _ = joblog.write(b" ");
}
diff --git a/src/execute/receive.rs b/src/execute/receive.rs
index e1ae59c..d5ce6df 100644
--- a/src/execute/receive.rs
+++ b/src/execute/receive.rs
@@ -202,10 +202,10 @@ pub fn receive_messages(input_rx: Receiver<State>, args: Args, base: &str, proce
let mut stdout = stdout.lock();
let mut stderr = stderr.lock();
let mut bytes_read = stdout_file.read(&mut read_buffer).unwrap();
- if bytes_read != 0 { stdout.write(&read_buffer[0..bytes_read]).unwrap(); }
+ if bytes_read != 0 { stdout.write_all(&read_buffer[0..bytes_read]).unwrap(); }
bytes_read = stderr_file.read(&mut read_buffer).unwrap();
- if bytes_read != 0 { stderr.write(&read_buffer[0..bytes_read]).unwrap(); }
+ if bytes_read != 0 { stderr.write_all(&read_buffer[0..bytes_read]).unwrap(); }
thread::sleep(Duration::from_millis(1));
}
}