perfmon under windows will give you the amount of I/O that a process
is doing.  You can see if the number if I/O Reads and I/O Writes is
increasing for your process.  I don't know what the internals of the
functions you are calling are doing w.r.t. how the files are accessed.

On Thu, Oct 7, 2010 at 1:18 PM, Bastien Ferland-Raymond
<bastien.ferland-raymon...@ulaval.ca> wrote:
> Actually, I rechecked the paging and thought about it more, and realized the 
> windows was French and therefore, the "," was the decimal separator and not 
> the "thousand" separator.  So the paging was staying around 6 (not 6000) most 
> of the time and hitting the 100 other times. It looks a little bit more 
> normal.
>
> About the I/O.  I'm really not familiar with this concept.  I really want to 
> answer your questions and test all of that, but I don't know how.  Can you 
> check the I/O in R, or are you suppose to do it in Windows?  What 
> function/program should I use?
>
>
> Thanks
> Bastien
>
>
> ________________________________________
> De : jim holtman [jholt...@gmail.com]
> Date d'envoi : 6 octobre 2010 20:09
> À : Bastien Ferland-Raymond
> Cc : r-help@R-project.org
> Objet : Re: RE : [R] R getting slower until it breaks...
>
> 6000 pages/sec sounds very high, but if your CPU utilization is
> decreasing over time, this is one of the causes.  The system is paging
> memory out and having to wait for I/O to complete and therefore is not
> using the CPU.  What other I/O is your system doing?  When you are
> partitioning the image, are you doing a lot of I/O to write it out?
> So I would assume that you are somehow blocking on I/O and that is why
> your utilization (and throughput) is decreasing.  You might want to
> look at what your application is doing in this area.  Paging is also
> contributed to reading in some data.
>
> When are are breaking apart the data, are you starting the read from
> the front of the file each time, or picking up where you left off?  So
> you might want to take a closer look around how you are doing your
> I/O.
>
> On Wed, Oct 6, 2010 at 3:06 PM, Bastien Ferland-Raymond
> <bastien.ferland-raymon...@ulaval.ca> wrote:
>> Thanks a lot for your quick answer.  Here is my answer to your questions:
>>
>> Have you looked to see how fast your memory might be growing?
>> BFR- Yes I did, it's not to bad, it's starts around 60 000ko, rise up to 120 
>> 000 at the most, so not too scary.
>>
>> Are you leaving around any large objects that should be removed?
>> BFR- I was carefull making sure the function doesn't create anything that 
>> would be visible with objects().  Could it be creating other type (hidden) 
>> objects?  Maybe, but I'm not very familliar with that stuff.
>>
>> Have you looked to see if you are paging?
>> BFR- I just red the wiki about paging, didn't know that term before.  If I 
>> look at perfmon, its looks like keeping steady at 6000 pages/s with rare 
>> peaks as high as 900 000. Does it sounds normal?  How can it affect R?
>>
>> Is it your CPU time that is increasing, or your wall clock time?
>> BFR- If I go to the task manager - performance.  R is initially using around 
>> 40% of the processor (so around 80% of 1 core) but with (real) time passing, 
>> it gets lower and lower to get as low as 6% (12% of one core).  I was 
>> surprized to see that as usually my simulation in R use one whole core.
>>
>> It sounds like there might be some memory leak that might be causing your 
>> process size to grow and possibly causing paging.  You will need to gather 
>> some of the performance data that perfmon can provide and look at the memory 
>> usage, CPU time and I/O rates over time to see if there are any changes.
>> BFR- The term "Memory leak" feels right with my problem.  Is there ways I 
>> can control/detect/prevent this kind of problem in R.  Also, how can I check 
>> the I/O, i never looked at that before.
>>
>> Thanks again
>>
>> Bastien
>>
>>
>>
>> On Wed, Oct 6, 2010 at 2:11 PM, Bastien Ferland-Raymond
>> <bastien.ferland-raymon...@ulaval.ca> wrote:
>>> Hello R-users,
>>>
>>> I'm currently facing a pretty hard problem which I'm hopping you'll be able 
>>> to help me with.  I'm using R to create images.  That alone is not the 
>>> problem, the problem is that I'm using R to create 168 000 images...  My 
>>> code (which is given below) use different package (raster and rgdal) to 
>>> import a image (size 20gig) and divide it into 168 000 pictures that are 
>>> 100 pixel x 100 pixel.  The code works fine for making the images, but if I 
>>> ask it to run all 168 000, it always breaks around 15 000.
>>>
>>> It starts with the code being able to make around 2 pictures per second, 
>>> but then it slows down and after around 2000 pictures it's only 1 picture 
>>> per second.  Later on it's getting closer to 1 pictures every 3 seconds 
>>> etc.  until it bugs.  I have no error message, only Windows that tells me 
>>> that "R encounter a problem and most be close..."  Initially I though it 
>>> was a Windows problem, that I couldn't put too many file into a folder and 
>>> it was slowering it down.  Then I divided my batch process into smaller 
>>> (5000 files) folder but it didn't help, still breaks at 15 000.  I also try 
>>> to do gc() after each 5000 pictures to save memory but it didn't help 
>>> either.  I removed every loops from the code because I thought it was the 
>>> problem, but it was just faster at bugging... After the bug, I need to 
>>> restart the computer if I want to go back to the initial speed.
>>>
>>> I'm pretty much running out of options.  It's there limitation in R as the 
>>> number of files it can create in one session?  Is it a windows problem?  Is 
>>> there better way to clear the memory than gc()? Any thought on that?
>>>
>>> I'm using R 2.11.1, win XP, my hard drive is NTSF, computer: intel core2 
>>> duo E6750 32 bit with 2 gig of Ram.
>>>
>>> Here is my code, but I doubt it would help much with my problem:
>>>
>>> ########
>>> # It made of 4 functions (sorry, it's french):
>>>
>>> ##########################################################################
>>> ##########################################################################
>>> ###  Ensemble des fonctions pour faire les images NDVI rouge et verte  ###
>>> ##########################################################################
>>> ######  Bastien Ferland-Raymond, 5 oct 2010  #############################
>>> ##########################################################################
>>>
>>> ########
>>> ## Simplement rouler le script au complet
>>> ########
>>> ### Library nécessaire:
>>> library(raster)
>>> library(rgdal)
>>> library(shapefiles)
>>>
>>> #############################################################################
>>> ## Fonction 1  -  NDVI a partir de coordonnee Pixel et largeur #####
>>>  calculate_NDVI<- function(Type, object, VALUE) {
>>>   redorgreen <- ifelse(Type=="red",2,3)
>>>   list1 <- unstack(object)
>>>   rast1 <- list1[[1]]
>>>   rast2 <- list1[[redorgreen]]
>>>   NAvalue(rast1)<- -99999
>>>   NAvalue(rast2)<- -99999
>>>   cells1 <- 
>>> getValuesBlock(rast1,row=VALUE[[2]],nrow=VALUE[[3]],col=VALUE[[1]],ncol=VALUE[[3]])
>>>   cells2 <- 
>>> getValuesBlock(rast2,row=VALUE[[2]],nrow=VALUE[[3]],col=VALUE[[1]],ncol=VALUE[[3]])
>>>   cells1[is.na(cells1)]<-0;
>>>   cells2[is.na(cells2)]<-0;
>>>   calculNDVI <-(cells1 - cells2) / (cells1 + cells2)
>>>   NDVImatrix <- matrix(calculNDVI,nrow=VALUE[[3]],ncol=VALUE[[3]], 
>>> byrow=TRUE)
>>>   NDVImatrix <- NDVImatrix + 1
>>>   NDVImatrix <- NDVImatrix * (255/2)
>>>   return(NDVImatrix)
>>>   }
>>> #################################################################################
>>> ## Fonction 1b  -  Faire le tiff
>>>  make.tiff<- function(NV=newValues,TT=Type,img=imgRaster,nom){
>>>  pixelNDVIMatrix <- calculate_NDVI(TT,img,NV[c(1,2,3)])
>>>  newRaster <- raster(pixelNDVIMatrix)
>>>  NAvalue(newRaster)<-999999
>>>  nnom<-nom[NV[4]]
>>>  writeRaster(newRaster, 
>>> filename=nnom,datatype="INT1U",format="GTiff",overwrite=FALSE)
>>>  aaa<-2
>>> }
>>>
>>> #################################################################################
>>> ## Fonction 2  -  Creation de fonction convertissant les coordonnee 
>>> metrique en coordonnee pixels #####
>>>  latlong_to_pixels<- function(Coord, facteur, meterWidth=NULL) {   #Coord 
>>> doit être c(x,y)
>>>  newX <- Coord[1] / facteur
>>>  newY <- Coord[2] / facteur
>>>  if(!is.null(meterWidth)){
>>>   newWidth <- meterWidth / facteur
>>>   return(c(newX,newY,newWidth))
>>>  }
>>>  return(c(newX,newY))
>>>  }
>>>
>>> #############################################################################
>>> ####  Fonction 3  -  Fonction principal   #####
>>>  make.NDVI.photo<- 
>>> function(tableDesPlacettes,Type,newImagesDirectory,textAndImgDirectory="U:\\kNN_Valcartier\\Photo
>>>  aerienne"){
>>>  lastWD<- getwd()
>>> setwd(textAndImgDirectory)
>>>  imgRaster<- stack(imageAssociee)
>>>  x1<- tableDesPlacettes[,2] - xmin(imgRaster) - (tailleFenetres/2)     # 
>>> The image origin for calculation is in the top left corner
>>>  y1<- ymax(imgRaster) - tableDesPlacettes[,3] - (tailleFenetres/2)
>>> coo <- cbind(x1,y1)
>>>  newValues<- 
>>> t(apply(coo,1,latlong_to_pixels,facteurMetreParPixel,tailleFenetres))
>>>  newImgName<- 
>>> paste(newImagesDirectory,substr(Type,1,3),"_","GC",tableDesPlacettes[,1],".tif",sep="")
>>> apply(cbind(newValues,1:length(newImgName)),1,make.tiff,Type,imgRaster,nom=newImgName)
>>> setwd(lastWD)
>>> }
>>>
>>>
>>> ###########################
>>> ## Executing fonctions:
>>> #############################
>>>
>>>
>>> ###  loader les données brutes de fenêtres
>>> fichier.fenetre.brute<-read.dbf("U:\\kNN_Valcartier\\Fenêtres 30x30 1 
>>> octobre\\168700_30m_centroid.dbf", header=T)
>>> ###  Sélectionner les fenêtres complètes
>>> fenetre.complete<-round(fichier.fenetre.brute[[1]][,2],1)==900
>>> ###  Sortir les centroides pour extraction
>>> centro.tout.900<-fichier.fenetre.brute[[1]][fenetre.complete,c(1,5,6)]
>>> #rm(fichier.fenetre.brute) ; gc()
>>>
>>> ## données nécessaires pour la fonction
>>>  imageAssociee<- "mosaique_all_v1.img"  # nom de l'image
>>>  facteurMetreParPixel<- 0.3         # combien de metre vaut un pixel
>>>  tailleFenetres= 30            # en metre
>>>
>>>  start.time<-Sys.time();start.time
>>> make.NDVI.photo(centro.tout.900[19137:24136,],"red","BFR\\NDVI_red_fenetre\\batch
>>>  3\\")
>>>  stop.time<-Sys.time()
>>>  time.run<-stop.time-start.time
>>>  alarm()
>>>  time.run
>>> gc()
>>>  start.time<-Sys.time();start.time
>>> make.NDVI.photo(centro.tout.900[24137:29136,],"red","BFR\\NDVI_red_fenetre\\batch
>>>  4\\")
>>>  stop.time<-Sys.time()
>>>  time.run<-stop.time-start.time
>>>  alarm()
>>>  time.run
>>> gc()
>>>
>>> #############
>>>
>>>
>>> Voilà,
>>>
>>> Thanks!
>>>
>>> Bastien Ferland-Raymond
>>> ______________________________________________
>>> R-help@r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>>>
>>
>>
>>
>> --
>> Jim Holtman
>> Cincinnati, OH
>> +1 513 646 9390
>>
>> What is the problem that you are trying to solve?
>
>
>
> --
> Jim Holtman
> Cincinnati, OH
> +1 513 646 9390
>
> What is the problem that you are trying to solve?
>



-- 
Jim Holtman
Cincinnati, OH
+1 513 646 9390

What is the problem that you are trying to solve?

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to