New command -data_cache_size

This commit is contained in:
Thomas Schmitt 2012-03-11 16:41:10 +00:00
parent b42293cd05
commit c704c9c205
15 changed files with 187 additions and 46 deletions

View File

@ -161,6 +161,7 @@ Xorriso_option_cp_clone;
Xorriso_option_cpri; Xorriso_option_cpri;
Xorriso_option_cpx; Xorriso_option_cpx;
Xorriso_option_cut_out; Xorriso_option_cut_out;
Xorriso_option_data_cache_size;
Xorriso_option_dev; Xorriso_option_dev;
Xorriso_option_devices; Xorriso_option_devices;
Xorriso_option_dialog; Xorriso_option_dialog;

View File

@ -192,6 +192,9 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
m->displacement_sign= 0; m->displacement_sign= 0;
m->drives_exclusive= 1; m->drives_exclusive= 1;
m->early_stdio_test= 0; m->early_stdio_test= 0;
m->cache_num_tiles= 0;
m->cache_tile_blocks= 0;
m->cache_default= 1 | 2;
m->do_calm_drive= 1; m->do_calm_drive= 1;
m->indev[0]= 0; m->indev[0]= 0;
m->in_drive_handle= NULL; m->in_drive_handle= NULL;

View File

@ -429,6 +429,12 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, char *show_adr,
if(ret<=0) if(ret<=0)
goto ex; goto ex;
ret= Xorriso_set_data_cache(xorriso, ropts, xorriso->cache_num_tiles,
xorriso->cache_tile_blocks,
xorriso->cache_default);
if(ret<=0)
goto ex;
ext= isoburn_ropt_noiso1999; ext= isoburn_ropt_noiso1999;
if((xorriso->ino_behavior & (1 | 2)) && !(xorriso->do_aaip & (1 | 4 | 32)) if((xorriso->ino_behavior & (1 | 2)) && !(xorriso->do_aaip & (1 | 4 | 32))
&& !(xorriso->do_md5 & 1)) && !(xorriso->do_md5 & 1))

View File

@ -95,6 +95,7 @@ int Xorriso_create_empty_iso(struct XorrisO *xorriso, int flag)
/* Note: no return before isoburn_ropt_destroy() */ /* Note: no return before isoburn_ropt_destroy() */
isoburn_ropt_set_extensions(ropts, isoburn_ropt_pretend_blank); isoburn_ropt_set_extensions(ropts, isoburn_ropt_pretend_blank);
isoburn_ropt_set_input_charset(ropts, xorriso->in_charset); isoburn_ropt_set_input_charset(ropts, xorriso->in_charset);
isoburn_ropt_set_data_cache(ropts, 1, 1, 0);
isoburn_set_read_pacifier(drive, NULL, NULL); isoburn_set_read_pacifier(drive, NULL, NULL);
ret= isoburn_read_image(drive, ropts, &volset); ret= isoburn_read_image(drive, ropts, &volset);
Xorriso_process_msg_queues(xorriso,0); Xorriso_process_msg_queues(xorriso,0);

View File

@ -863,3 +863,26 @@ int Xorriso_list_extras(struct XorrisO *xorriso, char *mode, int flag)
return(1); return(1);
} }
/* @param flag bit0= set num_tiles to default value
bit1= set tile_blocks to default value
*/
int Xorriso_set_data_cache(struct XorrisO *xorriso, void *o,
int num_tiles, int tile_blocks, int flag)
{
int ret, tiles, blocks, set_flag;
struct isoburn_read_opts *ropts;
ropts= (struct isoburn_read_opts *) o;
if(flag & (1 | 2)) {
isoburn_ropt_get_data_cache(ropts, &tiles, &blocks, &set_flag, 1);
if(flag & 1)
num_tiles= tiles;
if(flag & 2)
tile_blocks= blocks;
}
ret= isoburn_ropt_set_data_cache(ropts, num_tiles, tile_blocks, 0);
return(ret);
}

View File

@ -30,6 +30,28 @@
#include "xorrisoburn.h" #include "xorrisoburn.h"
/* Command -data_cache_size */
int Xorriso_option_data_cache_size(struct XorrisO *xorriso, char *num_tiles,
char *tile_blocks, int flag)
{
int ret, blocks= -1, tiles= -1, to_default= 0;
sscanf(num_tiles, "%d", &tiles);
sscanf(tile_blocks, "%d", &blocks);
if(strcmp(num_tiles, "default") == 0 || num_tiles[0] == 0)
to_default|= 1;
if(strcmp(tile_blocks, "default") == 0 || tile_blocks[0] == 0)
to_default|= 2;
ret= Xorriso_set_data_cache(xorriso, NULL, tiles, blocks, to_default);
if(ret > 0) {
xorriso->cache_num_tiles= tiles;
xorriso->cache_tile_blocks= blocks;
xorriso->cache_default= to_default;
}
return(ret);
}
/* Options -dev , -indev, -outdev */ /* Options -dev , -indev, -outdev */
/** @param flag bit0= use as indev /** @param flag bit0= use as indev
bit1= use as outdev bit1= use as outdev
@ -1493,6 +1515,8 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
" Allow for writing only the usage of optical drives.", " Allow for writing only the usage of optical drives.",
" -early_stdio_test \"on\"|\"appendable_wo\"|\"off\"", " -early_stdio_test \"on\"|\"appendable_wo\"|\"off\"",
" Classify stdio drives by effective access permissions.", " Classify stdio drives by effective access permissions.",
" -data_cache_size number_of_tiles blocks_per_tile",
" Adjust size and granularity of the data read cache.",
" -blank \"fast\"|\"all\"|\"deformat\"|\"deformat_quickest\"", " -blank \"fast\"|\"all\"|\"deformat\"|\"deformat_quickest\"",
" Blank medium resp. invalidate ISO image on medium.", " Blank medium resp. invalidate ISO image on medium.",
" -close_damaged \"as_needed\"|\"force\"", " -close_damaged \"as_needed\"|\"force\"",

View File

@ -483,6 +483,7 @@ int Xorriso_count_args(struct XorrisO *xorriso, int argc, char **argv,
}; };
static char arg2_commands[][40]= { static char arg2_commands[][40]= {
"assert_volid","boot_image","clone","compare","compare_r","drive_class", "assert_volid","boot_image","clone","compare","compare_r","drive_class",
"data_cache_size",
"errfile_log","error_behavior","extract","extract_single", "errfile_log","error_behavior","extract","extract_single",
"jigdo","load","logfile", "jigdo","load","logfile",
"map","map_single","page","return_with", "map","map_single","page","return_with",
@ -606,7 +607,7 @@ int Xorriso_cmd_sorting_rank(struct XorrisO *xorriso,
"load", "displacement", "drive_class", "assert_volid", "in_charset", "load", "displacement", "drive_class", "assert_volid", "in_charset",
"auto_charset", "hardlinks", "acl", "xattr", "md5", "for_backup", "auto_charset", "hardlinks", "acl", "xattr", "md5", "for_backup",
"disk_dev_ino", "rom_toc_scan", "calm_drive", "ban_stdio_write", "disk_dev_ino", "rom_toc_scan", "calm_drive", "ban_stdio_write",
"early_stdio_test", "early_stdio_test", "data_cache_size",
"* Character sets:", "* Character sets:",
"charset", "local_charset", "charset", "local_charset",
@ -1119,6 +1120,10 @@ next_command:;
ret= Xorriso_option_cut_out(xorriso, arg1, arg2, ret= Xorriso_option_cut_out(xorriso, arg1, arg2,
argv[(*idx)-2], argv[(*idx)-1], 0); argv[(*idx)-2], argv[(*idx)-1], 0);
} else if(strcmp(cmd,"data_cache_size")==0) {
(*idx)+= 2;
ret= Xorriso_option_data_cache_size(xorriso, arg1, arg2, 0);
} else if(strcmp(cmd,"dev")==0) { } else if(strcmp(cmd,"dev")==0) {
(*idx)++; (*idx)++;
ret= Xorriso_option_dev(xorriso, arg1, 3); ret= Xorriso_option_dev(xorriso, arg1, 3);

View File

@ -1289,6 +1289,19 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
if(!(is_default && no_defaults)) if(!(is_default && no_defaults))
Xorriso_status_result(xorriso,filter,fp,flag&2); Xorriso_status_result(xorriso,filter,fp,flag&2);
is_default= ((xorriso->cache_default & 3) == 3);
sprintf(line, "-data_cache_size ");
if(xorriso->cache_default & 1)
sprintf(line + strlen(line), "default ");
else
sprintf(line + strlen(line), "%d ", xorriso->cache_num_tiles);
if(xorriso->cache_default & 2)
sprintf(line + strlen(line), "default\n");
else
sprintf(line + strlen(line), "%d\n", xorriso->cache_tile_blocks);
if(!(is_default && no_defaults))
Xorriso_status_result(xorriso,filter,fp,flag&2);
is_default= (xorriso->allow_restore==0 && xorriso->do_concat_split==1 && is_default= (xorriso->allow_restore==0 && xorriso->do_concat_split==1 &&
xorriso->do_auto_chmod==0 && xorriso->drives_exclusive == 1); xorriso->do_auto_chmod==0 && xorriso->drives_exclusive == 1);
mode_pt= "off"; mode_pt= "off";

View File

@ -9,7 +9,7 @@
.\" First parameter, NAME, should be all caps .\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1) .\" other parameters are allowed: see man(7), man(1)
.TH XORRISO 1 "Version 1.2.1, Mar 10, 2012" .TH XORRISO 1 "Version 1.2.1, Mar 11, 2012"
.\" Please adjust this date whenever revising the manpage. .\" Please adjust this date whenever revising the manpage.
.\" .\"
.\" Some roff macros, for reference: .\" Some roff macros, for reference:
@ -945,6 +945,23 @@ of severe problems, and may avoid some less severe error events.
Mode "appendable_wo" is like "on" with the additional property that Mode "appendable_wo" is like "on" with the additional property that
non\-empty write\-only files are regarded as appendable rather than blank. non\-empty write\-only files are regarded as appendable rather than blank.
.TP .TP
\fB\-data_cache_size\fR number_of_tiles blocks_per_tile
Set the size and granularity of the data cache which is used when ISO images
are loaded and when file content is read from ISO images. The cache consists
of several tiles, which each consists of several blocks. A larger cache
reduces the need for tiles being read multiple times. Larger tiles might
additionally improve the data throughput from the drive, but can be
wasteful if the data are scattered over the medium.
.br
Larger cache sizes help best with image loading from MMC drives. They are an
inferior alternative to \-osirrox option "sort_lba_on".
.br
blocks_per_tile must be a power of 2. E.g. 16, 32, or 64. The overall cache
size must not exceed 1 GiB.
The default values can be restored by parameter "default" instead of one or
both of the numbers.
Currently the default is 32 tiles of 32 blocks = 2 MiB.
.TP
.B Inserting files into ISO image: .B Inserting files into ISO image:
.PP .PP
The following commands expect file addresses of two kinds: The following commands expect file addresses of two kinds:

View File

@ -818,6 +818,11 @@ int Xorriso_option_cut_out(struct XorrisO *xorriso, char *disk_path,
*/ */
int Xorriso_option_dev(struct XorrisO *xorriso, char *adr, int flag); int Xorriso_option_dev(struct XorrisO *xorriso, char *adr, int flag);
/* Command -data_cache_size */
/* @since 1.2.2 */
int Xorriso_option_data_cache_size(struct XorrisO *xorriso, char *num_tiles,
char *tile_blocks, int flag);
/* Command -devices */ /* Command -devices */
/* @param flag bit0= perform -device_links rather than -devices /* @param flag bit0= perform -device_links rather than -devices
@return <=0 error , 1 success, 2 revoked by -reassure @return <=0 error , 1 success, 2 revoked by -reassure

View File

@ -884,6 +884,21 @@ activate them only after image loading.
non-empty write-only files are regarded as appendable rather than non-empty write-only files are regarded as appendable rather than
blank. blank.
-data_cache_size number_of_tiles blocks_per_tile
Set the size and granularity of the data cache which is used when
ISO images are loaded and when file content is read from ISO
images. The cache consists of several tiles, which each consists
of several blocks. A larger cache reduces the need for tiles being
read multiple times. Larger tiles might additionally improve the
data throughput from the drive, but can be wasteful if the data
are scattered over the medium.
Larger cache sizes help best with image loading from MMC drives.
They are an inferior alternative to -osirrox option "sort_lba_on".
blocks_per_tile must be a power of 2. E.g. 16, 32, or 64. The
overall cache size must not exceed 1 GiB. The default values can
be restored by parameter "default" instead of one or both of the
numbers. Currently the default is 32 tiles of 32 blocks = 2 MiB.
 
File: xorriso.info, Node: Insert, Next: SetInsert, Prev: Loading, Up: Options File: xorriso.info, Node: Insert, Next: SetInsert, Prev: Loading, Up: Options
@ -4388,6 +4403,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
* -cpr inserts like with cp -r: Insert. (line 152) * -cpr inserts like with cp -r: Insert. (line 152)
* -cpx copies files to disk: Restore. (line 92) * -cpx copies files to disk: Restore. (line 92)
* -cut_out inserts piece of data file: Insert. (line 126) * -cut_out inserts piece of data file: Insert. (line 126)
* -data_cache_size adjusts read cache size: Loading. (line 265)
* -dev acquires one drive for input and output: AqDrive. (line 12) * -dev acquires one drive for input and output: AqDrive. (line 12)
* -device_links gets list of drives: Inquiry. (line 18) * -device_links gets list of drives: Inquiry. (line 18)
* -devices gets list of drives: Inquiry. (line 7) * -devices gets list of drives: Inquiry. (line 7)
@ -4641,6 +4657,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
* Growing, _definition: Methods. (line 19) * Growing, _definition: Methods. (line 19)
* Hard links, control handling, -hardlinks: Loading. (line 110) * Hard links, control handling, -hardlinks: Loading. (line 110)
* hidden, set in ISO image, -hide: Manip. (line 171) * hidden, set in ISO image, -hide: Manip. (line 171)
* Image reading, cache size, -data_cache_size: Loading. (line 265)
* Image, _definition: Model. (line 9) * Image, _definition: Model. (line 9)
* Image, demand volume id, -assert_volid: Loading. (line 84) * Image, demand volume id, -assert_volid: Loading. (line 84)
* Image, discard pending changes, -rollback: Writing. (line 9) * Image, discard pending changes, -rollback: Writing. (line 9)
@ -4832,47 +4849,47 @@ Node: Options23730
Node: ArgSort25404 Node: ArgSort25404
Node: AqDrive26894 Node: AqDrive26894
Node: Loading29938 Node: Loading29938
Node: Insert44222 Node: Insert45147
Node: SetInsert53937 Node: SetInsert54862
Node: Manip62513 Node: Manip63438
Node: CmdFind71249 Node: CmdFind72174
Node: Filter83358 Node: Filter84283
Node: Writing87913 Node: Writing88838
Node: SetWrite96877 Node: SetWrite97802
Node: Bootable112152 Node: Bootable113077
Node: Jigdo125374 Node: Jigdo126299
Node: Charset129620 Node: Charset130545
Node: Exception132381 Node: Exception133306
Node: DialogCtl138500 Node: DialogCtl139425
Node: Inquiry141097 Node: Inquiry142022
Node: Navigate145963 Node: Navigate146888
Node: Verify154224 Node: Verify155149
Node: Restore162913 Node: Restore163838
Node: Emulation169822 Node: Emulation170747
Node: Scripting179633 Node: Scripting180558
Node: Frontend186793 Node: Frontend187718
Node: Examples188093 Node: Examples189018
Node: ExDevices189270 Node: ExDevices190195
Node: ExCreate189929 Node: ExCreate190854
Node: ExDialog191214 Node: ExDialog192139
Node: ExGrowing192479 Node: ExGrowing193404
Node: ExModifying193284 Node: ExModifying194209
Node: ExBootable193788 Node: ExBootable194713
Node: ExCharset194340 Node: ExCharset195265
Node: ExPseudo195161 Node: ExPseudo196086
Node: ExCdrecord196059 Node: ExCdrecord196984
Node: ExMkisofs196376 Node: ExMkisofs197301
Node: ExGrowisofs197716 Node: ExGrowisofs198641
Node: ExException198851 Node: ExException199776
Node: ExTime199305 Node: ExTime200230
Node: ExIncBackup199764 Node: ExIncBackup200689
Node: ExRestore203755 Node: ExRestore204680
Node: ExRecovery204715 Node: ExRecovery205640
Node: Files205285 Node: Files206210
Node: Seealso206584 Node: Seealso207509
Node: Bugreport207307 Node: Bugreport208232
Node: Legal207888 Node: Legal208813
Node: CommandIdx208818 Node: CommandIdx209743
Node: ConceptIdx224333 Node: ConceptIdx225331
 
End Tag Table End Tag Table

View File

@ -50,7 +50,7 @@
@c man .\" First parameter, NAME, should be all caps @c man .\" First parameter, NAME, should be all caps
@c man .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection @c man .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
@c man .\" other parameters are allowed: see man(7), man(1) @c man .\" other parameters are allowed: see man(7), man(1)
@c man .TH XORRISO 1 "Version 1.2.1, Mar 10, 2012" @c man .TH XORRISO 1 "Version 1.2.1, Mar 11, 2012"
@c man .\" Please adjust this date whenever revising the manpage. @c man .\" Please adjust this date whenever revising the manpage.
@c man .\" @c man .\"
@c man .\" Some roff macros, for reference: @c man .\" Some roff macros, for reference:
@ -1189,6 +1189,25 @@ of severe problems, and may avoid some less severe error events.
@* @*
Mode "appendable_wo" is like "on" with the additional property that Mode "appendable_wo" is like "on" with the additional property that
non-empty write-only files are regarded as appendable rather than blank. non-empty write-only files are regarded as appendable rather than blank.
@c man .TP
@item -data_cache_size number_of_tiles blocks_per_tile
@kindex -data_cache_size adjusts read cache size
@cindex Image reading, cache size, -data_cache_size
Set the size and granularity of the data cache which is used when ISO images
are loaded and when file content is read from ISO images. The cache consists
of several tiles, which each consists of several blocks. A larger cache
reduces the need for tiles being read multiple times. Larger tiles might
additionally improve the data throughput from the drive, but can be
wasteful if the data are scattered over the medium.
@*
Larger cache sizes help best with image loading from MMC drives. They are an
inferior alternative to -osirrox option "sort_lba_on".
@*
blocks_per_tile must be a power of 2. E.g. 16, 32, or 64. The overall cache
size must not exceed 1 GiB.
The default values can be restored by parameter "default" instead of one or
both of the numbers.
Currently the default is 32 tiles of 32 blocks = 2 MiB.
@end table @end table
@c man .TP @c man .TP
@c man .B Inserting files into ISO image: @c man .B Inserting files into ISO image:

View File

@ -267,6 +267,10 @@ struct XorrisO { /* the global context of xorriso */
burn_write_opts_set_start_byte(). burn_write_opts_set_start_byte().
*/ */
int cache_num_tiles; /* -data_cache_size */
int cache_tile_blocks;
int cache_default; /* bit0= cache_num_tiles, bit1= cache_tile_blocks */
int do_calm_drive; /* bit0= calm down drive after aquiring it */ int do_calm_drive; /* bit0= calm down drive after aquiring it */
char indev[SfileadrL]; char indev[SfileadrL];

View File

@ -1 +1 @@
#define Xorriso_timestamP "2012.03.11.162050" #define Xorriso_timestamP "2012.03.11.164130"

View File

@ -595,5 +595,8 @@ int Xorriso_close_damaged(struct XorrisO *xorriso, int flag);
int Xorriso_list_extras(struct XorrisO *xorriso, char *mode, int flag); int Xorriso_list_extras(struct XorrisO *xorriso, char *mode, int flag);
int Xorriso_set_data_cache(struct XorrisO *xorriso, void *ropts,
int num_tiles, int tile_blocks, int flag);
#endif /* Xorrisoburn_includeD */ #endif /* Xorrisoburn_includeD */