mirror of
https://github.com/upa/mscp.git
synced 2026-02-28 03:24:41 +08:00
mscp: add -u max_startups option.
pymscp also accepts keyword 'max_startups' (int).
This commit is contained in:
@@ -43,7 +43,7 @@ struct mscp_opts {
|
|||||||
size_t max_chunk_sz; /** maximum chunk size (default file size/nr_threads) */
|
size_t max_chunk_sz; /** maximum chunk size (default file size/nr_threads) */
|
||||||
size_t buf_sz; /** buffer size, default 16k. */
|
size_t buf_sz; /** buffer size, default 16k. */
|
||||||
char coremask[MSCP_MAX_COREMASK_STR]; /** hex to specifiy usable cpu cores */
|
char coremask[MSCP_MAX_COREMASK_STR]; /** hex to specifiy usable cpu cores */
|
||||||
int max_startups; /* sshd MaxStartups conccurent connections */
|
int max_startups; /* sshd MaxStartups concurrent connections */
|
||||||
|
|
||||||
int severity; /** messaging severity. set MSCP_SERVERITY_* */
|
int severity; /** messaging severity. set MSCP_SERVERITY_* */
|
||||||
int msg_fd; /** fd to output message. default STDOUT (0),
|
int msg_fd; /** fd to output message. default STDOUT (0),
|
||||||
|
|||||||
12
src/main.c
12
src/main.c
@@ -24,7 +24,7 @@
|
|||||||
void usage(bool print_help) {
|
void usage(bool print_help) {
|
||||||
printf("mscp v" VERSION ": copy files over multiple ssh connections\n"
|
printf("mscp v" VERSION ": copy files over multiple ssh connections\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Usage: mscp [vqDHdNh] [-n nr_conns] [-m coremask]\n"
|
"Usage: mscp [vqDHdNh] [-n nr_conns] [-m coremask] [-u max_startups]\n"
|
||||||
" [-s min_chunk_sz] [-S max_chunk_sz] [-a nr_ahead] [-b buf_sz]\n"
|
" [-s min_chunk_sz] [-S max_chunk_sz] [-a nr_ahead] [-b buf_sz]\n"
|
||||||
" [-l login_name] [-p port] [-i identity_file]\n"
|
" [-l login_name] [-p port] [-i identity_file]\n"
|
||||||
" [-c cipher_spec] [-M hmac_spec] [-C compress] source ... target\n"
|
" [-c cipher_spec] [-M hmac_spec] [-C compress] source ... target\n"
|
||||||
@@ -36,6 +36,8 @@ void usage(bool print_help) {
|
|||||||
printf(" -n NR_CONNECTIONS number of connections "
|
printf(" -n NR_CONNECTIONS number of connections "
|
||||||
"(default: floor(log(cores)*2)+1)\n"
|
"(default: floor(log(cores)*2)+1)\n"
|
||||||
" -m COREMASK hex value to specify cores where threads pinned\n"
|
" -m COREMASK hex value to specify cores where threads pinned\n"
|
||||||
|
" -u MAX_STARTUPS number of concurrent outgoing connections "
|
||||||
|
"(default: 8)\n"
|
||||||
" -s MIN_CHUNK_SIZE min chunk size (default: 64MB)\n"
|
" -s MIN_CHUNK_SIZE min chunk size (default: 64MB)\n"
|
||||||
" -S MAX_CHUNK_SIZE max chunk size (default: filesize/nr_conn)\n"
|
" -S MAX_CHUNK_SIZE max chunk size (default: filesize/nr_conn)\n"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -52,7 +54,8 @@ void usage(bool print_help) {
|
|||||||
" -i IDENTITY identity file for public key authentication\n"
|
" -i IDENTITY identity file for public key authentication\n"
|
||||||
" -c CIPHER cipher spec\n"
|
" -c CIPHER cipher spec\n"
|
||||||
" -M HMAC hmac spec\n"
|
" -M HMAC hmac spec\n"
|
||||||
" -C COMPRESS enable compression: yes, no, zlib, zlib@openssh.com\n"
|
" -C COMPRESS enable compression: "
|
||||||
|
"yes, no, zlib, zlib@openssh.com\n"
|
||||||
" -H disable hostkey check\n"
|
" -H disable hostkey check\n"
|
||||||
" -d increment ssh debug output level\n"
|
" -d increment ssh debug output level\n"
|
||||||
" -N enable Nagle's algorithm (default disabled)\n"
|
" -N enable Nagle's algorithm (default disabled)\n"
|
||||||
@@ -204,7 +207,7 @@ int main(int argc, char **argv)
|
|||||||
memset(&o, 0, sizeof(o));
|
memset(&o, 0, sizeof(o));
|
||||||
o.severity = MSCP_SEVERITY_WARN;
|
o.severity = MSCP_SEVERITY_WARN;
|
||||||
|
|
||||||
while ((ch = getopt(argc, argv, "n:m:s:S:a:b:vqDrl:p:i:c:M:C:HdNh")) != -1) {
|
while ((ch = getopt(argc, argv, "n:m:u:s:S:a:b:vqDrl:p:i:c:M:C:HdNh")) != -1) {
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
case 'n':
|
case 'n':
|
||||||
o.nr_threads = atoi(optarg);
|
o.nr_threads = atoi(optarg);
|
||||||
@@ -217,6 +220,9 @@ int main(int argc, char **argv)
|
|||||||
case 'm':
|
case 'm':
|
||||||
strncpy(o.coremask, optarg, sizeof(o.coremask));
|
strncpy(o.coremask, optarg, sizeof(o.coremask));
|
||||||
break;
|
break;
|
||||||
|
case 'u':
|
||||||
|
o.max_startups = atoi(optarg);
|
||||||
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
o.min_chunk_sz = atoi(optarg);
|
o.min_chunk_sz = atoi(optarg);
|
||||||
break;
|
break;
|
||||||
|
|||||||
11
src/mscp.c
11
src/mscp.c
@@ -26,7 +26,7 @@ struct mscp {
|
|||||||
int *cores; /* usable cpu cores by COREMASK */
|
int *cores; /* usable cpu cores by COREMASK */
|
||||||
int nr_cores; /* length of array of cores */
|
int nr_cores; /* length of array of cores */
|
||||||
|
|
||||||
sem_t sem; /* semaphore for conccurent
|
sem_t sem; /* semaphore for concurrent
|
||||||
* connecting ssh sessions */
|
* connecting ssh sessions */
|
||||||
|
|
||||||
sftp_session first; /* first sftp session */
|
sftp_session first; /* first sftp session */
|
||||||
@@ -193,6 +193,10 @@ static int validate_and_set_defaut_params(struct mscp_opts *o)
|
|||||||
|
|
||||||
if (o->max_startups == 0)
|
if (o->max_startups == 0)
|
||||||
o->max_startups = DEFAULT_MAX_STARTUPS;
|
o->max_startups = DEFAULT_MAX_STARTUPS;
|
||||||
|
else if (o->max_startups < 0) {
|
||||||
|
mscp_set_error("invalid max_startups: %d", o->max_startups);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (o->msg_fd == 0)
|
if (o->msg_fd == 0)
|
||||||
o->msg_fd = STDOUT_FILENO;
|
o->msg_fd = STDOUT_FILENO;
|
||||||
@@ -219,8 +223,9 @@ struct mscp *mscp_init(const char *remote_host, int direction,
|
|||||||
|
|
||||||
mprint_set_severity(o->severity);
|
mprint_set_severity(o->severity);
|
||||||
|
|
||||||
if (validate_and_set_defaut_params(o) < 0)
|
if (validate_and_set_defaut_params(o) < 0) {
|
||||||
goto free_out;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
m = malloc(sizeof(*m));
|
m = malloc(sizeof(*m));
|
||||||
if (!m) {
|
if (!m) {
|
||||||
|
|||||||
11
src/pymscp.c
11
src/pymscp.c
@@ -74,7 +74,7 @@ static int release_instance(struct instance *i)
|
|||||||
|
|
||||||
/* wrapper functions */
|
/* wrapper functions */
|
||||||
|
|
||||||
static PyObject *wrap_mscp_init(PyObject *sef, PyObject *args, PyObject *kw)
|
static PyObject *wrap_mscp_init(PyObject *self, PyObject *args, PyObject *kw)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Initialize struct mscp with options. wrap_mscp_init
|
* Initialize struct mscp with options. wrap_mscp_init
|
||||||
@@ -89,10 +89,14 @@ static PyObject *wrap_mscp_init(PyObject *sef, PyObject *args, PyObject *kw)
|
|||||||
/* mscp_opts */
|
/* mscp_opts */
|
||||||
"nr_threads", /* int */
|
"nr_threads", /* int */
|
||||||
"nr_ahead", /* int */
|
"nr_ahead", /* int */
|
||||||
|
|
||||||
"min_chunk_sz", /* unsigned long */
|
"min_chunk_sz", /* unsigned long */
|
||||||
"max_chunk_sz", /* unsigned long */
|
"max_chunk_sz", /* unsigned long */
|
||||||
"buf_sz", /* unsigned long */
|
"buf_sz", /* unsigned long */
|
||||||
|
|
||||||
"coremask", /* const char * */
|
"coremask", /* const char * */
|
||||||
|
|
||||||
|
"max_startups", /* int */
|
||||||
"severity", /* int, MSCP_SERVERITY_* */
|
"severity", /* int, MSCP_SERVERITY_* */
|
||||||
"msg_fd", /* int */
|
"msg_fd", /* int */
|
||||||
|
|
||||||
@@ -100,17 +104,19 @@ static PyObject *wrap_mscp_init(PyObject *sef, PyObject *args, PyObject *kw)
|
|||||||
"login_name", /* const char * */
|
"login_name", /* const char * */
|
||||||
"port", /* const char * */
|
"port", /* const char * */
|
||||||
"identity", /* const char * */
|
"identity", /* const char * */
|
||||||
|
|
||||||
"cipher", /* const char * */
|
"cipher", /* const char * */
|
||||||
"hmac", /* const char * */
|
"hmac", /* const char * */
|
||||||
"compress", /* const char * */
|
"compress", /* const char * */
|
||||||
"password", /* const char * */
|
"password", /* const char * */
|
||||||
"passphrase", /* const char * */
|
"passphrase", /* const char * */
|
||||||
|
|
||||||
"debug_level", /* int */
|
"debug_level", /* int */
|
||||||
"no_hostkey_check", /* bool */
|
"no_hostkey_check", /* bool */
|
||||||
"enable_nagle", /* bool */
|
"enable_nagle", /* bool */
|
||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
const char *fmt = "si" "|iikkksii" "ssssssssipp";
|
const char *fmt = "si" "|" "ii" "kkk" "s" "iii" "sss" "sssss" "ipp";
|
||||||
char *coremask = NULL;
|
char *coremask = NULL;
|
||||||
char *login_name = NULL, *port = NULL, *identity = NULL;
|
char *login_name = NULL, *port = NULL, *identity = NULL;
|
||||||
char *cipher = NULL, *hmac = NULL, *compress = NULL;
|
char *cipher = NULL, *hmac = NULL, *compress = NULL;
|
||||||
@@ -137,6 +143,7 @@ static PyObject *wrap_mscp_init(PyObject *sef, PyObject *args, PyObject *kw)
|
|||||||
&i->mo.max_chunk_sz,
|
&i->mo.max_chunk_sz,
|
||||||
&i->mo.buf_sz,
|
&i->mo.buf_sz,
|
||||||
&coremask,
|
&coremask,
|
||||||
|
&i->mo.max_startups,
|
||||||
&i->mo.severity,
|
&i->mo.severity,
|
||||||
&i->mo.msg_fd,
|
&i->mo.msg_fd,
|
||||||
&login_name,
|
&login_name,
|
||||||
|
|||||||
@@ -71,6 +71,7 @@ param_kwargs = [
|
|||||||
{ "min_chunk_sz": 1 * 1024 * 1024 },
|
{ "min_chunk_sz": 1 * 1024 * 1024 },
|
||||||
{ "max_chunk_sz": 64 * 1024 * 1024 },
|
{ "max_chunk_sz": 64 * 1024 * 1024 },
|
||||||
{ "coremask": "0x0f" },
|
{ "coremask": "0x0f" },
|
||||||
|
{ "max_startups": 5 },
|
||||||
{ "severity": mscp.SEVERITY_NONE },
|
{ "severity": mscp.SEVERITY_NONE },
|
||||||
{ "cipher": "aes128-gcm@openssh.com" },
|
{ "cipher": "aes128-gcm@openssh.com" },
|
||||||
{ "compress": "yes" },
|
{ "compress": "yes" },
|
||||||
|
|||||||
Reference in New Issue
Block a user