예제 #1
0
extern int job_submit(struct job_descriptor *job_desc, uint32_t submit_uid,
		      char **err_msg)
{
	int i;

	if (!last_reset)
		_get_config();
	if (jobs_per_user_per_hour == 0)
		return SLURM_SUCCESS;
	_reset_counters();

	for (i = 0; i < thru_put_size; i++) {
		if (thru_put_array[i].uid != job_desc->user_id)
			continue;
		if (thru_put_array[i].job_count < jobs_per_user_per_hour) {
			thru_put_array[i].job_count++;
			return SLURM_SUCCESS;
		}
		if (err_msg)
			*err_msg = xstrdup("Reached jobs per hour limit");
		return ESLURM_ACCOUNTING_POLICY;
	}
	thru_put_size++;
	thru_put_array = xrealloc(thru_put_array,
				  (sizeof(thru_put_t) * thru_put_size));
	thru_put_array[thru_put_size - 1].uid = job_desc->user_id;
	thru_put_array[thru_put_size - 1].job_count = 1;
	return SLURM_SUCCESS;
}
예제 #2
0
const device_addr_t& xport_benchmarker::benchmark_throughput_chdr(
    zero_copy_if::sptr tx_transport,
    zero_copy_if::sptr rx_transport,
    uint32_t sid,
    bool big_endian,
    uint32_t duration_ms)
{
    vrt::if_packet_info_t pkt_info;
    _initialize_chdr(tx_transport, rx_transport, sid, pkt_info);
    _reset_counters();
    boost::posix_time::ptime start_time(boost::posix_time::microsec_clock::local_time());

    _tx_thread.reset(new boost::thread(boost::bind(&xport_benchmarker::_stream_tx,
        this,
        tx_transport.get(),
        &pkt_info,
        big_endian)));
    _rx_thread.reset(new boost::thread(boost::bind(&xport_benchmarker::_stream_rx,
        this,
        rx_transport.get(),
        &pkt_info,
        big_endian)));

    std::this_thread::sleep_for(std::chrono::milliseconds(duration_ms));

    _tx_thread->interrupt();
    _rx_thread->interrupt();
    _tx_thread->join();
    _rx_thread->join();

    boost::posix_time::ptime stop_time(boost::posix_time::microsec_clock::local_time());
    double duration_s = ((double)(stop_time - start_time).total_microseconds()) / 1e6;

    uint64_t tx_bytes = pkt_info.num_payload_words32 * sizeof(uint32_t) * _num_tx_packets;
    uint64_t rx_bytes = pkt_info.num_payload_words32 * sizeof(uint32_t) * _num_rx_packets;
    double tx_rate    = (((double)tx_bytes) / duration_s);
    double rx_rate    = (((double)rx_bytes) / duration_s);

    _results["TX-Bytes"] = (boost::format("%.2fMB") % (tx_bytes / (1024 * 1024))).str();
    _results["RX-Bytes"] = (boost::format("%.2fMB") % (rx_bytes / (1024 * 1024))).str();
    _results["TX-Throughput"] =
        (boost::format("%.2fMB/s") % (tx_rate / (1024 * 1024))).str();
    _results["RX-Throughput"] =
        (boost::format("%.2fMB/s") % (rx_rate / (1024 * 1024))).str();
    _results["TX-Timeouts"] = std::to_string(_num_tx_timeouts);
    _results["RX-Timeouts"] = std::to_string(_num_rx_timeouts);
    _results["Data-Errors"] = std::to_string(_num_data_errors);

    return _results;
}